角色建议概览

角色建议可以帮助您识别并移除主账号的多余权限,从而改善资源的安全配置。

角色建议概览

角色建议由 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 Console 使用 Google Cloud 资源

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

    因此,在 Google Cloud 控制台中修改虚拟机实例时,您需要使用 compute.instances.get 权限。

IAM Recommender 还会使用机器学习来识别主帐号当前角色将来可能需要用到的权限,即使主帐号最近未使用这些权限。如需了解详情,请参阅本页面上的使用机器学习获取政策数据分析

系统不会为所有 IAM 角色绑定生成政策数据分析。如需详细了解为何某些角色绑定可能没有政策数据分析,请参阅本页面上的可用性

如需了解如何管理政策数据分析,请参阅管理项目、文件夹和组织的政策数据分析管理 Cloud Storage 存储分区的政策数据分析

政策数据分析的机器学习

在某些情况下,主账号可能需要获得其当前角色中包含的某些权限,但他们最近并未使用过这些权限。为了识别这些权限,IAM Recommender 会在生成政策数据分析时使用机器学习 (ML) 模型。

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

  • 观察历史记录中的常见同现模式:用户过去使用了权限 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 Recommender 会评估该角色,以确定是否可以撤消该角色,或者是否存在其他更合适的角色。如果可以撤消该角色,则 IAM Recommender 会生成角色建议来撤消该角色。如果存在另一个更适合的角色,IAM Recommender 会生成角色建议,将该角色替换为建议的角色。此建议的角色可能是新的自定义角色、现有的自定义角色,或者一个或多个预定义角色。除非是针对 Google 管理的服务账号的建议,否则角色建议绝不会建议提高主账号的访问权限级别。

系统仅根据 IAM 访问权限控制生成角色建议。它们不考虑其他类型的访问权限控制,例如访问控制列表 (ACL) 和 Kubernetes 基于角色的访问权限控制 (RBAC)。如果您使用其他类型的访问权限控制,请在查看建议时格外小心,并考虑这些访问权限控制如何与您的允许政策相关。

此外,系统不会为所有 IAM 角色绑定生成角色建议。如需详细了解为何某些角色绑定可能没有角色建议,请参阅本页面上的可用性

观察期

角色建议的观察期是指建议所依据的权限使用情况数据的天数。

角色建议的最长观察期为 90 天。这意味着 IAM Recommender 最多使用最近 90 天的权限使用情况数据来生成角色建议。

IAM Recommender 在获得一定天数的权限使用情况数据之前,也不会开始生成角色建议。此时长称为最短观察期。默认情况下,最短观察期为 90 天,但对于项目级角色建议,您可以手动将其设置为 30 天或 60 天。如需了解详情,请参阅配置角色建议生成功能如果将最短观察期设置为少于 90 天,则会提前收到建议,但建议的准确性可能会受到影响。

如果角色绑定的时间超过最短观察期,但晚于 90 天,则观察期即为角色绑定的生命周期。

角色建议中的新自定义角色

当 IAM Recommender 建议替换某个角色时,它始终会建议看起来更符合主帐号需求的现有自定义角色或一个或多个预定义角色。

如果 IAM Recommender 在您的组织中识别未映射到现有预定义角色或自定义角色的常见权限使用模式,则还建议您创建新的项目级层自定义角色。此自定义角色仅包含建议的权限。您可以通过添加或移除权限来修改自定义角色建议。

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

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

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

  • 建议是针对文件夹或组织级角色。
  • 您的组织已拥有 100 个或更多自定义角色。
  • 您的项目已拥有 25 个或更多自定义角色。

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

横向移动数据分析是如何生成的

横向移动是指一个项目中的服务账号有权模拟另一个项目中的服务账号。例如,服务账号可能是在项目 A 中创建的,但具有在项目 B 中模拟服务账号的权限。

