使用授權政策將授權委派給 IAP 和 IAM

本頁面說明如何使用授權政策,在應用程式負載平衡器的授權政策中,將 Identity-Aware Proxy (IAP) 指定為自訂授權引擎。

如要將授權委派給 IAP 和身分與存取權管理 (IAM),您可以根據 IAM 或代管負載平衡器的使用者身分,將流量授權給轉送規則。這樣一來,您就能為後端服務強制執行以 IAP 為基礎的存取權控管機制。

事前準備

建立授權政策並啟用 IAP

如要建立授權政策,請建立政策檔案來定義目標和規則,然後在轉送規則中啟用 IAP。

gcloud

  1. 執行下列指令來準備 policy.yaml 檔案。
$ cat << EOF > policy.yaml
action: CUSTOM
description: authz policy with Cloud IAP
name: AUTHZ_POLICY_NAME
customProvider:
  cloudIap: {}
target:
  loadBalancingScheme: EXTERNAL_MANAGED
  resources:
  - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_ID
EOF
  1. 執行下列指令,在轉送規則中啟用 IAP。
gcloud beta network-security authz-policies import AUTHZ_POLICY_NAME \
--source=policy.yaml \
--location=LOCATION \
--project=PROJECT_ID

更改下列內容:

  • PROJECT_ID: Google Cloud 專案 ID。
  • LOCATION:資源所在的區域。
  • FORWARDING_RULE_ID:轉送規則資源的 ID。
  • AUTHZ_POLICY_NAME:授權政策的名稱。

API

  1. 執行下列指令來準備 policy.json 檔案。
    cat << EOF > policy.json
    {
    "name": "AUTHZ_POLICY_NAME",
    "target": {
    "loadBalancingScheme": "INTERNAL_MANAGED",
    "resources": [
    "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_ID"
    ],
    },
    "action": "CUSTOM",
    "httpRules": [],
    "customProvider": {
    "cloudIap": {}
    }
    }
    EOF
    
  2. 執行下列指令,在轉送規則中啟用 IAP。

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @policy.json \
    "https://networksecurity.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/authzPolicies"
    

    更改下列內容:

    • PROJECT_ID: Google Cloud 專案 ID。
    • LOCATION:資源所在的區域。
    • FORWARDING_RULE_ID:轉送規則資源的 ID。
    • AUTHZ_POLICY_NAME:授權政策的名稱。

為資源套用權限

您可以使用 IAP API,將 IAM 權限套用至受 IAP 保護專案中的個別資源。在特定層級授予的 IAM 權限會套用至其下方的所有層級。舉例來說,在專案層級授予的權限會套用至專案中的所有 Google Cloud 資源。

以下是設定權限的範例指令。詳情請參閱 gcloud alpha iap web set-iam-policy

gcloud

在範例指令中,將 POLICY_FILE 替換為含有有效政策的 YAML 格式檔案路徑。以下是 YAML 檔案範例:

bindings:
  members: user:example@example.com
  role: roles/iap.httpsResourceAccessor

更新可存取轉送規則資源的使用者權限

gcloud alpha iap web set-iam-policy POLICY_FILE [--organization=ORGANIZATION \
--folder=FOLDER --project=/PROJECT_ID \
--resource-type=RESOURCE_TYPE --service=SERVICE]

在機構層級設定權限

gcloud alpha iap web set-iam-policy POLICY_FILE --organization=ORGANIZATION

在資料夾層級設定權限

gcloud alpha iap web set-iam-policy POLICY_FILE --folder=FOLDER

在專案層級設定權限

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID --resource-type=iap_web

設定專案中所有通用轉送規則的權限

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID --resource-type=forwarding_rule

設定區域中專案中所有轉送規則的權限

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID \
--resource-type=forwarding_rule --region=REGION

設定專案中特定通用轉送規則的權限

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID \
--resource-type=forwarding_rule --service=SERVICE

設定特定區域專案中的特定轉送規則權限

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID \
--resource-type=forwarding_rule --service=SERVICE --region=REGION

更改下列內容:

  • POLICY_FILE:包含有效政策的 YAML 檔案路徑。
  • ORGANIZATION:貴機構的 ID。
  • FOLDER:包含應用程式的資料夾。
  • PROJECT_ID: Google Cloud 專案 ID。
  • RESOURCE_TYPE:IAP 資源類型。資源類型必須為 app-engineiap_webcomputeorganizationfolder
  • SERVICE:轉送規則 ID 或名稱。
  • REGION:資源所在的區域。

API

在機構層級設定權限

organization/ORGANIZATION

在資料夾層級設定權限

folders/FOLDER

在專案層級設定權限

projects/PROJECT_ID

設定專案中所有通用轉送規則的權限

projects/PROJECT_ID/forwarding_rule

設定區域中專案中所有轉送規則的權限

projects/PROJECT_ID/iap_web/forwarding_rule-REGION

設定專案中特定通用轉送規則的權限

projects/PROJECT_ID/iap_web/forwarding_rule/services/SERVICE

設定特定區域專案中的特定轉送規則權限

projects/PROJECT_ID/iap_web/forwarding_rule-REGION/services/SERVICE

設定授權政策

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d @policy.json \
"https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"

針對 policy.json,您可以執行下列指令來建立 JSON 檔案。視需要更新值。

cat << EOF > policy.json
{
  "bindings": {
     "members": "user:example@example.com",
     "role": "roles/iap.httpsResourceAccessor",
   }
}
EOF

更改下列內容:

  • ORGANIZATION:貴機構的 ID。
  • FOLDER:包含應用程式的資料夾。
  • PROJECT_ID: Google Cloud 專案 ID。
  • REGION:資源所在的區域。
  • SERVICE:轉送規則 ID 或名稱。