본문 바로가기
WIKI 기술 지식 베이스

Open Policy Agent

원문 보기 위키 갱신

출처: Open Policy Agent

본문

OPA

Traefik Hub 기능

이 미들웨어는 Traefik Hub에서만 사용할 수 있어요. Traefik Hub의 고급 기능에 대해 더 알아보세요.

Traefik Hub에는 서비스에 대한 접근을 제한할 수 있는 Open Policy Agent 미들웨어가 포함되어 있어요. 또한 정책에서 추출한 데이터로 요청 헤더를 풍부하게 만들 수도 있습니다. OPA 미들웨어는 OPA 에이전트로 동작합니다.

OPA 버전

이 미들웨어는 Rego v0 호환 문법을 갖춘 OPA v1.x를 사용합니다. Rego v0 스타일로 작성된 정책(예: if 키워드가 없는 allow { ... })은 완전히 지원됩니다.

구성 예시

특정 JWT 클레임이 있는 요청 허용

apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: opa-allow-jwt-claim
  namespace: apps
spec:
  plugin:
    opa:
      policy: |
        package example.policies

        allow {
          [_, encoded] := split(input.headers.Authorization, " ")
          [header, payload, signature] = io.jwt.decode(encoded)
          payload["email"] == "[email protected]"
        }
      forwardHeaders:
        Group: data.package.grp

JSON Accept Header가 있는 요청 거부

apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: opa-deny-json
  namespace: apps
spec:
  plugin:
    opa:
      policy: |
        package example.policies

        default allow = false

        json_content {
          input.headers["Accept"] == "application/json"
        }

        allow {
          not json_content
        }
      allow: data.example.policies.allow

구성 옵션

| Field | Description | Default | Required | | policy | 정책 파일의 경로 또는 내용. | "" | No (policy 또는 bundlePath 중 하나는 반드시 설정) | | bundlePath | bundlePath 옵션은 OPA 번들의 경로를 담아야 해요. | "" | No (policy 또는 bundlePath 중 하나는 반드시 설정) | | allow | allow 옵션은 요청이 승인되어야 하는지 결정하는 평가할 표현식을 설정해요. | "" | No (allow 또는 forwardHeaders 중 하나는 반드시 설정) | | forwardHeaders | forwardHeaders 옵션은 요청에 추가할 HTTP 헤더를 설정하고, 주어진 표현식의 결과로 채웁니다. | {} | No (allow 또는 forwardHeaders 중 하나는 반드시 설정) |

Traefik OSS를 프로덕션에서 사용하시나요?

직장에서 Traefik을 사용한다면, 엔터프라이즈급 API 게이트웨이 기능이나 Traefik OSS 상용 지원을 추가하는 것을 고려해 보세요.

  • API Gateway 데모 영상 보기

  • 24/7/365 OSS 지원 요청

Traefik OSS에 API 게이트웨이 기능을 추가하는 것은 빠르고 매끄러워요. 기존 구성을 교체하거나(rip and replace) 버릴 필요 없이 그대로 유지됩니다. 짧은 영상으로 직접 확인해 보세요.

더 알아보기 (Learn more)