使用授权政策将授权委托给 IAP 和 IAM

本页介绍了如何使用授权政策在应用负载平衡器的授权政策中将 Identity-Aware Proxy (IAP) 指定为自定义授权引擎。

如需将授权委托给 IAP 和 Identity and Access Management (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 @settings.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 对受 IAP 保护的项目中的各个资源应用 IAM 权限。在特定级别授予的 IAM 权限适用于其下的所有级别。例如,在项目级别授予的权限适用于该项目中的所有 Google Cloud 资源。

以下是一些用于配置权限的示例命令。如需了解详情,请参阅 gcloud alpha iap web set-iam-policy

gcloud

在示例命令中,将 POLICY_FILE 替换为包含有效政策的 YAML 格式文件的路径。以下是一个 YAML 文件示例:

policy:
  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

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
{
  "policy": {
      "bindings": {
            "members": "user:example@example.com",
            "role": "roles/iap.httpsResourceAccessor",
        }
    }
}
EOF