借助政策分析器,您可以根据 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
权限。
政策继承
考虑到政策沿用,Policy Analyzer 会自动分析指定范围内所有相关的允许政策,无论这些政策在资源层次结构中处于什么位置。
例如,假设您正尝试查明哪些人可以访问 IAM 服务帐号:
- 如果您将查询的范围限定为某个项目,Policy Analyzer 会分析服务帐号的允许政策和该项目的允许政策。
- 如果将查询的范围限定为组织,Policy Analyzer 会分析服务帐号的允许政策、拥有该服务帐号的项目的允许政策、包含该项目的任何文件夹的允许政策,以及组织的允许政策。
条件访问
如果角色绑定具有条件,则只有在满足该条件时,它才会授予主账号访问权限。政策分析器始终会报告附加到相关角色绑定的条件。相关角色绑定是指包含您在分析查询中指定的主账号、访问权限和资源的角色绑定。
在某些情况下,政策分析器还可以分析条件,这意味着它可以报告是否满足条件。Policy Analyzer 可以分析以下类型的条件:
- 基于资源特性的条件,适用于提供资源名称的资源类型。
- 日期/时间条件(仅限 API 和 gcloud CLI)。为了让政策分析器分析这些条件,您需要在分析查询中提供访问时间 (
accessTime
)。如需了解如何提供此上下文,请参阅确定特定时间的访问权限。
如果相关角色绑定包含条件,则政策分析器会执行以下某项操作:
如果政策分析器可以分析条件,则会执行以下某项操作:
- 如果条件的评估结果为 true,则政策分析器会在查询结果中添加角色绑定,并将条件评估标记为
TRUE
。 - 如果条件的评估结果为 false,则政策分析器不会在查询结果中包含此角色。
- 如果条件的评估结果为 true,则政策分析器会在查询结果中添加角色绑定,并将条件评估标记为
如果政策分析器无法分析相关角色绑定的条件,则会将该角色添加到查询结果中,并将条件评估标记为
CONDITIONAL
。
数据新鲜度
Policy Analyzer 使用 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
权限?”启用了群组扩展功能,如果 Policy Analyzer 找到任何具有 storage.buckets.delete
权限的群组,则查询结果不仅会列出群组标识符,还会列出该群组中的所有个人成员。
通过此选项,您可以了解各个用户的访问权限,即使该访问权限是由他们群组成员资格导致的。
角色扩展
如果启用角色扩展,则查询结果不仅会列出角色本身,还会列出每个角色内的所有权限。只有当您未在查询中指定任何权限或角色时,此选项才可用。
例如,假设您针对查询“my-user@example.com
对存储桶 bucket-1
拥有什么访问权限?”启用了角色扩展,如果 Policy Analyzer 找到任何授予 my-user@example.com
对 bucket-1
访问权限的角色,则查询结果不仅会列出角色名称,还会列出该角色中包含的所有权限。
通过此选项,您可以确切了解主账号拥有哪些权限。
资源扩展
如果您为政策分析器查询启用资源扩展,则查询结果会在查询结果中列出所有父级资源(项目、文件夹和组织)的所有相关后代资源。对于 Policy Analyzer 查询,此扩展上限为每个父级资源 1,000 项资源;对于长时间运行的 Policy Analyzer 查询,上限为每个父级资源 100,000 项资源。
例如,请考虑资源扩展将如何影响以下查询:
谁拥有
project-1
的storage.buckets.delete
权限?如果为此查询启用资源扩展,则查询结果中的资源部分不仅会列出项目,还会列出项目内的所有存储分区。
my-user@example.com
对哪些资源具有compute.instances.setIamPolicy
权限?如果您为此查询启用资源扩展,并且 Policy Analyzer 发现
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 高级层级。如需了解详情,请参阅结算问题。