这些权限可能导致项目之间发生一系列模拟,这些模拟会为主账号授予对资源的意外访问权限。例如,如果主账号模拟项目 A 中的服务账号,则主账号可以使用该服务账号模拟项目 B 中的服务账号。如果项目 B 中的服务账号有权模拟组织中其他项目中的其他服务账号,则主账号可以继续使用服务账号模拟从项目移动到项目,从而在移动时获取权限。

IAM Recommender 通过识别符合以下条件的角色绑定来生成横向移动数据分析:

  • 角色绑定中的主账号是未在项目中创建的服务账号。
  • 该角色包含以下权限之一,可让主账号模拟服务账号:

    • iam.serviceAccounts.actAs
    • iam.serviceAccounts.getAccessToken
    • iam.serviceAccounts.getOpenIdToken
    • iam.serviceAccounts.implicitDelegation
    • iam.serviceAccounts.signBlob
    • iam.serviceAccounts.signJwt

如果角色绑定符合这些条件,IAM Recommender 会针对绑定生成横向移动数据分析。此数据分析包含服务账号模拟能力的相关信息,包括它可以模拟哪些服务账号,以及在过去 90 天内是否使用了任何模拟权限。

IAM Recommender 不会自行使用横向移动数据分析来生成新的角色建议。这是因为,如果服务帐号正在使用其模拟权限,则 IAM Recommender 无法安全地建议移除模拟权限。但是,如果角色建议因未在使用而建议移除这些权限,则 IAM Recommender 会将横向移动数据分析与该建议相关联。如果服务账号跨项目具有强大且未使用的模拟权限,此关联可帮助您优先处理这些服务账号的角色建议。

如需了解如何管理横向移动数据分析,请参阅管理横向移动数据分析

可用情况

系统不会为每个角色绑定生成政策数据分析、横向移动数据分析和角色建议。请阅读以下部分,了解为哪些角色绑定生成政策数据分析、横向移动数据分析和建议。

政策数据分析可用性

如需让 IAM Recommender 为角色绑定生成政策数据分析,必须满足以下条件:

  • 包含角色绑定的 IAM 允许政策必须附加到以下资源之一:

    • Cloud Storage 存储桶
    • BigQuery 数据集
    • 项目
    • 文件夹
    • 组织

    IAM Recommender 仅为在这些资源上授予的角色生成政策数据分析。

  • 角色绑定不得具有条件。IAM Recommender 不会为条件角色绑定生成政策数据分析。

IAM Recommender 最多可能需要 10 天才能为新角色绑定生成政策数据分析。

现有的政策数据分析会根据您最近的权限使用情况每天刷新。但是,政策数据分析所依据的数据通常最多会滞后于实际使用情况的两天。

横向移动数据分析可用性

系统会为以下资源的角色绑定生成横向移动数据分析:

  • 组织
  • 文件夹
  • 项目
  • 服务账号

角色建议可用性

如需让 IAM Recommender 为角色绑定生成角色建议,必须满足以下条件:

  • 角色绑定必须具有与之关联的政策数据分析。此政策数据分析可作为建议的依据。
  • 角色绑定必须早于最短观察期。这样可确保 IAM Recommender 有足够的使用情况数据来给出建议。默认观察期最短为 90 天,但您可以手动将其设置为 30 天或 60 天。如需了解详情,请参阅配置角色建议生成
  • 如果角色绑定中的主账号是 Google 管理的服务账号,则角色绑定必须是 Owner、Editor 或 Viewer。IAM Recommender 不会为具有其他角色的 Google 代管式服务帐号生成角色建议。如需了解详情,请参阅针对 Google 管理的服务账号的角色建议

如果角色绑定过新或没有任何数据分析,则 Google Cloud 控制台中的已分析的权限列会显示一个 图标。

在某些情况下,IAM Recommender 不会为角色绑定生成角色建议,即使角色绑定已经存在时间较长并且具有与其关联的数据分析也是如此。出现这种情况的原因如下:

  • 没有比当前角色更合适的预定义 IAM 角色。如果主账号已具有一个预定义角色(可尽量减少其权限,或者包含的权限少于其他预定义角色),则 IAM Recommender 就不能推荐其他预定义角色。

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

  • 主账号是 Google 管理的服务账号,且该角色不是基本角色。仅当服务帐号具有基本角色(Owner、Editor 或 Viewer)时,IAM Recommender 才会为 Google 代管式服务帐号生成角色建议。如需了解详情,请参阅针对 Google 管理的服务账号的角色建议

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

