按照建议授予最低权限

本页面简要介绍了 IAM Recommender。通过确保成员只能有他们实际需要的权限,IAM Recommender 可以帮助您实施最低权限的原则。

IAM Recommender 的工作原理

IAM 使用 Recommender 来比较项目级层的角色授予与每个成员在过去 90 天内使用的权限。如果您向成员授予了项目级层角色,而该成员没有使用该角色的所有权限,那么 IAM Recommender 可能会建议您撤消该角色。如有必要,IAM Recommender 还会建议改为授予权限较少的角色。IAM Recommender 绝不会建议提高成员的访问权限级别。

IAM Recommender 会使用机器学习在成员的当前角色中确定成员将来可能需要的权限,即使成员在过去 90 天内未使用这些权限也一样。

IAM Recommender 不会自动应用建议。而是您必须查看每条建议,然后应用或拒绝建议。

IAM Recommender 仅评估已在项目级层进行的角色授予,且该角色授予需要已至少存在 90 天。它不会评估以下任何内容:

  • 在文件夹或组织级层进行的角色授予
  • 在项目级层以下进行的角色授予;也就是说,针对项目内特定于服务的资源的角色授予
  • 条件式角色赋予
  • 针对 Google 管理的服务帐号的角色授予
  • 独立于 IAM 的访问权限控制

每个成员使用的权限

为了创建建议,IAM Recommender 会确定每个成员在过去 90 天内使用的权限。成员使用权限的方式有几种:

  • 直接方式,即通过调用需要相应权限的 API

    例如,IAM REST API 中的 roles.list 方法需要 iam.roles.list 权限。如果您调用 roles.list 方法,则可以使用 iam.roles.list 权限。

    同样,针对资源调用 testIamPermissions 方法时,您实际上是使用您要测试的所有权限。

  • 间接方式,即通过使用 Google Cloud Console 处理 Google Cloud 资源

    例如,在 Cloud Console 中,您可以修改 Compute Engine 虚拟机 (VM) 实例,该实例需要不同的权限,具体取决于您更改的设置。但是,Cloud Console 还会显示现有设置,这需要 compute.instances.get 权限。

    因此,当您在 Cloud Console 中修改虚拟机实例时,需使用 compute.instances.get 权限。

机器学习

在某些情况下,成员可能需要获得其当前角色中包含的某些权限,但这些权限在过去 90 天内未使用。为了确定这些权限,IAM Recommender 使用机器学习 (ML) 模型。

IAM Recommender 的机器学习模型会针对多组信号进行训练:

  • 观察历史记录中的常见同现模式:用户过去使用了权限 A、B、C 这一事实给出了一个提示,A、B、C 权限可能在某种程度上是相关的,在 Google Cloud 上执行任务时需要一起用到这些权限。如果机器学习模型足够频繁地观察到该模式,则下次其他用户使用权限 A 和 B 时,模型会建议该用户可能也需要权限 C。

  • 角色定义中编码的领域知识:IAM 提供数百种不同的、特定于服务的预定义角色。如果某个预定义角色包含一组权限,则很大程度上意味着这些权限应该一起授予。

除了这些信号之外,该模型还使用词嵌入 (word embedding) 来计算权限在语义上的相似程度。嵌入后,语义相似的权限会彼此“接近”,且更有可能一起授予。例如,嵌入后,bigquery.datasets.getbigquery.tables.list 彼此非常接近。

IAM Recommender 机器学习流水线中使用的所有数据都具有 k-匿名性,这意味着无法重新确定匿名数据集中的个别项。为了实现此级别的匿名性,我们会放弃所有个人身份信息 (PII),例如与每种权限使用模式相关的用户 ID。然后,我们会放弃在 Google Cloud 中出现频率不够的所有使用模式。系统会根据此匿名数据对全局模型进行训练。

联合学习是在不导出数据的情况下训练机器学习模型的机器学习过程。您可以使用“联合学习”为每个组织进一步自定义全局模型。

数据分析

建议是根据一项或多项 IAM 数据分析创建的。IAM 政策数据分析是基于机器学习的有关项目中权限使用情况的发现结果。

一些数据分析会链接到建议,并为关联建议提供证据。但是,您可以独立于建议使用数据分析。如需了解如何使用数据分析,请参阅使用政策数据分析

审核日志记录

每当您应用或拒绝建议,IAM Recommender 会创建一个日志条目。您可以在 IAM Recommender 中查看这些条目,也可以在 Google Cloud 审核日志中查看它们

其他类型的访问权限控制

