本页面介绍了如何使用授权政策将 Identity-Aware Proxy (IAP) 指定为应用负载均衡器授权政策中的自定义授权引擎。
如需将授权委托给 IAP 和 Identity and Access Management (IAM),您需要根据 IAM 或代管式负载均衡器的最终用户身份,向转发规则授权流量。这样,您就可以为后端服务强制执行基于 IAP 的访问权限控制。
准备工作
了解授权政策概念。
确保转发规则的后端服务未启用 IAP。如果启用了 IAP,您在提交配置时会收到错误。
创建授权政策并启用 IAP
如需创建授权政策,您需要创建一个定义目标和规则的政策文件,然后在转发规则上启用 IAP。您可以通过在政策文件的 httpRules 部分中定义条件,选择仅将 IAP 应用于特定请求。如果省略 httpRules 部分,则系统会对所有请求强制执行 IAP。
gcloud
运行以下命令以准备
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运行以下命令,在转发规则上启用 IAP。
gcloud 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
运行以下命令,准备
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运行以下命令,在转发规则上启用 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: Google Cloud 项目 ID。
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: Google Cloud 项目 ID。
RESOURCE_TYPE:IAP 资源类型。资源类型必须是
app-engine、iap_web、compute、organization或folder。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 或名称。