管理对受 IAP 保护的资源的访问权限

本页介绍如何在资源级层管理对受 Identity-Aware Proxy (IAP) 保护的资源的个人或群组访问权限。

概览

通过 IAP,您可以为 Google Cloud 项目中的各项资源和 Cloud Run 资源配置 IAP 政策。项目中的多个应用可以分别采用不同的访问权限政策。这包括使用 Compute Engine、Google Kubernetes Engine 和 App Engine 应用的项目。对于 App Engine 应用,各个版本和服务可以采用不同的访问权限政策。

要管理项目级别和更高级别的访问权限,请使用 IAM 管理页面。拥有项目级层访问权限的用户列表(即“主账号”)可以访问该项目中受 IAP 保护的所有资源。

准备工作

在开始之前,您需要做好以下准备:

  • 拥有一个要向其添加个人或群组访问权限的受 IAP 保护的资源。
  • 要为其添加访问权限的用户名或群组名。

开启和关闭 IAP

要启用和停用 IAP,您需要具有特定权限。下表显示了每种应用类型所需的权限。

应用类型 所需权限
App Engine appengine.applications.update
Compute Engine、Google Kubernetes Engine 或 Cloud Run compute.backendServices.update

这些权限由 Project Editor、App Engine Admin 和 Compute Network Admin 等角色授予。虽然这些角色允许开启和关闭 IAP,但它们没有修改访问权限政策所需的权限。

此外,使用 Google Cloud 控制台开启 IAP 可能还需要 clientauthconfig.clients.createclientauthconfig.clients.getWithSecret 权限。这些权限由 Project Editor 等角色授予。

要详细了解如何授予角色,请参阅授予、更改和撤消访问权限

在 Google Cloud 控制台中管理访问权限

如需使用 Google Cloud 控制台控制对受 IAP 保护的资源的访问权限,请按照以下流程添加或移除访问权限。

添加访问权限

  1. 转到 Identity-Aware Proxy 页面
    转到 Identity-Aware Proxy 页面

  2. 选择要用 IAP 保护的资源。选择以下资源后,系统将会为一组相关资源提供安全保护:

    • 所有网络服务:项目中的所有资源都将受到保护。请注意,这与使用 IAM 管理页面授予项目级层访问权限不同。被授予所有 Web 服务资源级层的 IAP Policy Admin 角色的用户将仅具有针对 IAP 政策的权限。

    • 后端服务:所有后端服务都将受到保护。

  3. 在右侧的信息面板上,添加要为其授予某一资源 Identity and Access Management (IAM) 角色的群组或个人的电子邮件地址。

  4. 选择角色下拉列表中选择以下一种角色,以对主账号应用访问权限政策角色:

    • Owner:授予与 IAP Policy Admin 相同的访问权限。请改用 IAP Policy Admin 角色。此角色仅允许修改政策,而不允许访问应用。

    • IAP Policy Admin:授予 IAP 政策的管理员权限。

    • IAP-Secured Web App User:授予使用 IAP 的应用和其他 HTTPS 资源的访问权限。

    • Security Reviewer:授予查看和审核 IAP 政策的权限。

  5. 完成添加电子邮件地址并设置角色,点击添加

移除访问权限

  1. 转到 Identity-Aware Proxy 页面
    转到 Identity-Aware Proxy 页面
  2. 选择受 IAP 保护的资源。
  3. 在右侧的信息面板上,选择与要移除的主账号角色对应的部分。
  4. 在展开的部分中,点击要移除其角色的各用户或群组名称旁的移除
  5. 在显示的移除主账号对话框中,点击移除

使用 API 管理访问权限

IAM 为在 Google Cloud 资源上创建和管理访问权限控制政策提供了一组标准方法。

资源和权限

利用 Cloud IAP API,您可以对受 IAP 保护的项目中的各个资源应用 IAM 权限。在特定级别授予的 IAM 权限适用于其下的所有级别。例如,在项目级层授予的权限适用于项目中的所有 Google Cloud 资源。项目级别和更高级别的访问权限在 IAM 管理页面中进行管理,但将显示在 IAP 管理页面中。

