GKE의 Envoy 사이드카 서비스 메시에서 서비스 보안 설정

이 페이지에서는 GKE의 Envoy 사이드카 서비스 메시에서 보안 기능을 설정하는 방법을 설명합니다.

기본 요건

이 가이드에서는 사용자가 다음 요건을 이미 충족한다고 가정합니다.

GKE의 사이드카에 승인 정책 설정

이 섹션에서는 GKE의 Cloud Service Mesh 사이드카에서 다양한 종류의 승인 정책을 설정하는 방법을 보여줍니다.

승인 정책을 만들려면 먼저 GCPAuthzPolicy CustomResourceDefinition(CRD)을 설치해야 합니다.

curl https://github.com/GoogleCloudPlatform/gke-networking-recipes/blob/main/gateway-api/config/mesh/crd/experimental/gcpauthzpolicy.yaml \
| kubectl apply -f -

승인 정책을 사용하면 Envoy 사이드카에 들어가는 트래픽에 액세스 제어를 적용할 수 있습니다. Kubernetes 배포에 정책을 적용할 수 있습니다. 배포는 승인 정책과 동일한 네임스페이스에 있어야 합니다.

모든 요청을 거부하는 승인 정책

크론 작업과 같이 아웃바운드 호출만 실행해야 하는 워크로드가 있는 경우 워크로드에 수신되는 모든 HTTP 요청을 거부하도록 승인 정책을 구성할 수 있습니다. 다음 예에서는 워크로드 whereami에 대한 수신 HTTP 요청을 거부합니다.

승인 거부 정책을 만들고 적용하려면 다음 단계를 따르세요.

  1. deny-all-authz-policy.yaml 파일을 생성하여 거부 정책을 만듭니다.

    cat >deny-all-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: wherami
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/"
    action: DENY
    EOF
    
  2. 정책을 적용합니다.

    kubectl apply -f deny-all-authz-policy.yaml
    

요청을 허용하는 승인 정책

특정 기준과 일치하는 요청만 허용하고 나머지는 거부하는 허용 정책을 구성할 수도 있습니다. 다음 예에서는 요청에 http 헤더 x-user-role:admin이 있는 GET 요청만 허용되는 whereami에 승인 정책을 구성합니다.

다음 단계에 따라 허용 승인 정책을 만들고 적용한 후 이전에 만든 거부 정책을 삭제한 다음 이 정책을 추가하여 결과를 확인합니다.

  1. allow-authz-policy.yaml 파일을 만들어 맞춤 정책을 만듭니다.

    cat >allow-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: whereami
    httpRules:
    - to:
        operations:
        - methods: ["GET"]
      when: "request.headers['x-user-role'] == 'admin'
    action: ALLOW
    EOF
    
  2. 정책을 적용합니다.

    kubectl apply -f allow-authz-policy.yaml
    

규칙에 따라 요청을 거부하는 승인 정책

다음 예에서는 워크로드 whereami가 경로 /admin에 있을 때 수신되는 HTTP GET 요청을 거부합니다 .

승인 거부 정책을 만들고 적용하려면 다음 단계를 따르세요.

  1. deny-path-authz-policy.yaml 파일을 생성하여 거부 정책을 만듭니다.

    cat >deny-path-authz-policy.yaml <<EOF
    apiVersion: networking.gke.io/v1
    kind: GCPAuthzPolicy
    metadata:
      name: myworkload-authz
      namespace: sidecar-example
    spec:
    targetRefs:
    - kind: Deployment
      name: whereami
    httpRules:
    - to:
        operations:
        - paths:
          - type: Prefix
            value: "/admin"
          methods: ["GET"]
    action: DENY
    EOF
    
  2. 정책을 적용합니다.

    kubectl apply -f deny-path-authz-policy.yaml