使用 Policy Troubleshooter,您可以更轻松地了解用户有权访问某项资源或无权调用 API 的原因。给定电子邮件、资源和权限后、政策问题排查工具将能够检查适用于该资源的所有 Identity and Access Management (IAM) 政策。然后,它会显示该主帐号的角色是否包含该资源的权限,如果是,则显示该主帐号通过哪些政策绑定到这些角色。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 REST API 访问 Policy Troubleshooter。对于简单查询,使用 Google Cloud 控制台通常是最快的。对于更复杂的场景,请考虑使用 gcloud CLI 或 REST API。
如有任何可能会影响主帐号访问权限的拒绝政策,Google Cloud 控制台也会提醒您。gcloud CLI 和 REST API 不提供拒绝政策的相关信息。
准备工作
-
启用 Policy Troubleshooter API。
所需权限
如需对主帐号的访问权限进行全面问题排查,您需要以下权限。
为个别主帐号排查访问权限问题
Policy Troubleshooter 会根据您有权查看的 IAM 政策和角色来分析主帐号对资源的访问权限。如果您无权查看应用于资源的政策,或者无权查看自定义角色,则您可能无法判断主帐号是否具有访问权限。
如需获取排查主帐号访问权限问题所需的权限,请让管理员授予您组织的安全审核者 (roles/iam.securityReviewer
) IAM 角色。
如需详细了解如何授予角色,请参阅管理访问权限。
此预定义角色包含排查主帐号访问权限问题所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
-
iam.roles.get
-
iam.roles.list
-
resourcemanager.folders.getIamPolicy
-
resourcemanager.organizations.getIamPolicy
-
resourcemanager.projects.getIamPolicy
排查群组成员访问权限问题的权限
如果您的 IAM 政策包含群组,您需要具备 Google Workspace Admin API 权限 groups.read
,为各个群组成员排查访问权限问题。超级用户和群组管理员会自动获得此权限。如需向非超级用户或群组管理员授予此权限,请创建自定义 Google Workspace 管理员角色(该角色包含 Admin API 权限下的 groups.read
权限),并将该角色授予此用户。
如果您没有这些权限,则包含群组或网域的角色绑定的访问权限结果为 Unknown,除非角色绑定明确包含主帐号。
排查网域成员访问权限方面的问题
如果您的 IAM 政策包含网域,则您必须是网域管理员,才能排查各个网域成员的访问权限。
如果您没有这些权限,则包含群组或网域的角色绑定的访问权限结果为 Unknown,除非角色绑定明确包含主帐号。
排查访问权限问题
如需排查访问权限问题,您需要以下信息:
- 主帐号:要检查的电子邮件地址。电子邮件地址必须引用用户或服务帐号。不支持其他类型的主帐号。
- 资源:资源的完整名称。例如,如需检查项目
my-project
,请输入//cloudresourcemanager.googleapis.com/projects/my-project
。对于其他类型的资源,请参阅完整资源名称示例。 权限:要检查的权限。如果您使用 Google Cloud 控制台,它会在您输入时显示一系列建议。有关权限的完整列表,请查看权限参考。
控制台
排查访问权限问题
如要排查访问权限问题,请执行以下操作:
在 Google Cloud 控制台中,转到政策问题排查工具页面。
输入您要检查其访问权限的主帐号的电子邮件地址。
输入要检查的资源名称和权限。如果您不知道完整的资源名称或权限名称,请开始输入以查看自动补全选项。
可选:要检查多项资源和权限,请选择添加其他权限对,并重复上一步骤。
点击检查访问权限。
了解政策问题排查工具结果
对于每个资源和权限对,Policy Troubleshooter 都会提供一个结果页面,用于说明主帐号的访问权限。
结果页面包含以下信息:
评估详情:您正在排查问题的访问权限的摘要,包括指定的主帐号、资源和权限。如果要排查多个资源-权限对的问题,可以使用访问评估列表进行切换。
拒绝政策声明:如果拒绝政策可能影响您要排查的访问权限,Policy Troubleshooter 会显示一条通知。
该通知会在以下情况下显示:
如果您没有看到此通知,说明没有任何拒绝政策会影响主帐号访问权限。
IAM 允许政策详情:根据相关 IAM 允许政策简要说明主帐号的访问权限。这些政策包括指定资源的允许政策以及该资源的所有祖先实体的允许政策。由于政策继承,如果主帐号对其中任何资源具有权限,则它们对您在问题排查查询中指定的资源拥有权限。
此信息可让您了解主帐号是否拥有资源的权限。
资源:指定资源及其祖先的列表。每个资源旁边都有一个评估结果,说明该资源的允许政策是否向主帐号授予了指定权限。此评估仅适用于该资源的允许政策,并不代表来自继承的政策的任何访问权限。
如果您无权查看祖先实体的允许政策,则资源列表不包含该祖先实体。
要查看资源允许政策中的相关角色绑定并了解它们如何向主帐号授予权限,请点击资源。允许政策的绑定会显示在角色绑定窗格中。
角色绑定:所选资源的允许政策中的角色绑定列表。默认情况下,该列表仅显示包含具有指定权限的角色的角色绑定。如果主帐号没有访问权限,则列表还会显示具有可修改自定义角色的角色绑定。如需查看所有角色绑定,请取消选中仅显示相关绑定复选框。
访问权限列指示角色绑定是否授予主帐号权限。此列可以具有以下任意值:
- 已授予:角色绑定同时包含主帐号和拥有权限的角色。
- 未授予:角色绑定不包含主帐号,或者绑定中的角色不包含权限。
- 条件:角色绑定包含主帐号和拥有权限的角色。但是,它还包含一个条件,并且仅当满足该条件时,主帐号才具有访问权限。
- 未知:角色绑定要么包含您无权查看的角色,要么包含您无权检查其成员的群组。
如需详细了解角色绑定,请点击查看绑定详情。此操作会打开绑定详情窗格。此窗格的详细信息标签页会显示有关角色绑定中的角色、主帐号和条件的信息。如果角色绑定无法向主帐号授予访问权限,则此窗格还会介绍您可以采取哪些方式向主帐号授予访问权限。
JSON 标签页会显示角色绑定的原始文本。如需详细了解角色绑定的结构,请参阅了解政策。
gcloud
首先,确保您的环境设置为使用 Policy Troubleshooter。
启用 Policy Troubleshooter API:
gcloud services enable policytroubleshooter.googleapis.com --project=project-id
然后,设置您的项目:
gcloud config set project project-id
完成设置后,您可以使用 Policy Troubleshooter 检查用户是否有资源权限。运行以下命令:
gcloud policy-troubleshoot iam resource --principal-email=email \
--permission=permission
例如,以下命令可检查 foo@example.com
是否有项目 my-
project
上的 resourcemanager.projects.getIamPolicy
权限。
gcloud policy-troubleshoot iam //cloudresourcemanager.googleapis.com/projects/my-project \
--permission=resourcemanager.projects.getIamPolicy --principal-email=foo@example.com
输出是 YAML,它指示用户是否具有权限以及相关原因。输出应如下所示:
access: GRANTED
explainedPolicies:
- access: GRANTED
bindingExplanations:
- access: NOT_GRANTED
memberships:
serviceAccount:service-123@compute-system.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
role: roles/compute.serviceAgent
rolePermission: ROLE_PERMISSION_NOT_INCLUDED
- access: GRANTED
memberships:
serviceAccount:service@my-project.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
user:foo@example.com: MEMBERSHIP_INCLUDED
role: roles/owner
rolePermission: ROLE_PERMISSION_INCLUDED
fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
policy:
bindings:
- members:
- serviceAccount:service-123@compute-system.iam.gserviceaccount.com
role: roles/compute.serviceAgent
- members:
- serviceAccount:foo@my-project.iam.gserviceaccount.com
- user:foo@example.com
role: roles/owner
etag: BwWAOWEaIEg=
version: 1
- access: UNKNOWN_INFO_DENIED
policy: {}
REST API
如需查找主帐号拥有或没有 IAM 权限的原因,请使用 Policy Troubleshooter API 的 iam.troubleshoot
方法。
在使用任何请求数据之前,请先进行以下替换:
EMAIL
:您要排查其权限问题的主帐号的电子邮件地址。RESOURCE
:向其授予权限的资源。PERMISSION
:您要排查其问题的权限。PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。
HTTP 方法和网址:
POST https://policytroubleshooter.googleapis.com/v1/iam:troubleshoot
请求 JSON 正文:
{ "accessTuple": { "principal": "EMAIL", "fullResourceName": "RESOURCE", "permission": "PERMISSION" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "access": "GRANTED", "explainedPolicies": [ { "access": "GRANTED", "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "policy": { "version": 1, "etag": "BwWBUZjK9YQ=", "bindings": [ { "role": "roles/owner", "members": [ "user:foo@example.com" ] } ] }, "bindingExplanations": [ { "access": "GRANTED", "role": "roles/owner", "rolePermission": "ROLE_PERMISSION_INCLUDED", "rolePermissionRelevance": "HIGH", "memberships": { "key": "user:foo@example.com", "value": { "membership": "MEMBERSHIP_INCLUDED", "relevance": "HIGH", } }, "relevance: HIGH", } ] }, { "access": "UNKNOWN_INFO_DENIED", "policy": {} } ] }
排查条件角色绑定问题
为了排查条件角色绑定问题,政策问题排查工具需要有关请求的其他背景信息。比方说,为了根据日期/时间属性排查条件,政策问题排查工具需要请求的时间。
如需提供此额外的上下文,您可以直接通过任何管理员活动审核日志或数据访问审核日志进行问题排查。每个审核日志条目都对应于向 Google Cloud API 发出的请求或 Google Cloud 代表您执行的操作。通过审核日志排查问题时,Policy Troubleshooter 会自动获取有关请求的其他信息(例如请求的日期和时间),以便 Policy Troubleshooter 分析条件角色绑定。
此功能仅在 Google Cloud 控制台中提供。
如需排查条件角色绑定问题,请执行以下操作:
在 Google Cloud 控制台中,转到日志浏览器页面。
如果页面标题为旧式日志查看器,请点击升级下拉列表,然后选择升级新的日志浏览器。
如需仅查看管理员活动和数据访问审核日志,请在查询构建器中输入以下查询,然后点击运行查询:
logName=("RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" OR "RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
替换以下值:
RESOURCE_TYPE
:要为其列出审核日志的资源类型。请使用projects
、folders
或organizations
。RESOURCE_ID
:您的资源的 ID。
找到对应于您要排查问题的请求的审核日志条目。如需了解如何使用日志浏览器查找特定日志条目,请参阅使用日志浏览器。
在日志条目的摘要列中,点击 IAM,然后点击排查访问权限问题。
Policy Troubleshooter 使用日志条目中的信息来排查访问权限问题,然后向您展示结果。附加上下文列在条件上下文下的评估详情中。如需查看上下文详情,请点击查看条件上下文。如需详细了解 Policy Troubleshooter 结果页面,请参阅本页面中的排查访问权限问题。
可选:如需排查涉及条件角色绑定的其他请求的问题,请返回日志浏览器页面并重复以上步骤。
后续步骤
- 使用权限参考文档或预定义角色参考文档确定向缺少权限的用户授予哪个角色。
- 了解其他 Policy Intelligence 工具,这些工具可帮助您了解和管理政策,以主动改进安全配置。