애플리케이션 부하 분산기의 승인 정책 설정

애플리케이션 부하 분산기에서 승인 정책은 경로 확장 프로그램, 네트워크 보안 정책 (Google Cloud Armor에서 평가), 교차 출처 리소스 공유 (CORS) 정책, IAP (Identity-Aware Proxy)를 평가한 후 트래픽 관리 작업을 실행하기 전에 호출됩니다.

이 페이지에서는 애플리케이션 부하 분산기의 승인 정책을 설정하는 방법을 보여줍니다.

시작하기 전에

부하 분산기 설정

부하 분산기를 만들지 않았다면 다음 페이지를 참고하여 원하는 애플리케이션 부하 분산기를 설정하세요.

보안 태그 또는 서비스 계정 만들기 및 구성

내부 애플리케이션 부하 분산기를 사용하면 클라이언트 VM에 연결된 보안 태그 및 서비스 계정을 기반으로 승인 정책을 적용할 수 있습니다(선택사항). 태그 기반 승인 정책을 적용하려면 Resource Manager를 사용하여 태그를 만드세요.

외부 애플리케이션 부하 분산기를 사용하는 경우 보안 태그를 만들고 구성할 필요가 없습니다.

자세한 내용은 방화벽에 태그 사용서비스 계정을 참고하세요.

클라이언트 VM에 서비스 계정 연결

VM 인스턴스에 서비스 계정을 연결하는 방법에 대한 단계별 절차는 다음 문서를 참고하세요.

보안 태그 키 및 값 만들기

인스턴스 그룹 템플릿으로 보안 태그를 바인딩하기 전에 태그 키와 값을 만들어야 합니다. 태그를 만들 때는 GCE_FIREWALL 목적으로 태그를 지정합니다. 보안 웹 프록시 및 승인 정책을 포함하여 Google Cloud 네트워킹 기능을 사용하려면 태그를 적용하기 위해 GCE_FIREWALL 용도가 필요합니다.

보안 태그를 만들려면 태그 관리자 역할 (roles/resourcemanager.tagAdmin)이 필요합니다.

콘솔

  1. Google Cloud 콘솔에서 태그 페이지로 이동합니다.

    태그로 이동

  2. 만들기를 클릭합니다.

  3. 태그 키 설명 필드에 설명을 입력합니다.

  4. 네트워크 방화벽과 함께 사용 체크박스를 선택합니다.

  5. 프로젝트 목록에서 태그를 만들 Google Cloud 프로젝트를 선택합니다.

  6. 네트워크 필드에서 LB_NETWORK를 선택합니다.

  7. 값 추가를 클릭합니다.

  8. 태그 값 필드에 TAG_VALUE를 입력합니다. 값은 숫자여야 합니다.

  9. 태그 값 설명 필드에 설명을 입력합니다.

  10. 태그 값 추가를 완료했으면 태그 키 만들기를 클릭합니다.

gcloud

  1. 보안 태그 키를 만듭니다.

    gcloud resource-manager tags keys create TAG_KEY \
        --parent=organizations/ORG_ID \
        --purpose=GCE_FIREWALL \
        --purpose-data=network=LB_NETWORK
    

    다음을 바꿉니다.

    • TAG_KEY: 보안 태그 키의 이름입니다.
    • ORG_ID: 조직의 ID
    • LB_NETWORK: VPC 네트워크의 이름입니다.
  2. 숫자 태그 키에 보안 태그 값을 추가합니다.

    gcloud resource-manager tags values create TAG_VALUE \
        --parent=ORG_ID/TAG_KEY
    

    TAG_VALUE를 숫자 태그 값으로 바꿉니다.

인스턴스 그룹 템플릿에 보안 태그 바인딩

태그 관리자는 개별 VM 인스턴스 또는 인스턴스 그룹 템플릿에 보안 태그를 바인딩하고 VM 또는 템플릿의 백엔드에 태그 값을 연결할 수 있습니다.

보안 태그를 바인딩하려면 태그 사용자 역할(roles/resourcemanager.tagUser)이 필요합니다.

  1. 프로젝트 및 영역의 전체 이름 프리픽스를 정의합니다.

    FULL_NAME_PREFIX=//compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/instances/
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트의 ID입니다.
    • ZONE: 관리형 인스턴스 그룹이 있는 영역입니다.
  2. 인스턴스 그룹 템플릿 ID를 가져옵니다.

    TEMPLATE_ID=$(gcloud compute instance-templates describe TEMPLATE_NAME --region=LOCATION --format='value(id)')
    

    다음을 바꿉니다.

    • TEMPLATE_NAME: 인스턴스 그룹 템플릿의 이름입니다.
    • LOCATION: Google Cloud 리전입니다.
  3. FULL_NAME_PREFIXTEMPLATE_ID 값을 연결합니다.

    PARENT="$FULL_NAME_PREFIX$TEMPLATE_ID"
    echo $PARENT
    
  4. 바인딩을 만듭니다.

    gcloud resource-manager tags bindings create \
        --location LOCATION \
        --tag-value ORG_ID/TAG_KEY/TAG_VALUE \
        --parent PARENT
    

    다음을 바꿉니다.

    • ORG_ID: 조직의 ID
    • LOCATION: Google Cloud 리전입니다.
    • TAG_KEY: 보안 태그 키의 이름입니다.
    • TAG_VALUE: 숫자 태그 값입니다.

