승인 확장 프로그램 구성

Service Extensions를 사용하면 애플리케이션 부하 분산기가 백엔드 서비스에 콜아웃을 전송하여 처리 경로에 맞춤 처리를 삽입할 수 있습니다. 승인 확장 프로그램은 부하 분산기가 요청 헤더를 수신하고 URL 맵이 백엔드 서비스를 선택한 후 요청 처리 경로에서 실행됩니다. 이 페이지에서는 승인 정책에 정의된 커스텀 승인 엔진을 사용하도록 승인 확장 프로그램을 구성하는 방법을 설명합니다.

애플리케이션 부하 분산기 확장 프로그램에 대한 개요는 Cloud Load Balancing 확장 프로그램 개요를 참고하세요.

소개

Cloud Load Balancing을 사용하면 부하 분산기로 유입되는 트래픽에 액세스 제어를 적용하는 승인 정책을 구성할 수 있습니다. 경우에 따라 복잡한 승인 결정을 승인 정책을 사용하여 쉽게 표현할 수 없습니다.

승인 확장 프로그램으로 승인 정책을 구성하여 승인 결정을 맞춤 승인 엔진에 위임할 수 있습니다. 데이터 경로에서 승인 확장 프로그램은 경로 확장 프로그램 다음에 실행되지만 트래픽 확장 프로그램 전에 실행됩니다. 승인 정책에 대한 자세한 내용은 승인 정책 개요를 참고하세요.

각 승인 요청에 대해 프록시는 요청 헤더를 확장 프로그램에 전달합니다. 제공업체의 응답에 따라 프록시는 요청을 전달하거나 거부합니다.

미리보기에서 리전 외부 애플리케이션 부하 분산기 및 리전 내부 애플리케이션 부하 분산기의 경우 요청 승인 정책과 콘텐츠 승인 정책에 대해 승인 확장 프로그램을 별도로 구성할 수 있습니다. 요청 승인 정책을 기반으로 하는 확장 프로그램은 콘텐츠 승인 정책을 기반으로 하는 확장 프로그램보다 먼저 실행되도록 구성됩니다.

애플리케이션 부하 분산기 확장 프로그램과 관련된 한도에 대한 자세한 내용은 할당량 및 한도 페이지를 참고하세요.

기본 승인 확장 프로그램 구성

다음 예시에서는 승인 정책을 사용하여 전역 외부 애플리케이션 부하 분산기의 승인 결정을 위임하는 승인 확장 프로그램 my-authz-ext를 구성하는 방법을 보여줍니다.

gcloud

  1. 호출 백엔드 서비스 구성에 설명된 대로 필요한 리소스를 만듭니다.

    이 연습에서는 전역 외부 애플리케이션 부하 분산기를 만듭니다. 서비스 이름을 authz-service로 지정하고 전달 규칙 이름을 fr1로 지정합니다.

  2. 승인 확장 프로그램을 구성합니다.

    1. 백엔드 서비스 authz-service와 연결하는 YAML 파일에서 확장 프로그램을 정의합니다. 제공된 샘플 값을 사용합니다.

      cat >authz-extension.yaml <<EOF
          name: my-authz-ext
          authority: ext11.com
          loadBalancingScheme: EXTERNAL_MANAGED
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
          forwardHeaders:
            - Authorization
          failOpen: false
          timeout: "0.1s"
          forwardAttributes:
          - request.mcp_param
          - connection.client_cert_leaf
      EOF
      

      PROJECT_ID프로젝트 ID로 바꿉니다.

      YAML 파일의 필드에 대한 자세한 내용은 API 문서의 ExtensionChain을 참고하세요. 지원되는 속성에 대한 자세한 내용은 지원되는 속성을 참고하세요.

    2. 승인 확장 프로그램을 가져옵니다. 다음 샘플 값과 함께 gcloud service-extensions authz-extensions import 명령어를 사용합니다.

      gcloud service-extensions authz-extensions import my-authz-ext \
          --source=authz-extension.yaml \
          --location=global
      

      프로토콜을 ext_authz로 설정하려면 대신 gcloud beta service-extensions authz-extensions import 명령어를 사용하세요.

  3. 확장 프로그램으로 승인 정책을 구성합니다.

    1. 확장 프로그램 my-authz-ext을 전달 규칙 fr1과 연결하는 승인 정책을 정의합니다. 제공된 샘플 값을 사용합니다. CUSTOM 작업은 확장 프로그램이 사용되고 있음을 나타냅니다.

      cat >authz-policy.yaml <<EOF
          name: my-authz-policy
          target:
            loadBalancingScheme: EXTERNAL_MANAGED
            resources:
              - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/fr1"
          action: CUSTOM
          customProvider:
            authzExtension:
              resources:
                - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
      EOF
      
    2. 승인 정책을 프로젝트로 가져옵니다. 다음 샘플 값과 함께 gcloud network-security authz-policies import 명령어를 사용합니다.

      gcloud network-security authz-policies import my-authz-policy \
          --source=authz-policy.yaml \
          --location=global
      