在这些情况下,Google Cloud 控制台中的已分析的权限列会显示主帐号的权限使用情况,但没有有建议可用 图标。

系统会根据您最近使用的权限情况每天刷新现有角色建议。但是,角色建议所依据的数据通常最多会滞后您的实际使用数据两天。

优先级和严重程度

建议优先级和数据分析严重程度有助于您了解建议或数据分析的紧急程度,并据此排定优先级。

角色建议优先级

系统根据建议的紧急程度为其分配优先级。优先级范围为 P0(最高优先级)到 P4(最低优先级)。

角色建议的优先级取决于建议所针对的角色绑定:

建议详细信息 优先级 说明
有关授予 Cloud Storage 存储分区公开访问权限的角色绑定的建议 P1 互联网上的任何人都可以访问可公开访问的存储分区。移除公开访问权限后,您可以更好地控制自己的数据。
有关授予 BigQuery 数据集的公开访问权限的角色绑定的建议 P1 互联网上的任何人都可以访问可公开访问的数据集。移除公开访问权限可让您更好地控制自己的数据。
有关在项目、文件夹或组织上授予基本角色(Owner、Editor 和 Viewer)的角色绑定的建议 P2 基本角色具有高度宽松的权限,应用针对这些角色的建议可以大幅减少过度授予的权限。
不授予公开访问权限或基本角色的建议 P4 虽然这些建议可帮助您减少多余的权限,但它们不会移除公开访问权限或高度宽松的基本角色,因此它们的优先级较低。

数据分析的严重程度

系统根据数据分析的紧急程度为其分配严重性级别。严重性级别可以是 LOWMEDIUMHIGHCRITICAL

政策数据分析的严重程度取决于数据分析所针对的角色绑定:

数据分析详细信息 严重级别 说明
授予对 Cloud Storage 存储分区的公开访问权限的角色绑定的数据分析 CRITICAL 互联网上的任何人都可以访问可公开访问的存储分区。移除公开访问权限后,您可以更好地控制自己的数据。
可授予对 BigQuery 数据集的公开访问权限的角色绑定的数据分析 CRITICAL 互联网上的任何人都可以访问可公开访问的数据集。移除公开访问权限可让您更好地控制自己的数据。
用于在项目、文件夹或组织上授予基本角色(Owner、Editor 和 Viewer)的角色绑定的数据分析 HIGH 基本角色具有高度宽松的权限,而解决这些角色的数据分析可以大幅减少过度授予的权限。
不授予公开访问权限或基本角色的数据分析 LOW 虽然这些数据分析突出显示了多余的权限,但它们不涉及公开访问权限或高度宽松的基本角色,因此它们的优先级较低。

所有横向移动数据分析的严重程度均为 LOW

角色建议的应用方式

IAM Recommender 不会自动应用建议。而是您必须查看建议并决定是应用还是拒绝建议。如需了解如何查看、应用和忽略角色建议,请参阅以下指南之一:

审核日志记录

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

角色建议子类型

角色建议根据其建议执行的操作可分为几个不同的子类型。如果您使用 gcloud CLI 或 REST API,则可以使用这些子类型来过滤建议。

