-
[Istio] External AuthorizationInfra 2024. 8. 4. 15:58728x90
Istio Serive Mesh
Istio는 쿠버네티스 클러스터 내에서 서비스 간의 통신을 제어하고 관리하는 서비스 메쉬로 트래픽 관리, 보안, 정책 적용 및 모니터링을 제공하여 마이크로서비스의 복잡성을 관리하는 데 도움을 줍니다.
External Authorization
External Authorization은 Istio의 보안 기능중에 하나로 인증 서비스와 연동하여 요청에 대한 엑세스 제어를 할 수 있도록 중앙에서 관리 해줍니다.
External Authorization은 Istio 데이터 플레인에서 트래픽을 처리하는 프록시인 Envoy Filter를 사용하여 구현됩니다. Envoy는 요청을 인증 서비스로 경유시키도록 하고 인증 서비스에 의해서 액세스 가능 여부를 결정하게 됩니다.구성 요소
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