通过 Policy Analyzer(用于允许政策),您可以根据 IAM 允许政策,了解哪些主体(例如用户、服务账号、群组和网域)对哪些 Google Cloud 资源拥有什么访问权限。
针对允许政策的政策分析器可以帮助您回答如下问题:
- 谁可以访问此 IAM 服务账号?
- 谁可以读取此包含个人身份信息 (PII) 的 BigQuery 数据集中的数据?
dev-testers群组对此项目中的任意资源拥有什么角色和权限?- Tal 可以在项目 A 中删除哪些 Compute Engine 虚拟机 (VM) 实例?
- 谁可以在晚上 7 点访问此 Cloud Storage 存储桶?
允许政策的 Policy Analyzer 的运作方式
如需将 Policy Analyzer 用于允许政策,您需要创建分析查询,指定分析范围,然后运行查询。
分析查询
如需使用 Policy Analyzer,您需要创建分析查询,并指定以下一个或多个字段:
- 主账号:您要检查其访问权限的身份(例如用户、服务账号、群组和网域)
- 访问权限:您要检查的权限和角色
- 资源:您要检查的资源
- (仅限 API)条件上下文:您要检查访问权限的上下文(例如一天中的时间)
通常,您会在分析查询中指定其中一个或两个字段,然后使用查询结果来获取有关未指定字段的更多信息。例如,如果您想知道谁对特定资源拥有特定权限,您可以在分析查询中指定访问权限和资源,但不会指定主账号。
如需查看更多可创建的查询类型示例,请参阅常见查询类型。
分析范围
如需运行分析查询,您需要指定要分析的范围。范围是指您要将分析限制在其中的组织、文件夹或项目。系统只会分析附加到用作范围的资源及其后代的 IAM 允许政策。
在 REST API 和 gcloud CLI 中,您需要手动指定范围。在 Google Cloud 控制台中,系统会根据您管理的项目、文件夹或组织自动确定范围。
创建分析查询并指定范围后,您可以运行查询来分析该范围内的政策。
查询结果
当您运行分析查询时,Policy Analyzer 会报告包含您在查询中指定的主体、访问权限和资源的任何角色绑定。对于每个角色绑定,该工具会报告绑定中的主账号、绑定授予的访问权限(角色和权限)以及绑定授予访问权限的资源。
您可以查看这些结果,以便更好地了解项目、文件夹或组织中的访问权限。例如,如果您运行查询来了解哪些主账号有权访问特定资源,则可以查看查询结果中的主账号。
您可以启用查询选项来调整查询结果中的信息。
支持的政策类型
Policy Analyzer for allow policies only supports IAM 允许政策。
针对允许政策的 Policy Analyzer 不支持以下形式的访问权限控制:
- IAM 拒绝政策
- IAM 主账号访问边界政策
- Google Kubernetes Engine 基于角色的访问权限控制
- Cloud Storage 访问权限控制
- Cloud Storage 阻止公开访问
Policy Analyzer 查询结果不会考虑不受支持的政策类型。例如,假设用户因允许政策而拥有项目的 iam.roles.get 权限,但拒绝政策禁止其使用该权限。Policy Analyzer 会报告他们拥有 iam.roles.get 权限,即使存在拒绝政策也是如此。
政策继承
为了考虑政策继承,Policy Analyzer 会自动分析指定范围内的所有相关允许政策,无论这些政策位于资源层次结构中的哪个位置。
例如,假设您想了解谁可以访问某个 IAM 服务账号:
- 如果您将查询范围限定为某个项目,Policy Analyzer 会分析服务账号的允许政策和项目的允许政策。
- 如果您将查询范围限定为组织,Policy Analyzer 会分析服务账号的允许政策、拥有该服务账号的项目的允许政策、包含该项目的任何文件夹的允许政策以及组织的允许政策。
条件式访问
如果角色绑定具有条件,则只有在满足该条件时,才会授予主账号访问权限。Policy Analyzer 始终会报告附加到相关角色绑定的条件。相关角色绑定是指包含您在分析查询中指定的主账号、访问权限和资源的角色绑定。
在某些情况下,Policy Analyzer 还可以分析条件,这意味着它可以报告是否会满足条件。Policy Analyzer 可以分析以下类型的条件:
- 基于资源属性的条件,适用于提供资源名称的资源类型。
- 日期/时间条件(仅限 API 和 gcloud CLI)。为了让 Policy Analyzer 分析这些条件,您需要在分析查询中提供访问时间 (
accessTime)。如需了解如何提供此上下文,请参阅确定特定时间的访问权限。
如果相关角色绑定包含条件,Policy Analyzer 会执行以下操作之一:
如果 Policy Analyzer 可以分析该条件,则会执行以下操作之一:
- 如果条件的评估结果为 true,Policy Analyzer 会在查询结果中包含相应角色绑定,并将条件评估标记为
TRUE。 - 如果条件评估结果为 false,Policy Analyzer 不会在查询结果中包含相应角色。
- 如果条件的评估结果为 true,Policy Analyzer 会在查询结果中包含相应角色绑定,并将条件评估标记为
如果 Policy Analyzer 无法分析相关角色绑定的条件,则会在查询结果中包含该角色,并将条件评估标记为
CONDITIONAL。
数据新鲜度
Policy Analyzer 使用 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。
查询选项
Policy Analyzer 提供了多个选项,可为查询结果添加更多详细信息。
如需了解如何启用这些选项,请参阅启用选项。
群组扩展
如果您启用群组展开,查询结果中的所有群组都会展开为单个成员。每个群组的扩展上限为 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 查询启用资源扩展,查询结果会列出查询结果中任何父资源(项目、文件夹和组织)的所有相关后代资源。对于 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 会运行额外的分析查询,以确定哪些人可以模拟对指定资源具有指定访问权限的服务账号。Policy Analyzer 会针对查询结果中的每个服务账号运行一次查询。这些查询会分析谁对服务账号拥有以下任一权限:
iam.serviceAccounts.actAsiam.serviceAccounts.getAccessTokeniam.serviceAccounts.getOpenIdTokeniam.serviceAccounts.implicitDelegationiam.serviceAccounts.signBlobiam.serviceAccounts.signJwt
配额和限制
Cloud Asset Inventory 根据使用方项目对传入请求速率(包括政策分析请求)施加限制。Cloud Asset Inventory 还会限制群组成员资格中的群组扩展和资源层次结构中的资源扩展。
如需查看 Policy Analyzer 的默认配额和限制,请参阅 Cloud Asset Inventory 文档中的配额和限制。
价格
每个组织每天最多可以免费执行 20 次分析查询。此限制同时适用于允许政策分析和组织政策分析。
如果您想每天执行 20 次以上的分析查询,则必须在组织级层激活 Security Command Center 的高级方案或企业方案层级。如需了解详情,请参阅结算问题。