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

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

事前準備

設定負載平衡器

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

建立授權政策

如要建立授權政策,請建立定義目標和規則的 YAML 檔案,然後使用 gcloud network-security authz-policies 指令匯入該檔案。

本節說明如何建立不同類型的授權政策,並附加至負載平衡器的轉送規則。

拒絕要求的授權政策

本節提供授權政策範例,根據特定要求屬性拒絕要求。

全球

如果您使用全域外部應用程式負載平衡器,請按照下列步驟建立及匯入授權政策,根據 IP 位址範圍拒絕要求:

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

    以下範例會在 global 位置建立轉送規則 LB_FORWARDING_RULEauthz-policy-deny.yaml 檔案。這項政策會拒絕 10.0.0.0/24 範圍內的 IP 位址存取 /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/global/forwardingRules/LB_FORWARDING_RULE"
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
    - to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    更改下列內容:

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

    以下範例指令會匯入先前建立的政策檔案,並建立授權政策:

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

跨地區

如果您使用跨區域內部應用程式負載平衡器,請按照下列步驟建立並匯入授權政策,根據用戶端憑證主體拒絕要求。

  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
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    更改下列內容:

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

    以下範例指令會匯入先前建立的政策檔案,並建立授權政策:

    gcloud 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"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_DNS_NAME_SAN
            principal:
              exact: "www.example.com"
      to:
        operations:
        - paths:
          - prefix: "/api/payments"
    action: DENY
    EOF
    

    更改下列內容:

    • LB_SCHEME:負載平衡架構。如果是區域性外部應用程式負載平衡器,請將架構設為 EXTERNAL_MANAGED。如果是區域性內部應用程式負載平衡器,請將架構設為 INTERNAL_MANAGED
    • PROJECT_ID:專案的 ID。 Google Cloud
    • 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.0/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.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    更改下列內容:

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

    下列範例指令會匯入先前建立的政策檔案,並建立授權政策:

    gcloud 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.0/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"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - ipBlocks:
          - prefix: "10.0.0.0"
            length: "24"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    更改下列內容:

    • LB_SCHEME:負載平衡架構。如果您使用區域性外部應用程式負載平衡器,請將架構設為 EXTERNAL_MANAGED。如果您使用區域性內部應用程式負載平衡器,請將架構設為 INTERNAL_MANAGED
    • PROJECT_ID:專案的 ID。 Google Cloud
    • 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
    

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

您可以根據服務帳戶或附加至各種 Google Cloud 資源的安全標記套用授權政策

本範例假設您已完成下列事項:

