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

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

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

事前準備

建立授權政策並啟用 IAP

如要建立授權政策,請建立定義目標和規則的政策檔案,然後在轉送規則中啟用 IAP。您可以在政策檔案的 httpRules 區段中定義條件,選擇只對特定要求套用 IAP。如果省略 httpRules 區段,系統會對所有要求強制執行 IAP。

gcloud

  1. 執行下列指令,準備 policy.yaml 檔案。 這項政策允許 IP 位址範圍為 10.0.0.0/24 的用戶端在轉送規則中啟用 IAP。
$ cat << EOF > policy.yaml
action: CUSTOM
description: authz policy with Cloud IAP
name: AUTHZ_POLICY_NAME
httpRules:
  - from:
      sources:
      - ipBlocks:
        - prefix: "10.0.0.0"
          length: 24
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 network-security authz-policies import AUTHZ_POLICY_NAME \
--source=policy.yaml \
--location=LOCATION \
--project=PROJECT_ID

更改下列內容:

  • PROJECT_ID:專案 ID。 Google Cloud
  • 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": [
      {
        "from": {
          "sources": {
            "ipBlocks": [
              {
                "prefix": "10.0.0.0",
                "length": 24
              }
            ]
          }
        }
      }
    ],
    "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/v1/projects/PROJECT_ID/locations/LOCATION/authzPolicies"
    

    更改下列內容:

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

將權限套用至資源

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

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

gcloud

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

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

更新可存取轉送規則資源的對象權限

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

在機構層級設定權限

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

設定資料夾層級的權限

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

在專案層級設定權限

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

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

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

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

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

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

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

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

gcloud 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:專案 ID。 Google Cloud
  • 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:專案 ID。 Google Cloud
  • REGION:資源所在的區域。
  • SERVICE:轉送規則 ID 或名稱。