프로필을 기반으로 승인 확장 프로그램 구성

요청 및 콘텐츠 승인 정책에 대해 승인 확장 프로그램을 별도로 구성할 수 있습니다.

요청 승인 정책

다음 예시에서는 us-west1의 전달 규칙에 요청 승인 정책을 적용하는 승인 확장 프로그램을 구성하는 방법을 보여줍니다. 이 정책에서는 트래픽이 대상 example.com/mcp에 도달하기 전에 특정 주체로부터 상호 TLS 인증을 통과해야 합니다.

gcloud

  1. us-west1에서 fr2이라는 전달 규칙을 사용하여 lb-request-authz-service라는 콜아웃 백엔드 서비스를 구성합니다.

    서비스의 경우 VM 인스턴스 그룹 백엔드가 있는 리전 외부 애플리케이션 부하 분산기를 설정합니다.

  2. 승인 확장 프로그램을 구성합니다.

    1. 확장 프로그램을 백엔드 서비스 lb-request-authz-service와 연결하는 YAML 파일에서 확장 프로그램을 정의합니다. 제공된 샘플 값을 사용합니다.

      cat >lb-request-authz-extension.yaml <<EOF
      name: my-lb-request-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-request-service
      forwardHeaders:
        - Authorization
      failOpen: false
      timeout: "0.1s"
      wireFormat: EXT_AUTHZ_GRPC
      EOF
      

      PROJECT_ID프로젝트 ID로 바꿉니다.

      확장 프로그램은 백엔드 서비스와 동일한 리전에 있어야 합니다.

      기본적으로 모든 Service Extensions 콜아웃은 Envoy 외부 처리 또는 ext_proc 프로토콜을 사용합니다. 승인 콜아웃의 경우 외부 승인 또는 ext_authz 프로토콜도 미리보기에서 지원됩니다. wireFormat 옵션이 EXT_AUTHZ_GRPC로 설정되면 호출은 ext_authz 프로토콜을 사용합니다. 옵션을 지정하지 않으면 콜아웃에서 ext_proc 프로토콜을 사용합니다.

      요청 승인 정책의 경우 ext_proc 프로토콜도 지원되지만 콜아웃이 ext_authz 프로토콜을 사용하도록 wireFormat 값을 EXT_AUTHZ_GRPC로 설정할 수 있습니다.

      기본적으로 failOpenfalse로 설정되어 있습니다. 확장 프로그램이 제한 시간을 초과하거나 실패하면 요청 처리가 중지됩니다. 이 기본 옵션은 가용성보다 보안 또는 무결성을 우선시할 때 사용하는 것이 좋습니다.

    2. 승인 확장 프로그램을 가져옵니다. 다음 샘플 값과 함께 gcloud beta service-extensions authz-extensions import 명령어를 사용합니다.

      gcloud beta service-extensions authz-extensions import my-lb-request-authz-ext \
          --source=lb-request-authz-extension.yaml \
          --location=us-west1
      
  3. 동일한 프로젝트에서 확장 프로그램으로 승인 정책을 구성합니다.

    example.com/mcp에 대한 모든 요청에 대해 정책은 특정 주체의 상호 TLS 인증을 요구하고 승인 결정을 승인 확장 프로그램 my-lb-authz-request-ext에 추가로 위임합니다.

    1. my-lb-request-authz-ext 확장 프로그램을 전달 규칙 fr2와 연결하는 승인 정책을 정의합니다. 제공된 샘플 값을 사용합니다.

      cat >lb-request-authz-policy.yaml <<EOF
      name: my-lb-request-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr2"
      policyProfile: REQUEST_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/mcp"
        from:
          sources:
          - principals:
            - principal_selector: CLIENT_CERT_DNS_NAME_SANS
              principal:
                exact: "spiffe://p.global.123.workload.id.goog/ns/ns1/sa/hellomcp"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-request-authz-ext"
      EOF
      

      요청 승인 정책의 경우 policyProfile 값은 REQUEST_AUTHZ이어야 합니다. 이 값은 맞춤 정책 제공자가 트래픽을 허용하거나 거부하는 요청에 따라 작동함을 나타냅니다.

      CUSTOM 작업은 확장 프로그램이 프록시와 연결되어 있음을 나타냅니다.

      승인 정책 리소스에 대한 자세한 내용은 authzPolicy 참조 문서를 참고하세요.

    2. 승인 정책을 프로젝트로 가져옵니다. 다음 샘플 값과 함께 gcloud beta network-security authz-policies import 명령어를 사용합니다.

      gcloud beta network-security authz-policies import my-lb-request-authz-policy \
          --source=lb-request-authz-policy.yaml \
          --location=us-west1
      