用户需要具备特定权限才能访问受 IAP 保护的应用。如需授予这些权限,管理员可以使用 API 更新 IAM 政策。iap.webServiceVersions.accessViaIAP 权限会授予用户对应用的访问权限。如果您使用 IAP 控制对 SSH 和 RDP 等管理服务的访问权限,则用户将需要 iap.tunnelInstances.accessViaIAP 权限。

每个 Cloud IAP 资源都有专属的 getIamPolicysetIamPolicy 权限,这些权限允许管理该资源及其子资源的访问权限政策。

要调用 IAM API,请使用指向资源的网址路径构建一个调用。以下调用示例演示了如何获取 App Engine 应用服务版本的 IAM 政策。

https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web/
appengine-APP_ID/services/SERVICE_ID/versions/VERSION_ID:getIamPolicy

下表列出了支持的资源类型,以及调用 IAM API 所需的权限。

资源类型 权限
项目中每个受 IAP 保护的 Web 应用
这与 IAP 管理页面上的所有 Web 服务复选框相同。

路径
https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web
iap.web.getIamPolicy

iap.web.setIamPolicy
项目中的每个后端服务
这与 IAP 管理页面上的后端服务复选框相同。

路径
全局范围:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute

区域范围:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
项目中的每个转发规则
对项目中所有转发规则的权限。

路径
全局范围:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule

区域范围:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
App Engine 应用
这与 IAP 管理页面上的 App Engine 应用复选框相同。

路径
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
Compute Engine 后端服务
后端服务路径可以指定后端服务 ID 或后端服务名称。

路径
全局范围:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute/services/
BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME

区域范围:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME/
services/BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
Compute Engine 转发规则
转发规则的权限。转发规则路径可以指定转发规则 ID 或转发规则名称。

路径
全局范围:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule/services/
FORWARDING_RULE_ID or FORWARDING_RULE_NAME

区域范围:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule-REGION_NAME/
services/FORWARDING_RULE_ID or FORWARDING_RULE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
App Engine 应用服务

路径
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
An App Engine service version
Compute Engine doesn't support versioning.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID/versions/VERSION_ID
iap.webServiceVersions.getIamPolicy

iap.webServiceVersions.setIamPolicy
项目中的每个受 IAP 保护的虚拟机实例
这与 IAP 管理页面上的所有隧道资源复选框相同。

路径
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel
iap.tunnel.getIamPolicy

iap.tunnel.setIamPolicy
至少包含一个虚拟机实例的可用区
这与 IAP 管理页面上的可用区名称复选框相同,例如 us-central1-c

路径
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
iap.tunnelZones.getIamPolicy

iap.tunnelZones.setIamPolicy
单个虚拟机实例

路径
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
/instances/INSTANCE_ID or INSTANCE_NAME
iap.tunnelInstances.getIamPolicy

iap.tunnelInstances.setIamPolicy
包含至少一个目标组的区域,例如 us-central1

路径
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
iap.tunnelLocations.getIamPolicy

iap.tunnelLocations.setIamPolicy
单个目标组

路径
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
/destGroups/GROUP_NAME
iap.tunnelDestGroups.getIamPolicy

iap.tunnelDestGroups.setIamPolicy

角色

下表列出了 IAP IAM 角色以及每个角色包含的所有 IAP 专属权限的列表。如需详细了解 IAM 角色,请参阅管理角色和权限