子类型 说明
REMOVE_ROLE 建议移除主账号的项目级、文件夹级或组织级角色。
REMOVE_ROLE_BIGQUERY_DATASET 移除主账号的数据集级角色的建议。
REMOVE_ROLE_STORAGE_BUCKET 移除主账号的存储桶级角色的建议。
REPLACE_ROLE 建议将主账号的项目级、文件夹级或组织级角色替换为权限较少的角色。建议的替代角色可以是现有的自定义角色,也可以是一个或多个预定义角色。
REPLACE_ROLE_CUSTOMIZABLE 建议将主账号的角色替换为权限低于其当前角色的新自定义角色
REPLACE_ROLE_BIGQUERY_DATASET 建议将主帐号的数据集级角色替换为权限较少的角色。建议的替代角色可以是现有的自定义角色,也可以是一个或多个预定义角色。
REPLACE_ROLE_STORAGE_BUCKET 建议将主帐号的存储桶级角色替换为权限较少的角色。建议的替代角色可以是现有的自定义角色,也可以是一个或多个预定义角色。
SERVICE_AGENT_WITH_DEFAULT_ROLE 用于将 Google 所管理服务账号的 Owner、Editor 或 Viewer 角色替换为在创建该服务账号时自动授予它的角色的建议。如需了解详情,请参阅针对 Google 管理的服务账号的建议
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE 用于将 G Suite 服务账号的 Owner、Editor 或 Viewer 角色替换为权限较少的角色的建议。如需了解详情,请参阅针对 Google 管理的服务账号的建议

针对 Google 管理的服务账号的角色建议

对于 Google 代管式服务帐号,IAM Recommender 仅就具有基本角色(Owner、Editor 或 Viewer)的角色绑定提供建议。

针对 Google 管理的服务账号的建议分为两个建议子类型。

SERVICE_AGENT_WITH_DEFAULT_ROLE

某些 Google 管理的服务账号在创建时会自动获得服务代理角色,以确保您的 Google Cloud 服务正常运行。如果您将此角色替换为基本角色(Owner、Editor 或 Viewer),角色建议可能会建议您恢复最初的服务代理角色以移除多余的权限,即使服务代理角色拥有基本角色中不包含的权限也是如此。这些建议的子类型为 SERVICE_AGENT_WITH_DEFAULT_ROLE。它们可帮助您安全移除多余的权限,同时确保所有 Google Cloud 服务正常运行。

只有 SERVICE_AGENT_WITH_DEFAULT_ROLE 建议可能推荐具有的权限不属于当前角色的角色。

SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

如果 Google 管理的服务账号在创建时没有自动获得角色,则服务账号的建议将仅基于该服务账号使用的权限。这些建议的子类型为 SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

Security Command Center 中的角色建议

如果您拥有 Security Command Center 的高级层级,则可以在 Security Command Center 中查看角色建议的某些子类型作为发现结果。每个子类型都与一个检测器相关联:

建议子类型 发现结果类别
REMOVE_ROLE Unused IAM role
REPLACE_ROLE IAM role has excessive permissions
SERVICE_AGENT_WITH_DEFAULT_ROLE Service agent role replaced with basic role
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE Service agent granted basic role

如需详细了解如何在 Security Command Center 中查看角色建议,请参阅 Security Command Center 文档中的 IAM Recommender

角色建议示例

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

撤消现有角色

用户 my-user@example.com 被授予项目的 Browser 角色。Browser 角色包含六项权限,可让用户查看项目中的资源。不过,在过去 90 天内,my-user@example.com 尚未查看任何资源。

因此,IAM Recommender 会生成角色建议,建议您撤消 my-user@example.com 的 Browser 角色:

控制台

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "This role has not been used during the observation window.",
  "etag": "\"9fc3241da8bfab51\"",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REMOVE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fe512038-5455-49g1-8f9c-752e31c8c154",
  "description": "This role has not been used during the observation window.",
  "lastRefreshTime": "2022-05-20T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 6
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/browser"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/browser"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"9fc3241da8bfab51\"",
  "recommenderSubtype": "REMOVE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/86c14538-dcfd-4326-afe5-ee8ac921e06a"
    }
  ],
  "priority": "P4"
}

替换现有角色

服务账号被授予项目的 Editor 角色 (roles/editor)。 此基本角色包含 3000 多项权限,并且可授予针对项目的广泛访问权限。不过,在过去 90 天内,该服务账号仅使用了其中的少数权限。

