ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Istio] External Authorization
    Infra 2024. 8. 4. 15:58
    728x90

    Istio Serive Mesh

    Istio는 쿠버네티스 클러스터 내에서 서비스 간의 통신을 제어하고 관리하는 서비스 메쉬로 트래픽 관리, 보안, 정책 적용 및 모니터링을 제공하여 마이크로서비스의 복잡성을 관리하는 데 도움을 줍니다.

    External Authorization

    External Authorization은 Istio의 보안 기능중에 하나로 인증 서비스와 연동하여 요청에 대한 엑세스 제어를 할 수 있도록 중앙에서 관리 해줍니다.
    External Authorization은 Istio 데이터 플레인에서 트래픽을 처리하는 프록시인 Envoy Filter를 사용하여 구현됩니다. Envoy는 요청을 인증 서비스로 경유시키도록 하고 인증 서비스에 의해서 액세스 가능 여부를 결정하게 됩니다.

    https://istio.io/v1.10/blog/2021/better-external-authz/

     

     

    구성 요소

    Authorization Service

    인증, 인가를 수행하는 서버로 Istio와 통합되어 요청의 액세스 가능 여부를 결정하게 됩니다. Http 또는 gRPC를 통해 Envoy와 통신하게 됩니다.
    Envoy 문서에서 제공하는 Proto를 구현체로 구현하여 인증, 인가를 수행합니다.

    Envoy Filter

    Envoy Filter는 클러스터로 들어온 요청을 인증 서비스를 거쳐가도록 경유 시킵니다.
    Envoy Filter 설정 예시는 아래와 같습니다.

    apiVersion: networking.istio.io/v1alpha3
    kind: EnvoyFilter
    metadata:
      name: ext-authz
      namespace: istio-system
    spec:
      workloadSelector:
        labels:
          istio: ingressgateway
      configPatches:
        - applyTo: HTTP_FILTER
          match:
            context: GATEWAY
            listener:
              portNumber: 80
              filterChain:
                filter:
                  name: "envoy.filters.network.http_connection_manager"
                  subFilter:
                    name: "envoy.filters.http.router"
          patch:
            operation: INSERT_BEFORE
            value:
              name: envoy.filters.http.ext_authz
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
                http_service:
                  server_uri:
                    uri: "http://auth-server.default.svc.cluster.local:8000" # 인증 서비스 경로
                    cluster: "outbound|8000||auth-server.default.svc.cluster.local"
                    timeout: 5s
                  authorization_request:
                    allowed_headers:
                      patterns:
                        - exact: "x-request-id"
                        - prefix: "x-envoy"
                        - prefix: "x-auth"
                        - exact: "authorization"
                  authorization_response:
                    allowed_upstream_headers:
                      patterns:
                        - exact: "x-auth"

    Istio Policy

    Istio의 AuthorizationPolicy 리소스를 사용하여 특정 조건 하에서 요청이 외부 권한 부여 서비스로 전달되도록 정의합니다.
    아래 설정은 example.com 도메인으로 ingress에 요청이 들어올 경우 인증 서비스를 거치도록 하는 예시입니다.

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: ext-authz
      namespace: default
    spec:
      selector:
        matchLabels:
          app: istio-ingressgateway
      action: CUSTOM
      provider:
        name: ext-authz
      rules:
      - to:
        - operation:
          - Hosts
            example.com
    728x90

    'Infra' 카테고리의 다른 글

    Kubernetes 환경에서 gRPC 로드밸런싱  (0) 2024.11.17
    [Kubernetes] 쿠버네티스 클러스터 구조  (0) 2024.03.31
Designed by Tistory.