角色 具备的权限 说明
IAP-Secured Web App User (roles/iap.httpsResourceAccessor) iap.webServiceVersions.accessViaIAP 授予对 App Engine 和 Compute Engine 资源的访问权限。
IAP-Secured Tunnel User (roles/iap.tunnelResourceAccessor) iap.tunnelInstances.accessViaIAP
iap.tunnelDestGroups.accessViaIAP
授予对通过 IAP 保护的虚拟机实例的访问权限。
IAP Policy Admin (roles/iap.admin) iap.web.getIamPolicy
iap.web.setIamPolicy
iap.webTypes.getIamPolicy
iap.webTypes.setIamPolicy
iap.webServices.getIamPolicy
iap.webServices.setIamPolicy
iap.webServiceVersions.getIamPolicy
iap.webServiceVersions.setIamPolicy
iap.tunnel.getIamPolicy
iap.tunnel.setIamPolicy
iap.tunnelZones.getIamPolicy
iap.tunnelZones.setIamPolicy
iap.tunnelInstances.getIamPolicy
iap.tunnelInstances.setIamPolicy
授予用于管理资源的 IAP 访问权限政策的 IAP 管理权限。

使用 Google Cloud CLI 管理访问权限

拒绝访问

通过 Identity and Access Management (IAM) 拒绝政策,您可以设置关于访问 Google Cloud 资源的安全措施。如需查看拒绝政策适用的场景列表,请参阅用例

您可以创建拒绝政策,并在这些政策中添加所有 IAP 权限。如需查看您可以添加到拒绝政策中的 IAP 权限列表,请参阅拒绝政策中支持的权限并搜索 iap.googleapis.com。虽然拒绝政策可应用于任何 IAP 权限,但其有效性取决于拒绝政策的附加点

某些 IAP 权限仅在其特定资源级别有效,而不适用于其后代。例如,iap.organizations.getSettings 会在组织级别授予对 getSettings 的访问权限,但不会授予对组织的后代访问权限。这意味着,管理员在制定拒绝政策时必须明确列出所有相关的精细权限,才能拒绝对附加点及其子项的访问。

如需查看此类精细权限的完整列表,请参阅拒绝政策中支持的权限。FQDN iap.googleapis.com 以及资源类型 iap.organizationsiap.foldersiap.projectsiap.webiap.webTypesiap.webServicesiap.webServicesVersions 下的所有权限都是精细权限。

以下是一个 IAM 拒绝政策示例,用于拒绝向组织及其子账号的主账号授予对 getSettings API 的访问权限。

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/iap.organizations.getSettings",
          "iap.googleapis.com/iap.folders.getSettings",
          "iap.googleapis.com/iap.projects.getSettings",
          "iap.googleapis.com/iap.web.getSettings",
          "iap.googleapis.com/iap.webTypes.getSettings",
          "iap.googleapis.com/iap.webServices.getSettings",
          "iap.googleapis.com/iap.webServicesVersions.getSettings",
        ],
      }
    }
  ]
}

以下 IAM 拒绝政策示例仅包含一项权限(*.getSettings),而不是指定所有精细权限。

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/*.getSettings",
        ],
      }
    }
  ]
}

以下是一些更简单的方法,可让您创建 IAM 拒绝政策,而无需指定所有精细权限。

管理员操作 拒绝政策中的权限
针对所有 IAP 资源类型拒绝特定 IAP 权限 *.updateSettings
*.getSettings
*.setIamPolicy
*.getIamPolicy
针对特定资源类型拒绝所有 IAP 权限 iap.organizations.*
iap.folders.*
iap.projects.*
iap.web.*
iap.webTypes.*
iap.webServices.*
iap.webServicesVersions.*

公开访问

如需向所有人授予对资源的访问权限,请向以下某个主账号授予角色:

  • allAuthenticatedUsers:使用 Google 账号或服务账号进行身份验证的任何用户。
  • allUsers:互联网上的任何人,包括经过身份验证和未经身份验证的用户。请求的签名标头不会包含 subemail 声明

如果授予公开访问权限,则 IAP 将不会为该请求生成 Cloud Audit Logs 日志

目前,授予公开访问权限的绑定不能具有与之关联的条件。 例如,如果请求路径以 /public/ 开头,则允许任何人访问资源的这一政策无效。