本頁面說明如何設定應用程式負載平衡器的授權政策。
事前準備
設定負載平衡器
如果您尚未建立負載平衡器,請參閱下列頁面,設定偏好的應用程式負載平衡器:
- 如要建立全域外部應用程式負載平衡器,請參閱「設定具有 VM 執行個體群組後端的全域外部應用程式負載平衡器」。
如要建立區域性外部應用程式負載平衡器,請參閱「設定具有 VM 執行個體群組後端的區域性外部應用程式負載平衡器」。
如要建立區域性內部應用程式負載平衡器,請參閱「設定具有 VM 執行個體群組後端的區域性內部應用程式負載平衡器」。
- 如要建立跨區域內部應用程式負載平衡器,請參閱「設定具有 VM 執行個體群組後端的跨區域內部應用程式負載平衡器」。
建立授權政策
如要建立授權政策,請建立定義目標和規則的 YAML 檔案,然後使用 gcloud network-security authz-policies 指令匯入檔案。
本節說明如何建立附加至應用程式負載平衡器轉送規則的授權政策。
如要進一步瞭解如何為使用 Service Extensions 委派授權的 Agent Gateway 建立授權政策,請參閱「使用 Service Extensions 委派授權」。
如要進一步瞭解如何建立 Secure Web Proxy 的授權政策,請參閱「設定 Secure Web Proxy 的授權政策」。
拒絕要求的授權政策
本節提供授權政策範例,說明如何根據特定要求屬性拒絕要求。
依據 IP 位址範圍拒絕要求
本節提供授權政策範例,說明如何根據特定 IP 位址範圍來源的要求,拒絕要求。
全域和跨區域
在 YAML 檔案中定義授權政策。
下列範例會為
global位置中的轉送規則LB_FORWARDING_RULE建立authz-policy-deny.yaml檔案。這項政策會拒絕 IP 位址在10.0.0.0/24範圍內的用戶端存取/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。如果是跨區域內部應用程式負載平衡器,請將配置設為INTERNAL_MANAGED。PROJECT_ID: Google Cloud 專案的 ID。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=global
地區性
在 YAML 檔案中定義授權政策。
以下範例會為Google Cloud 區域中的轉送規則
LB_FORWARDING_RULE建立authz-policy-deny.yaml檔案。這項政策會拒絕 IP 位址在10.0.0.0/24範圍內的用戶端存取/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: - ipBlocks: - prefix: "10.0.0.0" length: "24" - 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:負載平衡器的轉送規則名稱。
使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=LOCATION
根據用戶端憑證主體拒絕要求
本節提供授權政策範例,說明如何根據用戶端憑證主體拒絕要求。
全域和跨區域
在 YAML 檔案中定義授權政策。
下列範例會為
global位置中的轉送規則LB_FORWARDING_RULE建立authz-policy-deny.yaml檔案。如果用戶端憑證 DNS 名稱 SAN 含有www.example.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/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:負載平衡配置。如果是全域外部應用程式負載平衡器,請將配置設為EXTERNAL_MANAGED。如果是跨區域內部應用程式負載平衡器,請將配置設為INTERNAL_MANAGED。PROJECT_ID: Google Cloud 專案的 ID。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=global
地區性
在 YAML 檔案中定義授權政策。
以下範例會為Google Cloud 區域中的轉送規則
LB_FORWARDING_RULE建立authz-policy-deny.yaml檔案。如果用戶端憑證 DNS 名稱 SAN 含有www.example.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: - 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: Google Cloud 專案的 ID。LOCATION:您的 Google Cloud 區域。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=LOCATION
允許要求的授權政策
本節提供授權政策範例,允許來自特定 IP 位址範圍的要求。
全域和跨區域
如果您使用的是全域外部應用程式負載平衡器,或跨區域內部應用程式負載平衡器,請按照下列步驟建立授權政策:
在 YAML 檔案中定義授權政策。
下列範例會為
global位置中的轉送規則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/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: Google Cloud 專案的 ID。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。
gcloud network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=global
地區性
如果您使用的是區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器,請按照下列步驟建立及匯入授權政策:
在 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: Google Cloud 專案的 ID。LOCATION:您的 Google Cloud 區域。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。
gcloud network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=LOCATION
依據服務帳戶或標記設定授權政策
您可以根據附加至各種 Google Cloud 資源的服務帳戶或安全標記,套用授權政策。
本範例假設您已完成下列事項:
建立安全標記,並以鍵/值組合的形式附加至 Google Cloud 資源。建立標記時,請將
--purpose旗標設為GCE_FIREWALL。授權政策必須具備GCE_FIREWALL用途,才能套用標記。
服務帳戶
在 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: Google Cloud 專案的 ID。LOCATION:您的 Google Cloud 區域。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=LOCATION將
LOCATION替換為您的 Google Cloud 區域。
標記
在 YAML 檔案中定義授權政策。
以下範例會為區域性內部應用程式負載平衡器的轉送規則
LB_FORWARDING_RULE建立authz-policy-allow.yaml檔案。這項政策只允許來自 Google Cloud 資源 (例如 Compute Engine VM) 的要求,且該資源必須具有安全標記值TAG_VALUE_PERMANENT_ID,才能存取/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: Google Cloud 專案的 ID。LOCATION:您的 Google Cloud 區域。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。TAG_VALUE_PERMANENT_ID:標記值的永久 ID。
使用 gcloud network-security authz-policies import 指令匯入授權政策 YAML 檔案,建立授權政策。
gcloud network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=LOCATION更改下列內容:
LOCATION:您的 Google Cloud 區域。
委派授權決策的授權政策
本節中的範例會建立授權政策,透過 Service Extensions 將授權決策委派給下列服務:
- 使用者自行管理的服務
- Google 代管服務
將授權決策委派給使用者管理的代管服務
您可以設定授權政策,透過 Service Extensions (具體來說是授權擴充功能),將授權決策委派給使用者代管服務。
如果是全域和跨區域負載平衡器,授權擴充功能可以在使用者自行管理的 Google Cloud 後端服務上執行。
如果是區域性負載平衡器,授權擴充功能可在使用者管理的 Google Cloud 後端服務和 FQDN 型服務上執行。
這個範例設定假設您已建立使用者自行管理的 Google Cloud 後端服務 (也稱為呼叫後端服務),名稱為 authz-service。如要進一步瞭解如何建立,請參閱「設定使用者自行管理的呼叫後端服務」。
如果是以 FQDN 為基礎的服務,這個範例設定會假設自訂服務部署在您自己的虛擬私有雲中、支援 ext_authz 通訊協定,且可透過完整網域名稱 mycustomauthz.internal.net 存取。
全域和跨區域
如果您使用的是全域外部應用程式負載平衡器,或跨區域內部應用程式負載平衡器,請按照下列步驟,將授權決策委派給使用者自行管理的服務。
在 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使用
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: Google Cloud 專案的 ID。
在 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: Google Cloud 專案的 ID。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用
gcloud network-security authz-policies import指令匯入授權政策 YAML 檔案,建立授權政策。gcloud network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=global
地區性
如果您使用的是區域性外部應用程式負載平衡器,或區域性內部應用程式負載平衡器,請按照下列步驟,將授權決策委派給使用者自行管理的服務。
在 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)。
- 區域性後端服務資源 URI,格式為
使用
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區域。
在 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: Google Cloud 專案的 ID。LOCATION: Google Cloud 區域。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用
gcloud network-security authz-policies import指令匯入授權政策 YAML 檔案,建立授權政策。gcloud 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。
地區性
在 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
使用
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區域。
在 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: Google Cloud 專案的 ID。LOCATION: Google Cloud 區域。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用
gcloud network-security authz-policies import指令匯入授權政策 YAML 檔案,建立授權政策。gcloud 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。
全域和跨區域
在以下範例中,所有來自 10.0.0.0/24 IP 位址區塊的要求,其授權決策都會委派給 IAP。如果要求來自 10.0.0.0/24 以外的任何 IP 位址,則不符合這項政策,IAP 也不會根據這項特定規則評估。
在 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: Google Cloud 專案的 ID。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用
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。
在 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。
- LB_SCHEME:負載平衡配置。如果是區域性外部應用程式負載平衡器,請將配置設為
使用
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區域。
在 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: Google Cloud 專案的 ID。LOCATION: Google Cloud 區域。LB_FORWARDING_RULE:負載平衡器的轉送規則名稱。
使用
gcloud network-security authz-policies import指令匯入授權政策 YAML 檔案,建立授權政策。gcloud network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATION將 LOCATION 替換為設定負載平衡器的 Google Cloud區域。
瞭解 Cloud Logging 中的授權政策記錄
如要瞭解要求允許或拒絕時,授權政策的記錄方式,請參閱下列各節。
要求不符合 ALLOW 和 DENY 政策
如果要求不符合 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" 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" }