借助用于允许政策的 Policy Analyzer,您可以根据 IAM 允许政策,确定哪些主账号(例如用户、服务账号、群组和网域)对哪些 Google Cloud 资源拥有什么访问权限。
适用于允许政策的 Policy Analyzer 可以帮助您回答以下问题:
- 谁可以访问此 IAM 服务账号?
- 谁可以读取此包含个人身份信息 (PII) 的 BigQuery 数据集中的数据?
dev-testers
群组对此项目中的任意资源拥有什么角色和权限?- Tal 可以在项目 A 中删除哪些 Compute Engine 虚拟机 (VM) 实例?
- 晚上 7 点时,谁可以访问此 Cloud Storage 存储桶?
适用于允许政策的 Policy Analyzer 的工作原理
如需针对允许政策使用政策分析器,您需要创建分析查询、为分析指定范围,然后运行查询。
分析查询
如需使用政策分析器,您需要创建分析查询,并指定以下一个或多个字段:
- 主账号:您要检查访问权限的身份(例如用户、服务账号、群组和网域)
- 访问权限:您要检查的权限和角色
- 资源:您要检查访问权限的资源
- (仅限 API)条件情境:您希望在哪种情境(例如时间)下检查访问权限
通常,您会在分析查询中指定其中一个或两个字段,然后使用查询结果来获取有关您未指定的字段的更多信息。例如,如果您想知道谁对某个资源拥有某项权限,则需要在分析查询中指定访问权限和资源,但不需要指定主账号。
如需查看更多可创建的查询类型示例,请参阅常见的查询类型。
分析范围
如需运行分析查询,您需要指定要分析的范围。范围是您要将分析范围限定到的组织、文件夹或项目。系统只会分析附加到用作范围的资源及其后代资源的 IAM 允许政策。
在 REST API 和 gcloud CLI 中,您需要手动指定范围。在 Google Cloud 控制台中,系统会根据您管理的项目、文件夹或组织自动确定范围。
创建分析查询并指定范围后,您可以运行查询来分析该范围内的政策。
查询结果
当您运行分析查询时,政策分析器会报告包含您在查询中指定的主账号、访问权限和资源的所有角色绑定。对于每个角色绑定,该报告会报告绑定中的主账号、绑定授予的访问权限(角色和权限)以及绑定授予访问权限的资源。
您可以查看这些结果,以便更好地了解项目、文件夹或组织中的访问权限。例如,如果您运行查询以了解哪些主账号有权访问特定资源,则需要查看查询结果中的主账号。
您可以通过启用查询选项来调整查询结果中的信息。
支持的政策类型
适用于允许政策的政策分析器仅支持 IAM 允许政策。
用于允许政策的政策分析器不支持以下形式的访问权限控制:
- IAM 拒绝政策
- IAM 主账号访问边界政策
- Google Kubernetes Engine 基于角色的访问权限控制
- Cloud Storage 访问权限控制
- Cloud Storage 阻止公开访问
政策分析器查询结果不考虑不受支持的政策类型。例如,假设某个用户因允许政策而拥有对项目的 iam.roles.get
权限,但因拒绝政策而无法使用该权限。尽管存在拒绝政策,Policy Analyzer 仍会报告它们具有 iam.roles.get
权限。
政策继承
为了考虑政策继承,政策分析器会自动分析指定范围内的所有相关允许政策,无论这些政策在资源层次结构中的什么位置。
例如,假设您尝试了解谁可以访问某个 IAM 服务账号:
- 如果您将查询范围限定为某个项目,Policy Analyzer 会分析服务账号的允许政策和项目的允许政策。
- 如果您将查询范围限定为组织,政策分析器会分析服务账号的允许政策、拥有服务账号的项目的允许政策、包含该项目的任何文件夹的允许政策,以及组织的允许政策。
条件访问
如果角色绑定具有条件,则仅当满足该条件时,才会向主账号授予访问权限。政策分析器始终会报告附加到相关角色绑定的条件。相关角色绑定是指包含您在分析查询中指定的主账号、访问权限和资源的角色绑定。
在某些情况下,政策分析器还可以分析条件,也就是说,它可以报告是否会满足相应条件。Policy Analyzer 可以分析以下类型的条件:
- 基于资源属性的条件,适用于提供资源名称的资源类型。
- 日期/时间条件(仅限 API 和 gcloud CLI)。为了让政策分析器分析这些条件,您需要在分析查询中提供访问时间 (
accessTime
)。如需了解如何提供此情境,请参阅确定特定时间的访问权限。
如果相关角色绑定包含条件,政策分析器会执行以下操作之一:
如果 Policy Analyzer 可以分析该条件,则会执行以下操作之一:
- 如果条件的求值结果为 true,Policy Analyzer 会在查询结果中包含角色绑定,并将条件评估标记为
TRUE
。 - 如果条件的计算结果为 false,Policy Analyzer 不会在查询结果中包含该角色。
- 如果条件的求值结果为 true,Policy Analyzer 会在查询结果中包含角色绑定,并将条件评估标记为
如果政策分析器无法分析相关角色绑定的条件,则会在查询结果中包含该角色,并将条件评估标记为
CONDITIONAL
。
数据新鲜度
政策分析器使用 Cloud Asset API,该 API 会尽力确保数据的新鲜度。虽然几乎所有政策更新都会在几分钟内显示在 Policy Analyzer 中,但 Policy Analyzer 可能不会包含最新的政策更新。
常见查询类型
本部分介绍了如何使用分析查询来解答与访问权限相关的常见问题。
哪些主账号可以访问此资源?
如需确定哪些主账号可以访问某个资源,请创建一个分析查询,其中指定要检查的资源以及(可选)要检查的角色和权限。
这些查询可以帮助您回答诸如以下问题:
- 谁有权访问此 IAM 服务账号?
- 谁有权模拟此 IAM 服务账号?
- 谁是项目 A 的结算管理员?
- (仅限 API 和 gcloud CLI):谁可以通过模拟服务账号来更新项目 A?
如需了解如何创建和发送这些查询,请参阅确定哪些主账号可以访问资源。
哪些主账号具有这些角色和权限?
如需确定哪些主账号具有特定角色和权限,请创建分析查询,其中指定主账号以及要检查的一组角色和权限。
这些查询可以帮助您回答诸如以下问题:
- 在我的组织中,谁有权模拟服务账号?
- 谁是我所在组织的结算管理员?
- 谁可以读取此包含个人身份信息 (PII) 的 BigQuery 数据集中的数据?
- (仅限 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
的角色,则查询结果不仅会列出角色名称,还会列出该角色包含的所有权限。
通过此选项,您可以准确了解主账号拥有哪些权限。
资源扩展
如果您为政策分析器查询启用资源展开,则查询结果会列出查询结果中任何父级资源(项目、文件夹和组织)的所有相关子资源。对于政策分析器查询,此扩展的上限为每个父级资源 1,000 个资源;对于长时间运行的政策分析器查询,此扩展的上限为每个父级资源 10 万个资源。
例如,请考虑资源扩展对以下查询有何影响:
谁拥有
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 高级层级。如需了解详情,请参阅结算问题。