승인 정책 만들기

승인 정책을 만들려면 타겟과 규칙을 정의하는 YAML 파일을 만든 다음 gcloud beta network-security authz-policies 명령어를 사용하여 파일을 가져옵니다.

이 섹션에서는 부하 분산기의 전달 규칙에 연결된 다양한 유형의 승인 정책을 만드는 방법을 설명합니다.

요청을 거부하는 승인 정책

전역 및 리전 간

전역 외부 애플리케이션 부하 분산기 또는 리전 간 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 정책을 만들고 가져옵니다.

  1. 특정 요청을 거부하는 승인 정책 파일을 만듭니다.

    다음 예에서는 global 위치에 전달 규칙 LB_FORWARDING_RULEauthz-policy-deny.yaml 파일을 만듭니다. 이 정책은 *.hello.com 클라이언트가 /api/payments URL 경로에 액세스하는 것을 거부합니다.

    $ cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - principals:
          - suffix: ".hello.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    다음을 바꿉니다.

    • LB_SCHEME: 부하 분산 스키마입니다. 전역 외부 애플리케이션 부하 분산기의 경우 스키마를 EXTERNAL_MANAGED로 설정합니다. 리전 간 내부 애플리케이션 부하 분산기의 경우 스키마를 INTERNAL_MANAGED로 설정합니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
  2. 승인 정책을 만들고 YAML 파일을 가져옵니다.

    다음 명령어 예시에서는 이전에 만든 정책 파일을 가져와 승인 정책을 만듭니다.

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

리전

리전 외부 애플리케이션 부하 분산기 또는 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 정책을 만들고 가져옵니다.

  1. 특정 요청을 허용하도록 승인 정책 파일을 만듭니다.

    다음 예에서는 Google Cloud 리전에서 전달 규칙 LB_FORWARDING_RULEauthz-policy-deny.yaml 파일을 만듭니다. 이 정책은 *.hello.com와 일치하는 ID가 있는 클라이언트가 /api/payments URL 경로에 액세스하는 것을 거부합니다. 또한 이 정책은 서비스 계정 my-sa-123@PROJECT_ID.iam.gserviceaccount.com이 있는 모든 클라이언트 VM의 /api/payments URL 액세스를 거부합니다.

    $ cat >authz-policy-deny.yaml <<EOF
    name: my-authz-policy-deny
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - principals:
          - suffix: ".hello.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    - from:
        sources:
        - resources:
           - iamServiceAccount:
               exact: "my-sa-123@PROJECT_ID.iam.gserviceaccount.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    다음을 바꿉니다.

    • LB_SCHEME: 부하 분산 스키마입니다. 리전 외부 애플리케이션 부하 분산기의 경우 스키마를 EXTERNAL_MANAGED로 설정합니다. 리전 내부 애플리케이션 부하 분산기의 경우 스키마를 INTERNAL_MANAGED로 설정합니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • LOCATION: Google Cloud 리전입니다.
    • LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
  2. 승인 정책을 만들고 YAML 파일을 가져옵니다.

    다음 명령어 예에서는 이전에 만든 정책 파일을 가져오고 LOCATION 리전에 승인 정책을 만듭니다.

    gcloud beta network-security authz-policies import my-authz-policy-deny \
        --source=authz-policy-deny.yaml \
        --location=LOCATION
    

요청을 허용하는 승인 정책

전역 및 리전 간

전역 외부 애플리케이션 부하 분산기 또는 리전 간 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 정책을 만들고 가져옵니다.

  1. 특정 요청을 허용하도록 승인 정책 파일을 만듭니다.

    다음 예에서는 global 위치에 전달 규칙 LB_FORWARDING_RULEauthz-policy-allow.yaml 파일을 만듭니다. 이 정책은 *.example.com의 클라이언트만 /api/payments URL 경로에 액세스하도록 허용합니다.

    $ cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
      sources:
      - principals:
        - suffix: ".example.com"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    다음을 바꿉니다.

    • LB_SCHEME: 부하 분산 스키마입니다. 전역 외부 애플리케이션 부하 분산기의 경우 스키마를 EXTERNAL_MANAGED로 설정합니다. 리전 간 내부 애플리케이션 부하 분산기의 경우 스키마를 INTERNAL_MANAGED로 설정합니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
  2. 승인 정책을 만들고 YAML 파일을 가져옵니다.

    다음 명령어 예시에서는 이전에 만든 정책 파일을 가져와 승인 정책을 만듭니다.

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