服務帳戶

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

    以下範例會為區域內部應用程式負載平衡器的轉送規則 LB_FORWARDING_RULE 建立 authz-policy-deny.yaml 檔案。這項政策會拒絕來自 Google Cloud 資源 (例如 Compute Engine VM) 的要求,該資源的服務帳戶為 my-sa-123@PROJECT_ID.iam.gserviceaccount.com,且要求會連往 /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"
    policyProfile: REQUEST_AUTHZ
    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:專案的 ID。 Google Cloud
    • 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_PERMANENT_ID 的 Google Cloud 資源 (例如 Compute Engine 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"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
      sources:
        resources:
        - tagValueIdSet:
          - ids: "TAG_VALUE_PERMANENT_ID"
      to:
        operations:
        - paths:
          - exact: "/api/payments"
    action: ALLOW
    EOF
    

    更改下列內容:

    • LB_SCHEME:負載平衡配置。如果是區域性內部應用程式負載平衡器,請將配置設為 INTERNAL_MANAGED
    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:您的 Google Cloud 區域。
    • LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
    • TAG_VALUE_PERMANENT_ID:代碼值的永久 ID
  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 區域。

授權政策,可委派授權決策

本節中的範例會建立授權政策,透過 Service Extensions 將授權決策委派給下列服務:

將授權決策委派給使用者管理的服務

您可以設定授權政策,透過 Service Extensions (具體來說是授權擴充功能),將授權決策委派給使用者管理的服務。

  • 如果是全域和跨區域負載平衡器,授權擴充功能可以在使用者管理的 Google Cloud 後端服務上執行。

  • 對於區域負載平衡器,授權擴充功能可以在使用者管理的 Google Cloud 後端服務和以 FQDN 為基礎的服務上執行。

這個範例設定假設您已建立名為 authz-service 的使用者管理 Google Cloud 後端服務,也稱為回呼後端服務。如要進一步瞭解如何建立,請參閱「設定使用者代管的呼叫後端服務」。

如果是以 FQDN 為基礎的服務,這個範例設定會假設自訂服務部署在您自己的 VPC 中,支援 ext_authz 通訊協定,且可透過完整網域名稱 mycustomauthz.internal.net 存取。

全域和跨區域

如果您使用全域外部應用程式負載平衡器或跨區域內部應用程式負載平衡器,請按照下列步驟將授權決策委派給使用者管理的服務。

  1. 在 YAML 檔案中定義授權擴充功能。授權擴充功能會在後端服務 (authz-service) 上執行,並支援 ext_authz 通訊協定。

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    
  2. 使用 gcloud service-extensions authz-extensions import 指令匯入授權擴充功能 YAML 檔案,建立授權擴充功能。

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

    更改下列內容:

    • LB_SCHEME:負載平衡配置。如果是全域外部應用程式負載平衡器,請將配置設為 EXTERNAL_MANAGED。如果是跨區域內部應用程式負載平衡器,請將配置設為 INTERNAL_MANAGED
    • PROJECT_ID:專案的 ID。 Google Cloud
  3. 在 YAML 檔案中定義授權政策。授權政策會將授權委派給 customProvider 欄位中的授權擴充功能。

    當要求包含非空白的 Authorization 標頭時,這項政策會針對所有前往 example.com/api/payments 網址路徑的流量,呼叫 my-authz-ext 授權擴充功能。

    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:
        - hosts:
          - exact: "example.com"
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
    EOF
    

    更改下列內容:

    • LB_SCHEME:負載平衡配置。如果是全域外部應用程式負載平衡器,請將配置設為 EXTERNAL_MANAGED。如果是跨區域內部應用程式負載平衡器,請將配置設為 INTERNAL_MANAGED
    • PROJECT_ID:專案的 ID。 Google Cloud
    • LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
  4. 使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。

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

地區性

如果您使用區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器,請按照下列步驟將授權決策委派給使用者管理的服務。

  1. 在 YAML 檔案中定義授權擴充功能。授權擴充功能可在後端服務或以 FQDN 為基礎的服務上執行。

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    authority: ext11.com
    loadBalancingScheme: LB_SCHEME
    service: BACKEND_SERVICE_URI_OR_FQDN
    forwardHeaders:
      - Authorization
    failOpen: false
    timeout: "0.1s"
    wireFormat: EXT_AUTHZ_GRPC
    EOF
    

    更改下列內容:

    • LB_SCHEME:負載平衡機制。 如果是區域性外部應用程式負載平衡器,請將機制設為 EXTERNAL_MANAGED。 如果是區域性內部應用程式負載平衡器,請將機制設為 INTERNAL_MANAGED
    • BACKEND_SERVICE_URI_OR_FQDN:服務可以是下列任一項:
      • 區域後端服務資源 URI,格式為 https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/backendServices/authz-service
      • 可由 Cloud DNS 解析的完整網域名稱 (例如 mycustomauthz.extension.net)。
  2. 使用 gcloud service-extensions authz-extensions import 指令匯入授權擴充功能 YAML 檔案,建立授權擴充功能。

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

    LOCATION 替換為設定叫用後端服務的 Google Cloud區域。

  3. 在 YAML 檔案中定義授權政策。授權政策會將授權委派給 customProvider 欄位中的授權擴充功能。

    當要求包含非空白的 Authorization 標頭時,政策會針對所有前往 example.com/api/payments 網址路徑的流量,呼叫 my-authz-ext 授權擴充功能。

    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"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - to:
        operations:
        - paths:
          - exact: "/api/payments"
      when: 'request.headers["Authorization"] != ""'
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    更改下列內容:

    • LB_SCHEME:負載平衡機制。 如果是區域性外部應用程式負載平衡器,請將機制設為 EXTERNAL_MANAGED。 如果是區域性內部應用程式負載平衡器,請將機制設為 INTERNAL_MANAGED
    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION: Google Cloud 區域。
    • LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
  4. 使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。

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

    LOCATION 替換為 Google Cloud負載平衡器設定所在的區域。

如要進一步瞭解授權擴充功能,請參閱「設定授權擴充功能」。

將授權決策委派給 Model Armor

您可以設定授權政策,將授權決策委派給 Model Armor。

開始前,請先建立 Model Armor 範本。在這個範例設定中,授權政策會指向授權擴充功能,而該擴充功能會指向 Model Armor。

如果您使用區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器,請按照下列步驟將授權決策委派給 Model Armor。

地區性

  1. 在 YAML 檔案中定義授權擴充功能。授權擴充功能會指向 Model Armor 要求和回應範本。

    cat >authz-extension.yaml <<EOF
    name: my-authz-extension
    loadBalancingScheme: INTERNAL_MANAGED
    service: modelarmor.LOCATION.rep.googleapis.com
    metadata:
      model_armor_settings: '[
        {
        "response_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID",
        "request_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID"
        }
      ]'
    failOpen: true
    EOF
    

    更改下列內容:

    • LOCATION:範本的位置
    • PROJECT_ID:範本所屬專案的 ID
    • RESPONSE_TEMPLATE_ID:回應範本的 ID
    • REQUEST_TEMPLATE_ID:要求範本的 ID
  2. 使用 gcloud beta service-extensions authz-extensions import 指令匯入授權擴充功能 YAML 檔案,建立授權擴充功能。

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

    LOCATION 替換為負載平衡器所在的 Google Cloud區域。

  3. 在 YAML 檔案中定義授權政策。授權政策會將授權委派給 customProvider 欄位中的授權擴充功能。

    policyProfile 的值為 CONTENT_AUTHZ

    cat >authz-policy-custom.yaml <<EOF
    name: my-authz-policy-custom
    target:
      loadBalancingScheme: INTERNAL_MANAGED
      resources:
      - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE"
    policyProfile: CONTENT_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION: Google Cloud 區域。
    • LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
  4. 使用 gcloud beta network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。

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

    LOCATION 替換為 Google Cloud負載平衡器設定所在的區域。

