IAM 政策的政策分析器

借助政策分析器,您可以根据 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 可以分析以下类型的条件:

如果相关角色绑定包含条件,则政策分析器会执行以下某项操作:

  • 如果政策分析器可以分析条件,则会执行以下某项操作:

    • 如果条件的评估结果为 true,则政策分析器会在查询结果中添加角色绑定,并将条件评估标记为 TRUE
    • 如果条件的评估结果为 false,则政策分析器不会在查询结果中包含此角色。
  • 如果政策分析器无法分析相关角色绑定的条件,则会将该角色添加到查询结果中,并将条件评估标记为 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-1storage.buckets.delete 权限?”启用了群组扩展功能,如果 Policy Analyzer 找到任何具有 storage.buckets.delete 权限的群组,则查询结果不仅会列出群组标识符,还会列出该群组中的所有个人成员。

通过此选项,您可以了解各个用户的访问权限,即使该访问权限是由他们群组成员资格导致的。

角色扩展

如果启用角色扩展,则查询结果不仅会列出角色本身,还会列出每个角色内的所有权限。只有当您未在查询中指定任何权限或角色时,此选项才可用。

例如,假设您针对查询“my-user@example.com 对存储桶 bucket-1 拥有什么访问权限?”启用了角色扩展,如果 Policy Analyzer 找到任何授予 my-user@example.combucket-1 访问权限的角色,则查询结果不仅会列出角色名称,还会列出该角色中包含的所有权限。

通过此选项,您可以确切了解主账号拥有哪些权限。

资源扩展

如果您为政策分析器查询启用资源扩展,则查询结果会在查询结果中列出所有父级资源(项目、文件夹和组织)的所有相关后代资源。对于 Policy Analyzer 查询,此扩展上限为每个父级资源 1,000 项资源;对于长时间运行的 Policy Analyzer 查询,上限为每个父级资源 100,000 项资源。

例如,请考虑资源扩展将如何影响以下查询:

  • 谁拥有 project-1storage.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 文档中的配额和限制

后续步骤