因此,IAM Recommender 会生成角色建议,建议您撤消 Editor 角色,并将其替换为其他两个角色的组合,从而移除数千项多余的权限:

控制台

gcloud

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountUser"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "member": "user:my-user@example.com",
      "minimumObservationPeriodInDays": "0",
      "removedRole": "roles/editor",
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012"
    }
  },
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "etag": "\"0da9a354c2a83d96\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "priority": "P2",
  "recommenderSubtype": "REPLACE_ROLE",
  "stateInfo": {
    "state": "ACTIVE"
  }
}

REST

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/4637db3d-dba5-45eb-95ac-b4ee4b4cd14e",
  "description": "Replace the current role with smaller predefined roles to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 2998
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/iam.serviceAccountOwner"
            }
          },
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/storage.objectAdmin"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/editor"
            }
          }
        ]
      }
    ],
    "overview": {
      "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
      "member": "user:my-user@example.com",
      "removedRole": "roles/editor",
      "addedRoles": [
        "roles/iam.serviceAccountUser",
        "roles/storage.objectAdmin"
      ],
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"0da9a354c2a83d96\"",
  "recommenderSubtype": "REPLACE_ROLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/3d4ef3d6-bdf0-4330-975d-c65cb929c44d"
    }
  ],
  "priority": "P2"
}

创建自定义角色

用户 my-user@example.com 被授予项目的 Cloud Trace Admin 角色 (roles/cloudtrace.admin)。该角色包含 10 项以上的权限,但政策数据分析表明,在过去 90 天内,my-user@example.com 仅使用了其中 4 项权限。

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

控制台

gcloud

REPLACE_ROLE_CUSTOMIZABLE 子类型表示 IAM Recommender 建议创建具有所用权限的自定义角色。如需查看已使用的权限,请获取关联的政策数据分析

{
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "associatedResourceNames": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "path": "/iamPolicy/bindings/*/members/-",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "value": "user:my-user@example.com"
          },
          {
            "action": "remove",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            },
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "resourceType": "cloudresourcemanager.googleapis.com/Project"
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "etag": "\"c7f57a4725d32d66\"",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "originalContent": {},
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {},
      "revokedIamPermissionsCount": 1
    }
  },
  "priority": "P4",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ]
}

REST

REPLACE_ROLE_CUSTOMIZABLE 子类型表示 IAM Recommender 建议创建具有所用权限的自定义角色。如需查看已使用的权限,请获取关联的政策数据分析

{
  "name": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/ba1fc977-fddd-3856-a829-f69649ae8075",
  "description": "Replace the current role with a smaller role to cover the permissions needed.",
  "lastRefreshTime": "2022-06-22T07:00:00Z",
  "primaryImpact": {
    "category": "SECURITY",
    "securityProjection": {
      "details": {
        "revokedIamPermissionsCount": 1
      }
    }
  },
  "content": {
    "operationGroups": [
      {
        "operations": [
          {
            "action": "add",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/-",
            "value": "user:my-user@example.com",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.user"
            }
          },
          {
            "action": "remove",
            "resourceType": "cloudresourcemanager.googleapis.com/Project",
            "resource": "//cloudresourcemanager.googleapis.com/projects/123456789012",
            "path": "/iamPolicy/bindings/*/members/*",
            "pathFilters": {
              "/iamPolicy/bindings/*/condition/expression": "",
              "/iamPolicy/bindings/*/members/*": "user:my-user@example.com",
              "/iamPolicy/bindings/*/role": "roles/cloudtrace.admin"
            }
          }
        ]
      }
    ],
    "overview": {
      "minimumObservationPeriodInDays": "0"
    }
  },
  "stateInfo": {
    "state": "ACTIVE"
  },
  "etag": "\"c7f57a4725d32d66\"",
  "recommenderSubtype": "REPLACE_ROLE_CUSTOMIZABLE",
  "associatedInsights": [
    {
      "insight": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/2799dc04-b12e-4cf6-86aa-d81907d31f58"
    }
  ],
  "priority": "P4"
}