리전

리전 외부 애플리케이션 부하 분산기 또는 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 정책을 만들고 가져옵니다.

  1. 특정 요청을 허용하도록 승인 정책 파일을 만듭니다.

    다음 예에서는 리전 내부 애플리케이션 부하 분산기의 Google Cloud 리전에서 전달 규칙 LB_FORWARDING_RULEauthz-policy-allow.yaml 파일을 만듭니다. 이 정책은 요청이 리소스 태그 TAG_VALUE가 있는 VM에서 시작된 경우 *.example.com의 클라이언트만 /api/payments URL 경로에 액세스하도록 허용합니다.

    $ cat >authz-policy-allow.yaml <<EOF
    name: my-authz-policy-allow
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
      sources:
      - principals:
        - suffix: ".example.com"
        resources:
        - tagValueIdSet:
          - ids: "TAG_VALUE"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    다음을 바꿉니다.

    • LB_SCHEME: 부하 분산 스키마입니다. 리전 외부 애플리케이션 부하 분산기를 사용하는 경우 스킴을 EXTERNAL_MANAGED로 설정합니다. 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 스키마를 INTERNAL_MANAGED로 설정합니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • LOCATION: Google Cloud 리전입니다.
    • LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
  2. 승인 정책을 만들고 YAML 파일을 가져옵니다.

    다음 명령어 예에서는 이전에 만든 정책 파일을 가져오고 LOCATION 리전에 승인 정책을 만듭니다.

    gcloud beta network-security authz-policies import my-authz-policy-allow \
        --source=authz-policy-allow.yaml \
        --location=LOCATION
    

서비스 확장 프로그램에 위임하는 승인 정책

시작하기 전에 외부 승인 엔진을 설정합니다. 서비스 확장 프로그램에 대한 자세한 내용은 Cloud Load Balancing 콜아웃 개요를 참고하세요.

전역 및 리전 간

전역 외부 애플리케이션 부하 분산기 또는 리전 간 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 정책을 만들고 가져옵니다.

  1. 특정 요청을 외부 서비스에 위임할 승인 정책 파일을 만듭니다.

    다음 예에서는 global 위치에 전달 규칙 LB_FORWARDING_RULEauthz-policy-custom.yaml 파일을 만듭니다. 이 정책은 요청에 비어 있지 않은 Authorization 헤더가 포함된 경우 /api/payments URL 경로의 모든 트래픽에 대해 AUTHZ_EXTENSION 확장 프로그램을 호출합니다.

    $ cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - to:
        operations:
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "https://networkservices.googleapis.com/v1/projects/PROJECT_ID/locations/global/authzExtensions/AUTHZ_EXTENSION"
    EOF
    

    다음을 바꿉니다.

    • LB_SCHEME: 부하 분산 스키마입니다. 전역 외부 애플리케이션 부하 분산기의 경우 스키마를 EXTERNAL_MANAGED로 설정합니다. 리전 간 내부 애플리케이션 부하 분산기의 경우 스키마를 INTERNAL_MANAGED로 설정합니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
    • AUTHZ_EXTENSION: 승인 확장 프로그램의 이름입니다.
  2. 승인 정책을 만들고 YAML 파일을 가져옵니다.

    다음 명령어 예시에서는 이전에 만든 정책 파일을 가져와 승인 정책을 만듭니다.

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

리전

리전 외부 애플리케이션 부하 분산기 또는 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 정책을 만들고 가져옵니다.

  1. 특정 요청을 외부 서비스에 위임할 승인 정책 파일을 만듭니다.

    다음 예에서는 리전 내부 애플리케이션 부하 분산기의 Google Cloud 리전에서 전달 규칙 LB_FORWARDING_RULEauthz-policy-custom.yaml 파일을 만듭니다. 이 정책은 요청에 비어 있지 않은 Authorization 헤더가 포함된 경우 /api/payments URL 경로의 모든 트래픽에 대해 AUTHZ_EXTENSION 확장 프로그램을 호출합니다.

    $ cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: LB_SCHEME
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - to:
        operations:
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "https://networkservices.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/authzExtensions/AUTHZ_EXTENSION"
    EOF
    

    다음을 바꿉니다.

    • LB_SCHEME: 부하 분산 스키마입니다. 리전 외부 애플리케이션 부하 분산기의 경우 스키마를 EXTERNAL_MANAGED로 설정합니다. 리전 내부 애플리케이션 부하 분산기의 경우 스키마를 INTERNAL_MANAGED로 설정합니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
    • LOCATION: Google Cloud 리전입니다.
    • LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
    • AUTHZ_EXTENSION: 승인 확장 프로그램의 이름입니다.
  2. 승인 정책을 만들고 YAML 파일을 가져옵니다.

    다음 명령어 예에서는 이전에 만든 정책 파일을 가져오고 LOCATION 리전에 승인 정책을 만듭니다.

    gcloud beta network-security authz-policies import my-authz-policy-custom \
        --source=authz-policy-custom.yaml \
        --location=LOCATION
    