콘텐츠 승인 정책의 경우

다음 예시에서는 us-west1의 전달 규칙에 콘텐츠 승인 정책을 적용하는 승인 확장 프로그램을 구성하는 방법을 보여줍니다. 정책에 따라 콘텐츠 정리 서비스가 애플리케이션 페이로드를 자세히 검사하여 요청을 허용하거나 거부하거나 필요에 따라 요청과 응답을 변경해야 합니다.

gcloud

  1. us-west1에서 fr3이라는 전달 규칙을 사용하여 lb-content-authz-service라는 콜아웃 백엔드 서비스를 구성합니다.

    서비스의 경우 VM 인스턴스 그룹 백엔드가 있는 리전 외부 애플리케이션 부하 분산기를 설정합니다.

    FULL_DUPLEX_STREAMED 본문 처리 모드에서 ext_proc 프로토콜을 사용하여 모든 이벤트를 지원하는 확장 프로그램 서버를 구성합니다.

  2. 승인 확장 프로그램을 구성합니다.

    1. 확장 프로그램을 백엔드 서비스 lb-content-authz-service와 연결하는 YAML 파일에서 확장 프로그램을 정의합니다. 제공된 샘플 값을 사용합니다.

      cat >lb-content-authz-extension.yaml <<EOF
      name: my-lb-content-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-sdp-service
      failOpen: false
      timeout: "0.1s"
      EOF
      

      콘텐츠 승인 정책의 경우 policyProfile 값은 CONTENT_AUTHZ이어야 합니다.

      CONTENT_AUTHZ 정책의 경우 wireFormat 값을 EXT_PROC_GRPC로 명시적으로 설정하지 않아도 됩니다. 기본적으로 콜아웃은 ext_proc 프로토콜을 사용합니다.

    2. 승인 확장 프로그램을 가져옵니다. 다음 샘플 값과 함께 gcloud beta service-extensions authz-extensions import 명령어를 사용합니다.

      gcloud beta service-extensions authz-extensions import my-lb-content-authz-ext \
          --source=lb-content-authz-extension.yaml \
          --location=us-west1
      
  3. 확장 프로그램으로 승인 정책을 구성합니다.

    1. 확장 프로그램 my-lb-content-authz-ext을 전달 규칙 fr3과 연결하는 승인 정책을 정의합니다. 제공된 샘플 값을 사용합니다.

      cat >lb-content-authz-policy.yaml <<EOF
      name: lb-content-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr3"
      policyProfile: CONTENT_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/sensitive-stuff"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-authz-content-ext"
      EOF
      

      policyProfile 값은 CONTENT_AUTHZ이어야 합니다.

    2. 승인 정책을 프로젝트로 가져옵니다. 다음 샘플 값과 함께 gcloud beta network-security authz-policies import 명령어를 사용합니다.

      gcloud beta network-security authz-policies import my-lb-content-authz-policy \
          --source=lb-content-authz-policy.yaml \
          --location=us-west1
      

승인 확장 프로그램의 제한사항

다음은 승인 확장 프로그램의 몇 가지 제한사항입니다.

  • 승인 정책에는 승인 확장 프로그램이 하나만 있을 수 있습니다.
  • 전달 규칙은 여러 승인 정책과 함께 사용할 수 있으며, 그중 하나만 맞춤 승인 정책일 수 있습니다.

모든 확장 프로그램에 적용되는 제한사항은 확장 프로그램 제한사항을 참고하세요.

다음 단계