某些 Google Cloud 服务提供独立于 IAM 的访问权限控制。例如,Cloud Storage 提供访问控制列表 (ACL),Google Kubernetes Engine (GKE) 支持 Kubernetes 基于角色的访问权限控制 (RBAC)

IAM Recommender 仅分析 IAM 访问权限控制。如果您使用其他类型的访问权限控制,请在查看建议时格外小心,并考虑这些访问权限控制如何与您的 IAM 政策相关。

查看建议

如果您在 Cloud Console 中点击建议,则 Cloud Console 会显示以不同颜色和符号编码的权限列表。此列表会指出如果您应用建议,成员的权限将如何变化。

与每种颜色和符号相关联的权限类型如下所示:

  • 灰色、无符号:同时属于该成员当前角色和建议角色的权限。

  • 红色、带减号 :权限属于该成员的当前角色,但不属于建议角色,因为该成员在过去 90 天内未使用这些权限。

  • 绿色,带加号:权限隐式包含在成员当前角色中,但必须显式包含在建议角色中才能保持当前访问权限级别。

    只有在替换基本角色时才会显示这种类型的权限。某些 Google Cloud 服务(包括 Cloud Storage 和 BigQuery)会隐式为具有基本角色的任何成员提供额外权限。如果成员在过去 90 天内使用过这些隐式权限,则建议角色将包含等效的显式权限,以便成员保留其现有访问权限。IAM Recommender 绝不会添加成员尚未拥有的权限

  • 蓝色、带“机器学习”图标 :同时属于该成员当前角色和建议角色的权限,并不是因为成员在过去 90 天内使用过这些权限,而是因为 Recommender 已通过机器学习确定他们将来可能需要这些权限。本页面举例说明了一种场景,您可在其中看到机器学习建议的权限

自定义角色的建议

如果 IAM Recommender 建议替换现有角色,则始终会建议看起来更适合成员需求的预定义角色。在某些情况下,它还会提供创建仅包含建议权限的新自定义角色的选项。您可以通过添加或移除权限来修改自定义角色建议。

如果您希望严格执行最低权限原则,请选择新的自定义角色。IAM Recommender 会在项目级层创建自定义角色。您负责维护和更新项目的自定义角色。

如果您希望使用 Google 管理的角色,请选择预定义角色。Google Cloud 会定期通过添加或移除权限来更新这些角色。如需接收有关这些更新的通知,请订阅权限更改日志的新闻 Feed。如果您选择预定义角色,则成员将继续拥有至少几项权限,而且可能还有大量未使用的权限。

IAM Recommender 在以下情况下不建议新的自定义角色:

  • 您的组织已拥有 100 个或更多自定义角色。
  • 您的项目已拥有 25 个或更多自定义角色。

此外,IAM Recommender 在每个项目中每天最多建议 5 个新的自定义角色,并且在整个组织中每天最多建议 15 个新的自定义角色。

角色建议示例

以下示例展示了您可能会收到的建议类型。

撤消现有角色

用户 fuyo@example.com 被授予项目的自定义角色。自定义角色包含一项权限 iam.serviceAccounts.actAs,该权限授予 fuyo@example.com 充当服务帐号的权限。但是,在过去 90 天内,fuyo@example.com 尚未充当该项目中的服务帐号。

因此,IAM Recommender 建议您撤消 fuyo@example.com 的自定义角色:

替换现有角色

服务帐号被授予项目的 Owner 角色 (roles/owner)。此基本角色具有 2500 多项权限,并且可授予针对项目几乎不受限的访问权限。但是,在过去 90 天内,该服务帐号只使用了几百项权限。

因此,IAM Recommender 建议您撤消 Owner 角色,并将其替换为其他四个角色的组合,从而移除数千项过度授予的权限:

创建自定义角色

用户 nelson@example.com 被授予项目的 BigQuery Data Viewer 角色 (roles/bigquery.dataViewer)。该角色包含 10 项以上的权限,但在过去 90 天内,nelson@example.com 仅使用了其中 3 项权限。

因此,IAM Recommender 建议您创建一个仅包含 nelson@example.com 实际使用的权限的自定义角色:

IAM Recommender 还建议另一个选项,即将现有角色替换为 BigQuery Metadata Viewer 角色 (roles/bigquery.metadataViewer)。此预定义角色包含的权限在数量上稍微少于 BigQuery Data Viewer 角色。

带有机器学习建议的权限的角色替换

服务帐号被授予项目的 Editor 角色 (roles/editor)。 此基本角色具有 2000 多项权限,并且可授予针对项目的广泛访问权限。但是,在过去 90 天内,该服务帐号只使用了不到 10 项的权限。

