角色建议概览

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

角色建议概览

角色建议由 IAM Recommender 生成。通过 IAM 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 虚拟机实例,这需要不同的权限,具体取决于 更改哪些设置不过,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 会生成角色建议来替换角色 提供建议的角色此建议的角色可能是新的自定义角色、现有的自定义角色,或者一个或多个预定义角色。除了针对 服务代理,角色推荐绝不会将 用于提高主账号访问权限级别的更改。

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

此外,系统并不会为所有 IAM 生成角色建议 授予主账号的各种角色如需详细了解为何要分配某个角色 可能没有角色建议,请参阅关于此内容的可用性 页面。

观察期

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

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

IAM Recommender 也不会开始生成角色建议 直到获得特定天数的权限使用情况数据为止。此时长 称为最短观察期。默认情况下, 观察期为 90 天,但对于项目级角色 您可以手动将其设置为 30 天或 60 天。有关详情,请参阅 配置角色建议生成如果您将 您将获得 但建议的准确性可能会降低 会受到影响。

如果已经超过最短观察期但不到 自授予角色起 90 天,观察期 是自授予相应角色以来所经历的时长。

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

当 IAM Recommender 建议替换某个角色时, 通常会建议一个现有的自定义角色 这些角色似乎更适合主账号的需求。

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

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

如果您希望使用为您维护的角色,请选择预定义的 角色。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 为角色生成政策数据分析, 必须为 true:

  • 授予该角色的 IAM 允许政策必须是 附加到以下资源之一:

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

    IAM Recommender 仅为角色生成政策数据分析 授予的资源访问权限

  • 授予该角色的角色绑定不得包含条件。通过 IAM Recommender 不会为以下内容生成政策数据分析: 条件角色绑定

  • 被授予该角色的主账号必须是下列其中一项 主账号类型:

    如需详细了解主账号类型,请参阅主账号 标识符

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

系统会根据您最近的权限,每天刷新现有的政策数据分析 。然而,政策数据洞见所依据的数据通常存在延迟 最多比实际使用时间晚两天。

横向移动数据分析可用性

系统会为在服务账号上授予的角色生成横向移动数据分析 以下资源:

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

角色建议可用性

为了让 IAM Recommender 为某个角色生成角色建议, 必须满足以下条件:

如果某个角色的授予时间过近或没有任何数据分析, Google Cloud 控制台中的“已分析的权限数量”列显示了 图标。

在某些情况下,IAM Recommender 不会生成角色 即使您已过了足够长的时间,并且该角色 并生成相关的数据分析导致这种情况的原因可能如下:

  • 没有比当前角色更合适的预定义 IAM 角色。如果主账号已有 或包含较少权限的角色 那么 IAM Recommender 无法 建议的一个不同的预定义角色

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

  • 主账号是服务代理,且角色不是 基本角色。IAM Recommender 仅 建议服务代理具有基本角色(Owner、Editor 或 Viewer)。如需了解详情,请参阅针对服务的角色建议 代理

  • 没有其他主账号拥有项目的 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 替换服务代理的 Owner、Editor 或 Viewer 的建议 与自动授予服务账号的角色相关联 创建 Deployment如需了解详情,请参阅 针对服务代理的角色建议
SERVICE_AGENT_WITHOUT_DEFAULT_ROLE 替换服务代理的 Owner、Editor 或 Viewer 的建议 授予相关权限。如需了解详情,请参阅 针对服务代理的角色建议

针对服务代理的角色建议

对于服务代理, IAM Recommender 仅针对基本配置 角色(Owner、Editor 或 Viewer)。

服务代理的建议分为两种推荐子类型。

SERVICE_AGENT_WITH_DEFAULT_ROLE

在创建服务代理时,系统会自动向某些服务代理授予 角色来确保您的 Google Cloud 服务正常运行 正确。如果您将此角色替换为基本角色(Owner、Editor 或 Viewer), 一项角色建议可能会建议您恢复原始服务代理 移除多余的权限,即使服务代理角色具有 非基本角色的权限。这些建议具有 子类型 SERVICE_AGENT_WITH_DEFAULT_ROLE。它们可以帮助您安全移除多余展示位置 同时确保所有 Google Cloud 服务都能正常运行。

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

SERVICE_AGENT_WITHOUT_DEFAULT_ROLE

如果服务代理在创建时未自动授予角色, 针对服务代理的建议完全基于 将由服务代理使用这些建议的子类型为 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 文档。

价格

针对以下内容的建议:项目级、文件夹级和组织级 基本角色都是免费的。

以下高级 IAM Recommender 功能需要 在组织级别激活 Security Command Center 高级层级

  • 针对非基本角色的建议
  • 针对在组织以外的资源上授予的角色的建议。 文件夹和项目,例如针对已授予角色的建议 在 Cloud Storage 存储分区中
  • 提供自定义角色的建议
  • 政策数据分析
  • 横向移动数据分析

如需了解详情,请参阅结算问题

角色建议示例

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

撤消现有角色

用户 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 建议创建一个自定义角色,并使用 权限。如需查看已使用的权限,请 [获取关联的政策 Insights][get-policy-insight]。

{
  "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 建议创建一个自定义角色,并使用 权限。如需查看已使用的权限,请 [获取关联的政策 Insights][get-policy-insight]。

{
  "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

如需了解如何获取政策数据分析,请参阅 [查看政策数据分析][get-policy-insight]。

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"
}

如需了解如何获取政策数据分析,请参阅 [查看政策数据分析][get-policy-insight]。

后续步骤