按照建议授予最小权限

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

Cloud IAM Recommender 的工作原理

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

Cloud IAM Recommender 还会使用机器学习来确定成员以后可能需要的权限,即使该成员在过去 90 天内未使用这些权限。

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

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

每个成员使用的权限

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

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

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

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

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

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

机器学习

有时,成员可能需要在过去 90 天内未使用的权限才能完成任务。为了确定成员可能需要的其他权限,Cloud IAM Recommender 使用机器学习 (ML) 模型。

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

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

  • 角色定义中编码的域知识:Cloud IAM 提供数百种不同的、特定于服务的预定义角色。如果某个预定义角色包含一组权限,则强烈表示这些权限应该一起授予。

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

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

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

审核日志

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

其他类型的访问控制

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

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

角色建议示例

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

撤消现有角色

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

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

替换现有角色

服务帐号被授予项目的 Owner 角色 (roles/owner)。此原初角色包含 2,500 多项权限,几乎拥有对项目无限制的访问权限。但是,在过去 90 天内,该服务帐号只使用了几百项权限。

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

添加机器学习建议的权限

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

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

此角色包括服务帐号在过去 90 天内没有使用的若干权限。但是,Cloud IAM Recommender 使用机器学习功能预测,该服务帐号将来需要这些权限。

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

所需权限

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

查看建议

要查看 Cloud 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)

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

应用和拒绝建议

要应用和拒绝 Cloud 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)

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

后续步骤