승인 정책 테스트

승인 정책을 테스트하려면 부하 분산기로 트래픽을 전송합니다. 자세한 내용은 다음 페이지를 참고하세요.

Cloud Logging의 승인 정책 로그 이해

요청이 허용되거나 거부될 때 승인 정책이 로깅되는 방식을 알아보려면 다음을 참고하세요.

  • 요청이 ALLOW 정책 또는 DENY 정책과 일치하지 않으면 DENY 정책이 요청을 허용하고 allowed_as_no_deny_policies_matched_request로 로깅합니다. 반대로 ALLOW 정책은 요청을 거부하고 denied_as_no_allow_policies_matched_request로 로깅합니다. 정책 중 하나가 요청을 거부하므로 요청이 거부됩니다.

    전역 외부 애플리케이션 부하 분산기를 사용하는 경우 statusDetails가 로그에서 denied_by_authz_policy로 설정됩니다. 아래 예시를 참조하세요.

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

    리전 내부 애플리케이션 부하 분산기, 리전 외부 애플리케이션 부하 분산기 또는 리전 간 내부 애플리케이션 부하 분산기를 사용하는 경우 proxyStatus가 로그에서 error=\"http_request_error\"; details=\"denied_by_authz_policy\"로 설정됩니다. 아래 예시를 참조하세요.

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "denied_as_no_allow_policies_matched_request"
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • 요청이 DENY 정책과 일치하면 요청이 거부되고 요청을 거부한 정책이 로깅됩니다.

    전역 외부 애플리케이션 부하 분산기를 사용하는 경우 statusDetails가 로그에서 denied_by_authz_policy로 설정되고 요청을 거부한 정책의 이름이 policies에 로깅됩니다. 아래 예시를 참조하세요.

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/global/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
          statusDetails: "denied_by_authz_policy"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

    리전 내부 애플리케이션 부하 분산기, 리전 외부 애플리케이션 부하 분산기 또는 리전 간 내부 애플리케이션 부하 분산기를 사용하는 경우 proxyStatuserror=\"http_request_error\"; details=\"denied_by_authz_policy\"로 설정되고 정책 이름이 policies에 로깅됩니다. 아래 예시를 참조하세요.

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/deny-authz-policy-test""
                result: "DENIED"
              }
            ]
            result: "DENIED"
          }
          backendTargetProjectNumber: "projects/12345567"
          remoteIp: "00.100.11.104"
          proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\""
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    
  • 요청이 DENY 정책과 일치하지 않지만 ALLOW 정책과 일치하면 요청이 허용됩니다. 로그에서 이 작업은 DENY 정책에 대해 allowed_as_no_deny_policies_matched_request로 로깅됩니다. 요청을 허용한 정책도 로깅됩니다.

    전역 외부 애플리케이션 부하 분산기를 사용하는 경우 로그에 statusDetails가 없습니다. 요청을 허용한 정책도 policies에 로깅됩니다. 아래 예시를 참조하세요.

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/global/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

    리전 내부 애플리케이션 부하 분산기, 리전 외부 애플리케이션 부하 분산기 또는 리전 간 내부 애플리케이션 부하 분산기를 사용하는 경우 로그에 proxyStatus 필드가 없습니다. 요청을 허용한 정책도 policies에 로깅됩니다. 다음 예를 참고하세요.

      {
        httpRequest: {8}
        insertId: "example-id"
        jsonPayload: {
          @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
          authzPolicyInfo: {
            policies: [
              0: {
                details: "allowed_as_no_deny_policies_matched_request"
                result: "ALLOWED"
              }
              1: {
                details: "name: "projects/12345567/locations/$REGION/authzPolicies/allow-authz-policy-test""
                result: "ALLOWED"
              }
            ]
            result: "ALLOWED"
          }
          backendTargetProjectNumber: "projects/12345567"
          cacheDecision: [2]
          remoteIp: "00.100.11.104"
        }
        logName: "projects/example-project/logs/requests"
        receiveTimestamp: "2024-08-28T15:33:56.046651035Z"
        resource: {2}
        severity: "WARNING"
        spanId: "3e1a09a8e5e3e14d"
        timestamp: "2024-08-28T15:33:55.355042Z"
        trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509"
      }
    

다음 단계