IAM Recommender 建议您撤消 Editor 角色,并将其替换为 Storage Object Admin 角色 (roles/storage.objectAdmin),后者可以完全控制 Cloud Storage 存储分区中的对象。此更改会移除数千项过度授予的权限。

此角色包含服务帐号在过去 90 天内未使用的 Editor 角色的多项权限。但是,IAM Recommender 可以使用机器学习功能来预测出该服务帐号将来需要这些权限。

IAM Recommender 使用机器学习 图标来确定这些额外的权限。在本示例中,resourcemanager.projects.get 权限是根据机器学习建议的:

建议的可用性

在 Cloud Console 中,IAM 页面会显示项目的所有成员,并列出每个成员在项目中拥有的角色。此外,它还会指出建议是否适用于每个角色。

如果有可用的建议,则 Cloud Console 会显示有建议可用 图标。此图标会指出该成员具有可能不需要的权限。点击该图标以查看并应用建议

如果无可用的建议,则 Cloud Console 会显示无建议可用 图标。如需找出原因,请将指针悬停在图标上方。

项目中的一些成员具有很少建议或者没有建议是正常的。有多种原因可以解释成员为何没有特定角色的建议:

  • 没有比当前角色更合适的预定义 IAM 角色。如果成员已具有预定义角色,且该角色可最大限度地减少其权限数量,或者所包含的权限数量少于其他预定义角色,则 IAM Recommender 就不能推荐其他预定义角色。

    您可以通过为成员创建自定义角色来减少该成员的权限数量。

  • 该成员没有足够的使用情况数据。如果 IAM Recommender 没有关于成员如何使用 Google Cloud 的足够信息,则无法为该成员的角色提供建议。

    在 IAM Recommender 收集更多数据之后,您将来可能会看到针对该成员的建议。

  • 该成员是由 Google 管理的服务帐号。为了确保 Google 管理的服务帐号可以在必要时访问您的资源,IAM Recommender 不会分析授予 Google 管理的服务帐号的任何角色。

  • 角色绑定是条件式的。如果角色绑定包含条件,则只有在满足特定权限时才授予角色。IAM Recommender 不会针对这些角色绑定提出建议。

  • 没有其他成员拥有项目的 Owner 基本角色。至少有一个成员必须具有每个项目的 Owner 角色 (roles/owner)。如果只有一个成员具有此角色,则 IAM Recommender 不会建议您撤消或替换该角色。

  • 对角色绑定的当前建议已被忽略,或者已应用然后还原。如果您拒绝更改成员角色的建议,或者如果您应用建议,然后还原建议,则 Cloud Console 不会再次显示该建议。

    将来,如果 IAM Recommender 会提出新建议来更改成员角色,那么即使您已拒绝或恢复之前的建议,Cloud Console 也会显示新建议。

    您可以在建议日志中查看已拒绝的建议和已还原的建议。已拒绝的建议会一直可用,直到被弃用为止。已还原的建议的可用期限为 90 天。

必需的 IAM 权限

本部分介绍需要哪些 IAM 权限才能使用 IAM Recommender。

查看建议

如需查看 IAM Recommender 的建议,您必须对正在查看的项目拥有以下权限:

  • iam.roles.get
  • iam.roles.list
  • recommender.iamPolicyRecommendations.get
  • recommender.iamPolicyRecommendations.list
  • resourcemanager.projects.getIamPolicy

如需获得这些权限,同时遵循最低权限原则,请让管理员授予您以下预定义角色:

  • Role Viewer (roles/iam.roleViewer)
  • IAM Recommender Viewer (roles/recommender.iamViewer) 或 IAM Security Reviewer (roles/iam.securityReviewer)

或者,管理员也可以向您授予包含所需权限的其他角色,例如自定义角色或更宽松的预定义角色。

应用和拒绝建议

如需应用和拒绝 IAM Recommender 的建议,您必须对正在管理的项目拥有以下权限:

  • iam.roles.get
  • iam.roles.list
  • recommender.iamPolicyRecommendations.get
  • recommender.iamPolicyRecommendations.list
  • recommender.iamPolicyRecommendations.update
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.setIamPolicy

如需获得这些权限,同时遵循最低权限原则,请让管理员授予您以下预定义角色:

  • Role Viewer (roles/iam.roleViewer)
  • IAM Recommender Admin (roles/recommender.iamAdmin)
  • Project IAM Admin (roles/resourcemanager.projectIamAdmin)

或者,管理员也可以向您授予包含所需权限的其他角色,例如自定义角色或更宽松的预定义角色。

后续步骤