為應用程式負載平衡器設定授權政策

本頁說明如何為應用程式負載平衡器設定授權政策。

事前準備

設定負載平衡器

如果您尚未建立負載平衡器,請參閱下列頁面,設定偏好的應用程式負載平衡器:

建立服務帳戶或標記,並附加至 Google Cloud VM

如果是內部應用程式負載平衡器,您可以根據服務帳戶或附加至不同 Google Cloud資源的標記套用授權政策

本文件中的範例說明如何根據附加至 Google Cloud 虛擬機器 (VM) 執行個體的服務帳戶或標記,建立授權政策。凡是來自連結至特定服務帳戶或標記的用戶端 VM 的要求,都可以允許、拒絕或委派給外部服務。本文「根據服務帳戶或標記的授權政策」一節提供這類授權政策的範例,該政策使用服務帳戶和標記來強制執行存取控管。

外部應用程式負載平衡器不支援根據服務帳戶或標記套用授權政策。

將服務帳戶附加至用戶端 VM

如需將服務帳戶附加至 VM 執行個體的操作說明,請參閱下列文件:

將標記附加至執行個體群組範本

將標記繫結至執行個體群組範本前,請先建立標記鍵和值。建立標記時,請指定GCE_FIREWALL用途 Google Cloud 。Secure Web Proxy 和授權政策等網路功能需要GCE_FIREWALL用途,才能套用標記。

建立標記鍵和值

如要建立代碼,您需要代碼管理員角色 (roles/resourcemanager.tagAdmin)。

主控台

  1. 前往 Google Cloud 控制台的「Tags」(標記) 頁面。

    前往「標記」

  2. 按一下「建立」

  3. 在「標記鍵說明」欄位中輸入說明。

  4. 勾選「與網路防火牆搭配使用」核取方塊。

  5. 在「專案」清單中,選取要建立代碼的專案 Google Cloud 。

  6. 在「Network」(網路) 欄位中,選取「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:虛擬私有雲網路的名稱。
  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. 建立授權政策 YAML 檔案,拒絕特定要求。

    以下範例會在 global 位置建立轉送規則 LB_FORWARDING_RULEauthz-policy-deny.yaml 檔案。這項政策會拒絕用戶端存取 /api/payments 網址路徑,前提是這些用戶端的用戶端憑證 DNS 名稱 SAN 中含有 www.example.com

    $ 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:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            exact: "www.example.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. 建立授權政策 YAML 檔案,拒絕特定要求。

    以下範例會在Google Cloud 地區中,為轉送規則 LB_FORWARDING_RULE 建立 authz-policy-deny.yaml 檔案。這項政策會拒絕用戶端存取 /api/payments 網址路徑,這些用戶端的用戶端憑證 DNS 名稱 SAN 中含有 www.example.com

    $ 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:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            exact: "www.example.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
    

允許要求的授權政策

本節提供授權政策範例,允許來自特定 IP 位址範圍的要求。

全域和跨區域

如要使用全域外部應用程式負載平衡器或跨區域內部應用程式負載平衡器,請按照下列步驟建立及匯入授權政策:

  1. 建立授權政策 YAML 檔案,允許特定要求。

    以下範例會在 global 位置建立轉送規則 LB_FORWARDING_RULEauthz-policy-allow.yaml 檔案。這項政策允許 IP 位址位於 10.0.0.1/24 範圍內的用戶端存取 /api/payments 網址路徑。

    $ 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:
        - ipBlocks:
          - prefix: "10.0.0.1"
            length: "24"
      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. 建立授權政策 YAML 檔案,允許特定要求。

    以下範例會為特定 Google Cloud 區域中的轉送規則 LB_FORWARDING_RULE 建立 authz-policy-allow.yaml 檔案。這項政策允許 IP 位址位於 10.0.0.1/24 範圍內的用戶端存取 /api/payments 網址路徑。

    $ 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:
        - ipBlocks:
          - prefix: "10.0.0.1"
            length: "24"
      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
    

根據服務帳戶或標記的授權政策

