借助政策分析器,您可以根据 IAM 允许政策了解哪些主帐号(例如用户、服务帐号、群组和网域)对哪些 Google Cloud 资源拥有哪些访问权限。
政策分析器可帮助您回答如下问题:
- 谁可以访问此 IAM 服务帐号?
- 谁可以读取此 BigQuery 数据集中包含个人身份信息 (PII) 的数据?
dev-testers
群组对此项目中的任何资源具有哪些角色和权限?- Tal 可以删除项目 A 中的哪些 Compute Engine 虚拟机 (VM) 实例?
- 谁可以在晚上 7 点访问此 Cloud Storage 存储桶?
政策分析器的工作原理
如需使用政策分析器,您需要创建分析查询,指定分析范围,然后运行查询。
分析查询
如需使用政策分析器,您需要创建一个分析查询,指定以下一个或多个字段:
- 主账号:要检查其访问权限的身份(例如用户、服务帐号、群组和网域)
- 访问权限:要检查的权限和角色
- 资源:要检查是否有权访问的资源
- (仅限 API)条件上下文:您要在哪个上下文中检查访问权限,例如一天中的时段
通常,您可以在分析查询中指定其中一个或两个字段,然后使用查询结果获取有关未指定字段的更多信息。例如,如果您想知道谁对特定资源拥有特定权限,您可以在分析查询中指定访问权限和资源,但不能指定主账号。
如需查看您可以创建的查询类型的更多示例,请参阅常见查询类型。
分析范围
如需运行分析查询,您需要指定要分析的范围。范围是您要将分析范围限定到的组织、文件夹或项目。系统只会分析附加到用作范围的资源及其后代资源的 IAM 允许政策。
在 REST API 和 gcloud CLI 中,您可以手动指定范围。在 Google Cloud 控制台中,范围是根据您目前管理的项目、文件夹或组织自动确定的。
创建分析查询并指定范围后,即可运行查询来分析该范围内的政策。
查询结果
运行分析查询时,政策分析器会报告包含您在查询中指定的主帐号、访问权限和资源的所有角色绑定。对于每个角色绑定,它会报告绑定中的主账号、绑定授予的访问权限(角色和权限),以及绑定授予访问权限的资源。
您可以查看这些结果,以更好地了解对项目、文件夹或组织的访问权限。例如,如果您运行了查询来找出哪些主帐号有权访问特定资源,则可以在查询结果中查看这些主帐号。
您可以通过启用查询选项来调整查询结果中的信息。
支持的政策类型
IAM 政策分析器仅支持 IAM 允许政策。
政策分析器不支持以下形式的访问权限控制:
政策分析器查询结果未考虑不受支持的政策类型。例如,假设由于一项允许政策,某用户拥有某个项目的 iam.roles.get
权限,但一项拒绝政策阻止该用户使用该权限。尽管采用了拒绝政策,政策分析器仍会报告它们具有 iam.roles.get
权限。
政策继承
考虑到政策继承情况,政策分析器会自动分析指定范围内所有相关的允许政策,无论这些政策位于资源层次结构中的哪个位置。
例如,假设您正在尝试找出可以访问 IAM 服务帐号的人员:
- 如果将查询的范围限定为某个项目,则政策分析器会分析服务帐号的允许政策和该项目的允许政策。
- 如果您将查询范围限定到某个组织,政策分析器会分析服务帐号的允许政策、拥有该服务帐号的项目的允许政策、包含该项目的任何文件夹的允许政策,以及组织的允许政策。
条件访问
如果角色绑定具有条件,则仅在满足该条件时才会授予主帐号访问权限。政策分析器始终会报告附加到相关角色绑定的条件。相关角色绑定是包含您在分析查询中指定的主帐号、访问权限和资源的角色绑定。
在某些情况下,政策分析器还可以分析条件,这意味着它可以报告是否满足条件。政策分析器可以分析以下类型的条件:
- 基于资源特性的条件,适用于提供资源名称的资源类型。
- 日期/时间条件(仅限 API 和 gcloud CLI)。为使政策分析器分析这些条件,您需要在分析查询中提供访问时间 (
accessTime
)。如需了解如何提供此上下文,请参阅确定特定时间的访问权限。
如果相关角色绑定包含条件,政策分析器会执行以下操作之一:
如果政策分析器可以分析条件,则会执行以下操作之一:
- 如果条件评估结果为 true,则政策分析器会在查询结果中包含角色绑定,并将条件评估标记为
TRUE
。 - 如果条件评估结果为 false,则政策分析器不会在查询结果中包含该角色。
- 如果条件评估结果为 true,则政策分析器会在查询结果中包含角色绑定,并将条件评估标记为
如果政策分析器无法分析相关角色绑定的条件,则会在查询结果中包含该角色,并将条件评估标记为
CONDITIONAL
。
数据新鲜度
政策分析器使用 Cloud Asset API,它可以最大程度地提供数据新鲜度。虽然几乎所有政策更新都会在几分钟内显示在政策分析器中,但政策分析器可能不包含最新的政策更新。
常见查询类型
本部分介绍如何使用分析查询来回答与访问权限相关的常见问题。
哪些主账号可以访问此资源?
如需确定哪些主帐号可以访问资源,请创建分析查询,指定该资源以及(可选)您要检查的角色和权限。
这些查询可帮助您回答如下问题:
- 谁有权访问此 IAM 服务帐号?
- 谁有权模拟此 IAM 服务帐号?
- 项目 A 的结算管理员是谁?
- (仅限 API 和 gcloud CLI):谁可以通过模拟服务帐号来更新项目 A?
如需了解如何创建和发送这些查询,请参阅确定哪些主帐号可以访问资源。
哪些主账号拥有这些角色和权限?
如需确定哪些主帐号具有特定角色和权限,请创建一个分析查询,指定主帐号以及您要检查的一组角色和权限。
这些查询可帮助您回答如下问题:
- 谁有权模拟我组织中的服务账号?
- 谁是我所在组织的结算管理员?
- 谁可以读取此 BigQuery 数据集内包含个人身份信息 (PII) 的数据?
- (仅限 API 和 gcloud CLI):我的组织中的哪些人可以通过模拟服务帐号来读取 BigQuery 数据集?
如需了解如何创建和发送这些查询,请参阅确定哪些主帐号具有特定角色或权限。
此主账号对此资源拥有哪些角色和权限?
如需确定主帐号对特定资源拥有哪些角色和权限,请创建一个分析查询,指定您要检查其权限的主帐号和资源。
这些查询可帮助您回答如下问题:
- 用户 Sasha 对此 BigQuery 数据集拥有哪些角色和权限?
dev-testers
群组对此项目中的任何资源具有哪些角色和权限?- (仅限 API 和 gcloud CLI):如果 Dana 模拟服务帐号,用户 Dana 对此 BigQuery 数据集具有哪些角色和权限?
如需了解如何创建和发送这些查询,请参阅确定主帐号对资源具有何种访问权限。
此主账号可以访问哪些资源?
如需确定特定主账号可以访问的资源,请创建一个分析查询,指定主账号以及您要检查的角色和权限。
这些查询可帮助您回答如下问题:
- 用户 Mahan 有权读取哪些 BigQuery 数据集?
dev-testers
群组是哪些 BigQuery 数据集的数据所有者?- Tal 可以删除项目 A 中的哪些虚拟机?
- (仅限 API 和 gcloud CLI):用户 John 可以通过模拟服务帐号删除哪些虚拟机?
如需了解如何创建和发送这些查询,请参阅确定主帐号可以访问的资源。
已保存的分析查询
如果您使用的是 REST API,则可以保存分析查询,以便重复使用或与他人共享。您可以像运行任何其他查询一样运行已保存的查询。
如需详细了解如何保存查询,请参阅管理已保存的查询。
导出查询结果
您可以使用 analyzeIamPolicyLongrunning
异步运行查询并将查询结果导出到 BigQuery 或 Cloud Storage。
如需了解如何将查询结果导出到 BigQuery,请参阅将政策分析写入 BigQuery。
如需了解如何将查询结果导出到 Cloud Storage,请参阅向 Cloud Storage 写入政策分析。
查询选项
政策分析器提供了多种选项,可用于为查询结果添加更多详细信息。
如需了解如何启用这些选项,请参阅启用选项。
群组扩展
如果启用群组扩展,查询结果中的所有群组都将扩展为单个成员。扩展后,每个群组的成员数量上限为 1,000 名。如果您有足够的群组权限,嵌套的群组也会展开。只有当您未在查询中指定主账号时,此选项才有效。
例如,假设您为查询“谁拥有 project-1
的 storage.buckets.delete
权限?”这一查询启用群组扩展,如果政策分析器找到任何具有 storage.buckets.delete
权限的群组,查询结果不仅会列出群组标识符,还会列出该群组中的所有个人成员。
通过此选项,您可以了解各个用户的访问权限,即使该访问权限是因他们属于某个群组而导致的。
角色扩展
如果启用角色扩展,则查询结果不仅会列出每个角色本身的所有权限,只有当您未在查询中指定任何权限或角色时,才能使用此选项。
例如,假设您为查询“my-user@example.com
对存储桶 bucket-1
拥有哪些访问权限?”这一查询启用了角色扩展,如果政策分析器找到任何角色,让 my-user@example.com
能够访问 bucket-1
,那么查询结果不仅会列出角色名称,还会列出该角色中包含的所有权限。
通过此选项,您可以确切了解您的主账号拥有哪些权限。
资源扩展
如果您为 Policy Analyzer 查询启用资源扩展,查询结果中会列出所有父级资源(项目、文件夹和组织)的所有相关后代资源。对于 Policy Analyzer 查询,此扩展上限为每个父级资源 1000 个资源;对于长时间运行的 Policy Analyzer 查询,每个父级资源最多可以有 100000 个资源。
例如,请考虑资源扩展会对以下查询产生怎样的影响:
谁对“
project-1
”拥有storage.buckets.delete
权限?如果您为此查询启用资源扩展,则查询结果的资源部分不仅会列出项目,还会列出项目中的所有存储分区。
my-user@example.com
对哪些资源拥有compute.instances.setIamPolicy
权限?如果为此查询启用资源扩展,并且政策分析器发现
my-user@example.com
具有包含该权限的项目级层角色,则查询结果的资源部分不仅会列出项目,还会列出项目中的所有 Compute Engine 实例。
通过此选项,您可以详细了解主帐号可以访问的资源。
服务账号模拟
如果您使用的是 REST API 或 gcloud CLI,则可以启用服务帐号模拟分析。
如果启用此选项,则政策分析器会运行其他分析查询,以确定谁可以模拟对指定资源拥有指定访问权限的服务帐号。Policy Analyzer 会为查询结果中的每个服务帐号运行一个查询。这些查询会分析谁对服务帐号拥有以下任何权限:
iam.serviceAccounts.actAs
iam.serviceAccounts.getAccessToken
iam.serviceAccounts.getOpenIdToken
iam.serviceAccounts.implicitDelegation
iam.serviceAccounts.signBlob
iam.serviceAccounts.signJwt
配额和限制
Cloud Asset Inventory 根据使用方项目强制实施传入请求(包括政策分析请求)的速率。Cloud Asset Inventory 还限制了资源层次结构内的群组成员资格以及资源层次结构中的资源扩展。
如需查看 Policy Analyzer 的默认配额和限制,请参阅 Cloud Asset Inventory 文档中的配额和限制。
价格
每个组织每天最多可以免费执行 20 次分析查询。此限制涵盖允许政策分析和组织政策分析。
如果您想每天执行 20 个以上的分析查询,则必须在组织级别激活 Security Command Center 的高级层级。如需了解详情,请参阅结算问题。
后续步骤
- 了解如何使用政策分析器来分析允许政策。
- 了解如何使用 REST API 保存 Policy Analysis 查询。