该角色建议还将建议另一个选项,即将现有角色替换为 Cloud Trace User 角色 (roles/cloudtrace.user)。此预定义角色包含的权限在数量上稍微少于 Cloud Trace Admin 角色。

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

服务账号被授予项目的 Editor 角色 (roles/editor)。 此基本角色包含 3000 多项权限,并且可授予针对项目的广泛访问权限。但是,政策数据分析表明,在过去 90 天内,该服务账号只使用了不到 10 项权限。

政策数据分析还突出显示了该服务账号将来可能需要使用的多项权限。IAM Recommender 使用机器学习确定这些权限。

IAM Recommender 会生成角色建议,建议您撤消 Editor 角色,并将其替换为 Storage Object Admin 角色 (roles/storage.objectAdmin),该角色可授予对 Cloud Storage 存储桶中对象的完全控制权。此更改移除了数千项多余的权限,同时仍然包含服务帐号使用的权限以及服务帐号将来可能需要的权限:

控制台

IAM Recommender 使用机器学习 图标来识别根据 IAM Recommender 的机器学习(而非权限使用情况)添加的权限。在此示例中,resourcemanager.projects.get 权限是基于机器学习推荐的:

gcloud

建议本身不会列出基于 IAM Recommender 的机器学习(而不是权限使用情况)添加的权限。而是列在与建议相关的政策数据分析中。数据分析的 inferredPermissions 字段中列出了所有基于机器学习的权限。在此示例中,resourcemanager.projects.get 权限是基于机器学习推荐的:

associatedRecommendations:
- recommendation: projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/0573b702-96a5-4622-a916-c762e7b0731f
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '5069'
  exercisedPermissions:
  - permission: storage.objects.create
  - permission: storage.objects.delete
  - permission: storage.objects.get
  - permission: storage.objects.list
  inferredPermissions:
  - permission: resourcemanager.projects.get
  member: serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
  role: roles/editor
description: 4 of the permissions in this role binding were used in the past 90 days.
etag: '"d3cdec23cc712bd0"'
insightSubtype: PERMISSIONS_USAGE
lastRefreshTime: '2020-07-11T07:00:00Z'
name: projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/0d3ce433-f067-4e78-b6ae-03d7d1f6f040
observationPeriod: 7776000s
stateInfo:
  state: ACTIVE
targetResources:
- //cloudresourcemanager.googleapis.com/projects/123456789012
severity: HIGH

如需了解如何获取政策数据分析,请参阅查看政策数据分析

REST

建议本身不会列出基于 IAM Recommender 的机器学习(而不是权限使用情况)添加的权限。而是列在与建议相关的政策数据分析中。数据分析的 inferredPermissions 字段中列出了所有基于机器学习的权限。在此示例中,resourcemanager.projects.get 权限是基于机器学习推荐的:

{
  "name": "projects/123456789012/locations/global/insightTypes/google.iam.policy.Insight/insights/07841f74-02ce-4de8-bbe6-fc4eabb68568",
  "description": "4 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/editor",
    "member": "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [
      {
        "permission": "storage.objects.create"
      },
      {
        "permission": "storage.objects.delete"
      },
      {
        "permission": "storage.objects.get"
      },
      {
        "permission": "storage.objects.list"
      }
    ],
    "inferredPermissions": [
      {
        "permission": "resourcemanager.projects.get"
      }
    ],
    "currentTotalPermissionsCount": "5069"
  },
  "lastRefreshTime": "2020-07-12T07:00:00Z",
  "observationPeriod": "7776000s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/123456789012/locations/global/recommenders/google.iam.policy.Recommender/recommendations/b1932220-867d-43d1-bd74-fb95876ab656"
    }
  ],
  "targetResources": [
    "//cloudresourcemanager.googleapis.com/projects/123456789012"
  ],
  "insightSubtype": "PERMISSIONS_USAGE",
  "etag": "\"d3cdec23cc712bd0\"",
  "severity": "HIGH"
}

如需了解如何获取政策数据分析,请参阅查看政策数据分析

后续步骤