將授權決策委派給 Identity-Aware Proxy

對於全域外部應用程式負載平衡器和跨區域內部應用程式負載平衡器,您無法透過授權擴充功能將授權決策委派給 IAP。對於這些負載平衡器,您可以透過授權政策資源的 customProvider 欄位,將授權決策委派給 IAP。

對於區域外部應用程式負載平衡器和區域內部應用程式負載平衡器,您可以設定授權政策,透過授權擴充功能將授權決策委派給 IAP。

全域和跨區域

在下列範例中,所有授權決策都會委派給 IAP,適用於源自 10.0.0.0/24 IP 位址區塊的所有要求。如果要求源自 10.0.0.0/24 以外的任何 IP 位址,則不符合這項政策,IAP 也不會根據這項特定規則評估要求。

  1. 在 YAML 檔案中定義授權政策。授權政策會透過 customProvider 欄位,將授權委派給 IAP。

    cat >authz-policy-iap.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:
      - from:
          sources:
          - ipBlock:
            - prefix: "10.0.0.0"
              length: 24
    action: CUSTOM
    customProvider:
      cloudIap: {}
    EOF
    

    更改下列內容:

    • LB_SCHEME:負載平衡配置。如果是全域外部應用程式負載平衡器,請將配置設為 EXTERNAL_MANAGED。如果是跨區域內部應用程式負載平衡器,請將配置設為 INTERNAL_MANAGED
    • PROJECT_ID:專案的 ID。 Google Cloud
    • LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
  2. 使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。

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

地區性

如果您使用區域外部應用程式負載平衡器或區域內部應用程式負載平衡器,請按照下列步驟操作,使用授權擴充功能將授權決策委派給 IAP。

  1. 在 YAML 檔案中定義授權擴充功能。 授權擴充功能會指向 IAP。

    cat >authz-extension.yaml <<EOF
    name: my-authz-ext
    loadBalancingScheme: LB_SCHEME
    service: iap.googleapis.com
    failOpen: false
    EOF
    

    更改下列內容:

    • LB_SCHEME:負載平衡機制。如果是區域性外部應用程式負載平衡器,請將機制設為 EXTERNAL_MANAGED。如果是區域性內部應用程式負載平衡器,請將機制設為 INTERNAL_MANAGED
  2. 使用 gcloud service-extensions authz-extensions import 指令匯入授權擴充功能 YAML 檔案,建立授權擴充功能。

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

    LOCATION 替換為授權擴充功能設定所在的區域。 Google Cloud

  3. 在 YAML 檔案中定義授權政策。授權政策會將授權委派給 customProvider 欄位中的授權擴充功能。

    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"
    policyProfile: REQUEST_AUTHZ
    action: CUSTOM
    customProvider:
      authzExtension:
        resources:
        - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext"
    EOF
    

    更改下列內容:

    • LB_SCHEME:負載平衡配置。如果是區域性外部應用程式負載平衡器,請將配置設為 EXTERNAL_MANAGED。如果是區域性內部應用程式負載平衡器,請將配置設為 INTERNAL_MANAGED
    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION: Google Cloud 區域。
    • LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
  4. 使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。

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

    LOCATION 替換為 Google Cloud負載平衡器設定所在的區域。

瞭解 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"
      }
    

後續步驟