本页介绍如何在资源级层管理对受 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.create
和 clientauthconfig.clients.getWithSecret
权限。这些权限由 Project Editor 等角色授予。
要详细了解如何授予角色,请参阅授予、更改和撤消访问权限。
在 Google Cloud 控制台中管理访问权限
如需使用 Google Cloud 控制台控制对受 IAP 保护的资源的访问权限,请按照以下流程添加或移除访问权限。
添加访问权限
选择要用 IAP 保护的资源。选择以下资源后,系统将会为一组相关资源提供安全保护:
所有网络服务:项目中的所有资源都将受到保护。请注意,这与使用 IAM 管理页面授予项目级层访问权限不同。被授予所有 Web 服务资源级层的 IAP Policy Admin 角色的用户将仅具有针对 IAP 政策的权限。
后端服务:所有后端服务都将受到保护。
在右侧的信息面板上,添加要为其授予某一资源 Identity and Access Management (IAM) 角色的群组或个人的电子邮件地址。
从选择角色下拉列表中选择以下一种角色,以对主账号应用访问权限政策角色:
Owner:授予与 IAP Policy Admin 相同的访问权限。请改用 IAP Policy Admin 角色。此角色仅允许修改政策,而不允许访问应用。
IAP Policy Admin:授予 IAP 政策的管理员权限。
IAP-Secured Web App User:授予使用 IAP 的应用和其他 HTTPS 资源的访问权限。
Security Reviewer:授予查看和审核 IAP 政策的权限。
完成添加电子邮件地址并设置角色,点击添加
移除访问权限
- 转到 Identity-Aware Proxy 页面。
转到 Identity-Aware Proxy 页面 - 选择受 IAP 保护的资源。
- 在右侧的信息面板上,选择与要移除的主账号角色对应的部分。
- 在展开的部分中,点击要移除其角色的各用户或群组名称旁的移除。
- 在显示的移除主账号对话框中,点击移除。
使用 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 资源都有专属的 getIamPolicy
和 setIamPolicy
权限,这些权限允许管理该资源及其子资源的访问权限政策。
要调用 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/ 区域范围: https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicy iap.webTypes.setIamPolicy |
项目中的每个转发规则 项目中所有转发规则的权限。 路径 全局范围: https://iap.googleapis.com/v1/projects/ 区域范围: https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicy iap.webTypes.setIamPolicy |
App Engine 应用 这等效于选中 IAP 管理页面上的 App Engine 应用复选框。 路径 https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicy iap.webTypes.setIamPolicy |
Compute Engine 后端服务 后端服务路径可以指定后端服务 ID 或后端服务名称。 路径 全局范围: https://iap.googleapis.com/v1/projects/ 区域范围: https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicy iap.webServices.setIamPolicy |
Compute Engine 转发规则 转发规则的权限。转发规则路径可以指定转发规则 ID 或转发规则名称。 路径 全局范围: https://iap.googleapis.com/v1/projects/ 区域范围: https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicy iap.webServices.setIamPolicy |
App Engine 应用服务 路径 https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicy iap.webServices.setIamPolicy |
An App Engine service version Compute Engine doesn't support versioning. Path https://iap.googleapis.com/v1/projects/ |
iap.webServiceVersions.getIamPolicy iap.webServiceVersions.setIamPolicy |
项目中的每个 IAP 保护的虚拟机实例 这与 IAP 管理页面上的所有隧道资源复选框相同。 路径 https://iap.googleapis.com/v1/projects/ |
iap.tunnel.getIamPolicy iap.tunnel.setIamPolicy |
至少具有一个虚拟机实例的可用区 这等同于 IAP 管理页面上的可用区名称复选框,例如 us-central1-c 。路径 https://iap.googleapis.com/v1/projects/ |
iap.tunnelZones.getIamPolicy iap.tunnelZones.setIamPolicy |
单个虚拟机实例 路径 https://iap.googleapis.com/v1/projects/ |
iap.tunnelInstances.getIamPolicy iap.tunnelInstances.setIamPolicy |
包含至少一个目标组的区域,例如 us-central1 路径 https://iap.googleapis.com/v1/projects/ |
iap.tunnelLocations.getIamPolicy iap.tunnelLocations.setIamPolicy |
单个目标组 路径 https://iap.googleapis.com/v1/projects/ |
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.organizations
、iap.folders
、iap.projects
、iap.web
、iap.webTypes
、iap.webServices
、iap.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
:互联网上的任何人,包括经过身份验证和未经身份验证的用户。请求的签名标头不会包含sub
或email
声明。
如果授予公开访问权限,则 IAP 将不会为该请求生成 Cloud Audit Logs 日志。
目前,授予公开访问权限的绑定不能具有与之关联的条件。
例如,如果请求路径以 /public/
开头,则允许任何人访问资源的这一政策无效。