角色建议可以帮助您识别并移除主账号的多余权限,从而改善资源的安全配置。
角色建议概览
角色建议由 IAM Recommender 生成。IAM Recommender 是 Recommender 提供的一种 Recommender。
每个角色建议都会针对授予多余主账号权限的角色提出移除或替换建议。这些建议可大规模提供,通过确保主账号仅拥有其实际需要的权限,来帮助您强制执行最小权限原则。
IAM Recommender 使用政策数据分析来识别多余的权限。政策数据分析是基于机器学习的有关主账号权限使用情况的发现结果。
一些建议还与横向移动数据分析相关。这些数据分析用于标识允许一个项目中的服务账号模拟另一个项目中的服务账号的角色。如需了解详情,请参阅横向移动数据分析是如何生成的。
如何生成政策数据分析
政策数据分析会突出显示主账号角色中主账号未使用的权限。
IAM Recommender 通过将主账号的总权限数与该主账号在过去 90 天内使用的权限进行比较,来生成政策数据分析。如果角色是在 90 天前授予的,IAM Recommender 会查看主体自获得角色以来使用的权限。
主账号使用权限的方式有几种:
直接方式,即通过调用需要相应权限的 API
例如,IAM REST API 中的
roles.list方法需要iam.roles.list权限。如果您调用roles.list方法,则可以使用iam.roles.list权限。同样,针对资源调用
testIamPermissions方法时,您实际上是使用您要测试的所有权限。间接,通过使用 Google Cloud 控制台处理 Google Cloud资源
例如,在 Google Cloud 控制台中,您可以修改 Compute Engine 虚拟机 (VM) 实例,这需要不同的权限,具体取决于您更改的设置。不过, Google Cloud 控制台还会显示现有设置,这需要
compute.instances.get权限。因此,当您在 Google Cloud 控制台中修改虚拟机实例时,需使用
compute.instances.get权限。
为了确定主账号使用的权限,IAM Recommender 会使用汇总的 IAM 访问权限数据。如需了解如何导出 IAM Recommender 用于生成这些数据洞见的数据,请参阅导出角色建议数据。
IAM Recommender 还会使用机器学习在主账号的当前角色中确定主账号将来可能需要的权限,即使主账号最近未使用过这些权限也一样。如需了解详情,请参阅本页面上的政策数据分析的机器学习。
系统不会为授予给主账号的所有 IAM 角色生成政策数据分析。如需详细了解为何某些角色可能没有政策数据分析,请参阅本页面上的可用性。
如需了解如何管理政策数据分析,请参阅管理项目、文件夹和组织的政策数据分析或管理 Cloud Storage 存储桶的政策数据分析。
政策数据分析的机器学习
在某些情况下,主账号可能需要获得其当前角色中包含的某些权限,但他们最近并未使用过这些权限。为了确定这些权限,IAM Recommender 将在生成政策数据分析时使用机器学习 (ML) 模型。
此机器学习模型会针对多组信号进行训练:
观察历史记录中的常见同现模式:用户过去使用了权限 A、B、C 这一事实给出了一个提示,A、B、C 权限可能在某种程度上是相关的,在 Google Cloud上执行任务时需要一起用到这些权限。如果机器学习模型足够频繁地观察到该模式,则下次其他用户使用权限 A 和 B 时,模型会建议该用户可能也需要权限 C。
角色定义中编码的领域知识:IAM 提供数百种不同的、特定于服务的预定义角色。如果某个预定义角色包含一组权限,则很大程度上意味着这些权限应该一起授予。
除了这些信号之外,该模型还使用词嵌入 (word embedding) 来计算权限在语义上的相似程度。嵌入后,语义相似的权限会彼此“接近”,且更有可能一起授予。例如,嵌入后,bigquery.datasets.get 和 bigquery.tables.list 彼此非常接近。
IAM Recommender 机器学习流水线中使用的所有数据都具有 k-匿名性,这意味着无法重新确定匿名数据集中的个别项。为了实现此级别的匿名性,我们会放弃所有个人身份信息 (PII),例如与每种权限使用模式相关的用户 ID。然后,我们会放弃在 Google Cloud中出现频率不够的所有使用模式。系统会根据此匿名数据对全局模型进行训练。
联合学习是在不导出数据的情况下训练机器学习模型的机器学习过程。您可以使用“联合学习”为每个组织进一步自定义全局模型。
如何生成角色建议
如果政策数据分析表明主账号不需要其角色中的所有权限,则 IAM Recommender 会评估该角色以确定是否可以撤消该角色或者是否存在另一个更适合的角色。如果可以撤消该角色,IAM Recommender 会生成一个角色建议,以便您撤消该角色。如果存在另一个更适合的角色,IAM Recommender 会生成一个角色建议,以便您将该角色替换为建议的角色。此建议的角色可能是新的自定义角色、现有的自定义角色,或者一个或多个预定义角色。除非是针对服务代理的建议,否则角色建议绝不会建议提高主账号的访问权限级别。
系统仅根据 IAM 访问权限控制生成角色建议。它们不考虑其他类型的访问权限控制,例如访问控制列表 (ACL) 和 Kubernetes 基于角色的访问权限控制 (RBAC)。如果您使用其他类型的访问权限控制,请在查看建议时格外小心,并考虑这些访问权限控制如何与您的允许政策相关。
此外,系统不会为授予主账号的所有 IAM 角色生成角色建议。如需详细了解为何某些角色可能没有角色建议,请参阅本页面上的可用性。
观察期
角色建议的观测期是指建议所依据的权限使用情况数据的天数。
角色建议的最长观测期为 90 天。这意味着,IAM Recommender 最多会使用最近 90 天的权限使用情况数据来生成角色建议。
此外,IAM Recommender 在获得一定天数的权限使用情况数据后,才会开始生成角色建议。此时长称为“最短观测期”。默认情况下,最短观测期为 90 天,但对于项目级角色建议,您可以手动将其设置为 30 天或 60 天。如需了解详情,请参阅配置角色建议生成。如果您将最短观测期设置为少于 90 天,您会更快收到建议,但建议的准确性可能会受到影响。
如果自授予角色以来经过的时间超过了最短观测期,但不足 90 天,则观测期为自授予角色以来经过的时间。
角色建议中的新自定义角色
如果 IAM Recommender 建议替换角色,则始终会建议看起来更适合主账号需求的现有自定义角色或者一个或多个预定义角色。
如果 IAM Recommender 在您的组织中识别未映射到现有预定义角色或自定义角色的常见权限使用模式,则还建议您创建新的项目级层自定义角色。此自定义角色仅包含建议的权限。您可以通过添加或移除权限来修改自定义角色建议。
如果您希望尽可能严格地执行最小权限原则,请选择新的自定义角色。IAM Recommender 会在项目级层创建自定义角色。您负责维护和更新项目的自定义角色。
如果您希望使用由 Google Cloud 维护的角色,请选择预定义角色。 Google Cloud 会定期通过添加或移除权限来更新这些角色。如需接收有关这些更新的通知,请订阅权限更新日志的新闻信息流。如果您选择预定义角色,则主账号将继续拥有至少几项权限,而且可能还有大量未使用的权限。
IAM Recommender 仅针对在项目上授予的角色建议新的自定义角色。对于在文件夹或组织等其他资源上授予的角色,它不会建议新的自定义角色。
此外,IAM Recommender 在以下情况下不建议新的自定义角色:
- 您的组织已拥有 100 个或更多自定义角色。
- 您的项目已拥有 25 个或更多自定义角色。
IAM Recommender 在每个项目中每天最多建议 5 个新的自定义角色,并且在整个组织中每天最多建议 15 个新的自定义角色。
横向移动数据分析是如何生成的
横向移动是指一个项目中的服务账号有权模拟另一个项目中的服务账号。例如,服务账号可能是在项目 A 中创建的,但具有在项目 B 中模拟服务账号的权限。
这些权限可能导致项目之间发生一系列模拟,这些模拟会为主账号授予对资源的意外访问权限。例如,如果主账号模拟项目 A 中的服务账号,则主账号可以使用该服务账号模拟项目 B 中的服务账号。如果项目 B 中的服务账号有权模拟组织中其他项目中的其他服务账号,则主账号可以继续使用服务账号模拟从项目移动到项目,从而在移动时获取权限。
IAM Recommender 通过识别符合以下条件的角色来生成横向移动数据分析:
- 被授予角色的主账号是未在项目中创建的服务账号。
该角色包含以下权限之一,可让主账号模拟服务账号:
iam.serviceAccounts.actAsiam.serviceAccounts.getAccessTokeniam.serviceAccounts.getOpenIdToken