您只能在內部應用程式負載平衡器上,根據服務帳戶或標記套用授權政策。凡是源自連結至特定服務帳戶或標記的用戶端 VM 流量,都可以允許、拒絕或委派給外部服務。

如要建立服務帳戶或標記,並附加至 VM,請參閱本文的「建立服務帳戶或標記,並附加至 VM Google Cloud Google Cloud 」一節。

服務帳戶

  1. 建立授權政策 YAML 檔案,拒絕特定要求。

    以下範例會為區域內部應用程式負載平衡器的轉送規則 LB_FORWARDING_RULE 建立 authz-policy-deny.yaml 檔案。這項政策設定為拒絕任何服務帳戶為 my-sa-123@PROJECT_ID.iam.gserviceaccount.com 的用戶端 VM 提出的要求,禁止存取 /api/payments 路徑。

    $ 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:
        - resources:
           - iamServiceAccount:
               exact: "my-sa-123@PROJECT_ID.iam.gserviceaccount.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    更改下列內容:

    • LB_SCHEME:您的負載平衡架構。如果是區域性內部應用程式負載平衡器,請將配置設為 INTERNAL_MANAGED
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • LOCATION:您的 Google Cloud 區域。
    • LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
  2. 建立授權政策並匯入 YAML 檔案。

    以下範例指令會匯入先前建立的政策檔案,並在指定的 Google Cloud 區域中建立授權政策。

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

    更改下列內容:

    • LOCATION:您的 Google Cloud 區域。

標記

  1. 建立授權政策 YAML 檔案,允許特定要求。

    以下範例會為區域內部應用程式負載平衡器的轉送規則 LB_FORWARDING_RULE 建立 authz-policy-allow.yaml 檔案。這項政策只允許來自具有資源標記 TAG_VALUE 的 VM 的要求存取 /api/payments 網址路徑。

    $ 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:
        resources:
        - tagValueIdSet:
          - ids: "TAG_VALUE"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    更改下列內容:

    • LB_SCHEME:您的負載平衡架構。如果是區域性內部應用程式負載平衡器,請將配置設為 INTERNAL_MANAGED
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • LOCATION:您的 Google Cloud 區域。
    • LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
  2. 建立授權政策並匯入 YAML 檔案。

    下列指令範例會匯入先前建立的政策檔案,並在指定的Google Cloud 地區建立授權政策:

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

    更改下列內容:

    • LOCATION:您的 Google Cloud 區域。

授權政策,可委派給服務擴充功能

開始前,請設定外部授權引擎。 如要進一步瞭解服務擴充功能,請參閱 Cloud Load Balancing 宣傳說明總覽

全域和跨區域

如要使用全域外部應用程式負載平衡器或跨區域內部應用程式負載平衡器,請按照下列步驟建立及匯入授權政策:

  1. 建立授權政策檔案,將特定要求委派給外部服務。

    以下範例會在 global 位置建立轉送規則 LB_FORWARDING_RULEauthz-policy-custom.yaml 檔案。當要求包含非空白的 Authorization 標頭時,這項政策會針對所有前往 /api/payments 網址路徑的流量,呼叫 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. 建立授權政策 YAML 檔案,將特定要求委派給外部服務。

    下列範例會為區域內部應用程式負載平衡器的 Google Cloud 區域中,轉送規則 LB_FORWARDING_RULE 建立 authz-policy-custom.yaml 檔案。當要求包含非空白的 Authorization 標頭時,這項政策會針對所有前往 /api/payments 網址路徑的流量,呼叫 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 中的授權政策記錄

如要瞭解系統在允許或拒絕要求時,如何記錄授權政策,請參閱下列章節。

要求不符合 ALLOWDENY 政策

如果要求與 ALLOWDENY 政策都不相符,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"
          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"
      }
    
  • 如果您使用區域內部應用程式負載平衡器、區域外部應用程式負載平衡器或跨區域內部應用程式負載平衡器,記錄檔中的 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 政策

如果要求符合 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"
      }
    
  • 如果您使用區域性內部應用程式負載平衡器、區域性外部應用程式負載平衡器或跨區域內部應用程式負載平衡器,proxyStatus 會設為 error=\"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 政策,但符合 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"
      }
    

後續步驟