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

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

如需将授权委托给 IAP 和 Identity and Access Management (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
    
  2. 运行以下命令,在转发规则上启用 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

  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: 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 或名称。