查看并应用针对 Cloud Storage 存储分区的角色建议

本页面介绍了如何查看、了解和应用 IAM 角色 有关 Cloud Storage 存储分区的建议。角色建议帮助 您可以确保主账号拥有 只提供他们实际需要的权限

准备工作

所需 IAM 角色

如需获取管理存储桶级角色建议所需的权限, 请让管理员向您授予 项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理访问权限

这些预定义角色包含 管理存储桶级角色建议所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需管理存储桶级角色建议,您必须拥有以下权限:

  • 如需查看建议,请执行以下操作: <ph type="x-smartling-placeholder">
      </ph>
    • iam.roles.get
    • iam.roles.list
    • recommender.iamPolicyRecommendations.get
    • recommender.iamPolicyRecommendations.list
    • recommender.iamPolicyInsights.get
    • recommender.iamPolicyInsights.list
    • storage.buckets.getIamPolicy
  • 如需应用和拒绝建议,请执行以下操作: <ph type="x-smartling-placeholder">
      </ph>
    • recommender.iamPolicyRecommendations.update
    • storage.buckets.setIamPolicy

您也可以使用自定义角色或其他预定义角色来获取这些权限。

查看和应用建议

您可以使用 Google Cloud CLI 和 Recommender API。

控制台

  1. 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。

    进入“存储桶”

  2. 找到安全性数据分析列。如果此列 点击列显示选项 然后选择安全性数据分析

    安全性数据分析列会显示以下项目的所有政策数据分析摘要: 存储桶。每个摘要都会显示 的多余权限的总数 授予该存储桶的所有角色

    如果有针对 存储桶,则 Google Cloud 控制台会显示 有建议 图标。

  3. 如果有需要查看的建议,请点击政策数据分析摘要 打开安全建议窗格。此窗格列出了所有主账号 在存储桶中拥有角色的人员、其角色以及任何政策数据分析 与这些角色相关的功能

  4. 点击 有建议可用 图标即可获取有关建议的详细信息。

    如果建议替换角色,则角色建议始终会建议使用您可以应用的一组预定义角色

    在某些情况下,角色建议还会建议在项目级层创建新的自定义角色。如果自定义 Google Cloud 控制台会通过 默认值。要切换到预定义角色建议,请点击查看建议的预定义角色

  5. 请仔细查看建议,并务必了解它将如何改变主账号对 Google Cloud 资源的访问权限。除 如果是针对服务代理的建议,则建议永远不会提高 主账号的访问权限级别。如需了解详情,请参阅如何生成角色建议

    如需了解如何在控制台中查看建议,请参阅本页面上的查看建议

  6. 可选:如果建议创建自定义角色,请根据需要更新标题说明ID角色发布阶段

    如果您需要为自定义角色添加权限,请点击添加权限

    如果您需要从自定义角色中移除权限,请取消选中您要移除的每项权限对应的复选框。

  7. 针对建议采取措施。

    如需应用建议,请点击应用创建并应用。如果您在接下来的 90 天内改变主意,请使用建议历史记录还原您的选择。

    要忽略建议,请点击忽略,然后确认您的选择。只要建议仍然有效,您就可以恢复已忽略的建议

  8. 重复前面的步骤,直到您查看完所有建议。

gcloud

查看您的建议

如需列出存储桶级建议,请运行 gcloud recommender recommendations list 命令,以便仅过滤出 Cloud Storage 存储桶建议:

gcloud recommender recommendations list \
    --location=LOCATION \
    --recommender=google.iam.policy.Recommender \
    --project=PROJECT_ID \
    --format=json \
    --filter="recommenderSubtype:REMOVE_ROLE_STORAGE_BUCKET OR recommenderSubtype:REPLACE_ROLE_STORAGE_BUCKET"

替换以下值:

  • LOCATION:Cloud Storage 所在的区域 存储分区所在的位置,例如 usus-central1
  • PROJECT_ID:Google Cloud 项目的 ID 该文件包含您的 Cloud Storage 存储分区项目 ID 为 字母数字字符串,如 my-project

响应类似于以下示例。在此示例中 经过身份验证的用户 (allAuthenticatedUsers) 拥有该 Storage 旧版对象 对存储桶 mybucket 的 Reader 角色 (roles/storage.legacyObjectReader)。 不过,此角色在过去 90 天内未曾被使用过。如 因此,角色建议建议您撤消该角色:

[
  {
    "associatedInsights": [
      {
        "insight": "projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb"
      }
    ],
    "associatedResourceNames": [
      "//storage.googleapis.com/my-bucket"
    ],
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "allAuthenticatedUsers",
                "/iamPolicy/bindings/*/role": "roles/storage.legacyObjectReader"
              },
              "resource": "//storage.googleapis.com/my-bucket",
              "resourceType": "storage.googleapis.com/Bucket"
            }
          ]
        }
      ]
    },
    "description": "This role has not been used during the observation window.",
    "etag": "\"7caf4103d7669e12\"",
    "lastRefreshTime": "2022-05-24T07:00:00Z",
    "name": "projects/123456789012/locations/us/recommenders/google.iam.policy.Recommender/recommendations/fbc885b7-f0a8-47e6-90fe-6141aa2c4257",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 1
        }
      }
    },
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET",
    "stateInfo": {
      "state": "ACTIVE"
    }
  }
]

仔细查看每项建议,并思考它将如何改变主账号对 Google Cloud 资源的访问权限。如需了解如何使用 gcloud CLI 查看建议,请参阅本页面中的查看建议

如需应用建议,请执行以下操作

  1. 使用 gcloud recommender recommendations mark-claimed 命令将建议的状态更改为 CLAIMED,,这样可以防止建议在您应用它时发生变化:

    gcloud recommender recommendations mark-claimed \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    替换以下值:

    • RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的 name 字段末尾。例如,如果 name 字段是 projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, 建议 ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • LOCATION:Cloud Storage 所在的区域 存储桶所在的位置,例如 usus-central1
    • PROJECT_ID:Google Cloud 项目的 ID 该文件包含您的 Cloud Storage 存储分区项目 ID 为 字母数字字符串,如 my-project
    • FORMAT:响应的格式。请使用 jsonyaml
    • ETAG:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。请注意,该值可以包含引号。
    • STATE_METADATA:可选。以英文逗号分隔的键值对,其中包含您对建议所选择的元数据。例如 --state-metadata=reviewedBy=alice,priority=high。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    如果命令成功,响应会显示建议处于 CLAIMED 状态,如下例所示。为清楚起见,示例省略了大部分字段:

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET",
    "stateInfo": {
      "state": "CLAIMED"
    }
    ...
    
  2. 获取该存储桶的允许政策,然后 修改和设置允许政策,使其反映 建议。

  3. 如果能够应用建议,请将建议的状态更新为 SUCCEEDED;否则,请更新为 FAILED

    gcloud recommender recommendations COMMAND \
        RECOMMENDATION_ID \
        --location=LOCATION \
        --recommender=google.iam.policy.Recommender \
        --project=PROJECT_ID \
        --format=FORMAT \
        --etag=ETAG \
        --state-metadata=STATE_METADATA
    

    替换以下值:

    • COMMAND:如果能够应用建议,请使用 mark-succeeded;否则,请使用 mark-failed
    • RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的 name 字段末尾。例如,如果 name 字段是 projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f, 建议 ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • LOCATION:Cloud Storage 所在的区域 存储桶所在的位置,例如 usus-central1
    • PROJECT_ID:Google Cloud 项目的 ID 该文件包含您的 Cloud Storage 存储分区项目 ID 为 字母数字字符串,如 my-project
    • FORMAT:响应的格式。请使用 jsonyaml
    • ETAG:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。请注意,该值可以包含引号。
    • STATE_METADATA:可选。以英文逗号分隔的键值对,其中包含您对建议所选择的元数据。例如 --state-metadata=reviewedBy=alice,priority=high。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    例如,如果您将建议标记为成功,响应会显示建议处于 SUCCEEDED 状态。为清楚起见,此示例省略了大部分字段:

    ...
    "priority": "P1",
    "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET",
    "stateInfo": {
      "state": "SUCCEEDED"
    }
    ...
    

REST

以下说明假定您已通过身份验证并设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量。

查看您的建议

要列出 Cloud Storage 存储分区的所有可用建议,请使用 Recommender API recommendations.list 方法。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID: 包含您的 Cloud Storage 存储分区的 Google Cloud 项目。项目 ID 为 字母数字字符串,如 my-project
  • LOCATION:您的 Cloud Storage 存储分区所在的位置,例如 usus-central1.
  • PAGE_SIZE:可选。要从此请求返回的最大结果数。如果未指定,则服务器将决定要返回的结果数。如果建议的数量大于页面大小,则响应会包含用于检索下一页结果的分页令牌。
  • PAGE_TOKEN:可选。此方法之前的响应中返回的分页令牌。如果已指定,则建议列表将从上一个请求结束的位置开始。
  • PROJECT_ID:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如 my-project

HTTP 方法和网址:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations?filter=recommenderSubtype%20%3D%20REMOVE_ROLE_STORAGE_BUCKET%20OR%20recommenderSubtype%20%3D%20REPLACE_ROLE_STORAGE_BUCKET&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN

如需发送您的请求,请展开以下选项之一:

响应类似于以下示例。在此示例中 经过身份验证的用户 (allAuthenticatedUsers) 拥有该 Storage 旧版对象 对存储桶 mybucket 的 Reader 角色 (roles/storage.legacyObjectReader)。 不过,此角色在过去 90 天内未曾被使用过。如 因此,角色建议建议您撤消该角色:

{
  "recommendations": [
    "name": "projects/123456789012/locations/us/recommenders/google.iam.policy.Recommender/recommendations/fbc885b7-f0a8-47e6-90fe-6141aa2c4257",
    "description": "This role has not been used during the observation window.",
    "lastRefreshTime": "2022-05-24T07:00:00Z",
    "primaryImpact": {
      "category": "SECURITY",
      "securityProjection": {
        "details": {
          "revokedIamPermissionsCount": 1
        }
      }
    },
    "content": {
      "operationGroups": [
        {
          "operations": [
            {
              "action": "remove",
              "resourceType": "storage.googleapis.com/Bucket",
              "resource": "//storage.googleapis.com/my-bucket",
              "path": "/iamPolicy/bindings/*/members/*",
              "pathFilters": {
                "/iamPolicy/bindings/*/condition/expression": "",
                "/iamPolicy/bindings/*/members/*": "allAuthenticatedUsers",
                "/iamPolicy/bindings/*/role": "roles/storage.legacyObjectReader"
              }
            }
          ]
        }
      ]
    },
    "stateInfo": {
      "state": "ACTIVE"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET",
    "associatedInsights": [
      {
        "insight": "projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb"
      }
    ],
    "priority": "P1"
  ]
}

仔细查看每项建议,并思考它将如何改变主账号对 Google Cloud 资源的访问权限。如需了解如何通过 REST API 查看建议,请参阅本页面上的查看建议

如需应用建议,请执行以下操作

  1. 将建议标记为 CLAIMED

    如需将建议标记为 CLAIMED 以防止建议在您应用它时发生变化,请使用 Recommender API 的 recommendations.markClaimed 方法。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID: 包含您的 Cloud Storage 存储分区的 Google Cloud 项目。项目 ID 为 字母数字字符串,如 my-project
    • LOCATION:您的 Cloud Storage 存储桶所在的位置,例如 usus-central1.
    • RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的 name 字段末尾。例如,如果 name 字段为 projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • ETAG:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。使用反斜杠可转义引号,例如 "\"df7308cca9719dcc\""
    • STATE_METADATA:可选。包含键值对的对象,其中包含您对建议所选择的元数据。例如 {"reviewedBy": "alice", "priority": "high"}。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    HTTP 方法和网址:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markClaimed

    请求 JSON 正文:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    响应会显示 CLAIMED 状态的建议,如以下示例所示。为清楚起见,此示例省略了大部分字段:

    ...
    "stateInfo": {
      "state": "CLAIMED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET",
    ...
    

  2. 获取项目的允许政策,然后 修改允许政策,使其反映 建议。

  3. 如果能够应用建议,请将建议的状态更新为 SUCCEEDED;否则,请更新为 FAILED

    SUCCEEDED

    如需将建议标记为 SUCCEEDED,表明您能够应用该建议,请使用 Recommender API 的 recommendations.markSucceeded 方法。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID: 包含您的 Cloud Storage 存储分区的 Google Cloud 项目。项目 ID 为 字母数字字符串,如 my-project
    • LOCATION:您的 Cloud Storage 存储桶所在的位置,例如 usus-central1.
    • RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的 name 字段末尾。例如,如果 name 字段为 projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • ETAG:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。使用反斜杠可转义引号,例如 "\"df7308cca9719dcc\""
    • STATE_METADATA:可选。包含键值对的对象,其中包含您对建议所选择的元数据。例如 {"reviewedBy": "alice", "priority": "high"}。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    HTTP 方法和网址:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markSucceeded

    请求 JSON 正文:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    响应会显示 SUCCEEDED 状态的建议,如以下示例所示。为清楚起见,此示例省略了大部分字段:

    ...
    "stateInfo": {
      "state": "SUCCEEDED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET",
    ...
    

    FAILED

    如需将建议标记为 FAILED,表明您无法应用它,请使用 Recommender API 的 recommendations.markFailed 方法。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID: 包含您的 Cloud Storage 存储分区的 Google Cloud 项目。项目 ID 为 字母数字字符串,如 my-project
    • LOCATION:您的 Cloud Storage 存储桶所在的位置,例如 usus-central1.
    • RECOMMENDATION_ID:建议的唯一标识符。此值显示在建议的 name 字段末尾。例如,如果 name 字段为 projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f,则建议 ID 为 fb927dc1-9695-4436-0000-f0f285007c0f
    • ETAG:建议中 etag 字段的值,例如 "dd0686e7136a4cbb"。使用反斜杠可转义引号,例如 "\"df7308cca9719dcc\""
    • STATE_METADATA:可选。包含键值对的对象,其中包含您对建议所选择的元数据。例如 {"reviewedBy": "alice", "priority": "high"}。元数据会替换建议中的 stateInfo.stateMetadata 字段。

    HTTP 方法和网址:

    POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/recommenders/google.iam.policy.Recommender/recommendations/RECOMMENDATION_ID:markFailed

    请求 JSON 正文:

    {
      "etag": "ETAG",
      "stateMetadata": {
        "STATE_METADATA"
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    响应会显示 FAILED 状态的建议,如以下示例所示。为清楚起见,此示例省略了大部分字段:

    ...
    "stateInfo": {
      "state": "FAILED"
    },
    "etag": "\"7caf4103d7669e12\"",
    "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET",
    ...
    

了解建议

每条建议都包含可帮助您了解提出该建议原因的信息。

控制台

为帮助您了解获得此建议的原因 Google Cloud 控制台会显示主账号的权限使用情况, 与建议相关联的政策数据分析

为了帮助您了解采纳该建议的影响 Google Cloud 控制台还会显示使用颜色和符号编码的权限列表。 此列表会指出如果您应用建议,主账号的权限将如何变化。例如,Cloud Console 可能显示如下所示的列表:

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

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

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

  • 红色,带加号 :权限不属于该主账号的当前角色,但属于建议角色。此类权限仅出现在服务建议中 代理

  • 蓝色、带“机器学习”图标 :同时属于该主账号当前角色和建议角色的权限,并不是因为主账号在过去 90 天内使用过这些权限,而是因为 Recommender 已通过机器学习确定他们将来可能需要这些权限。

gcloud

每条建议都包含可帮助您了解提出该建议原因的信息。

如需详细了解建议的各个字段,请参阅 Recommendation 参考文档

如要查看此建议基于的权限使用情况,请查看与建议相关的政策数据分析。这些数据分析在 associatedInsights 字段中列出。如需查看与建议相关的政策数据分析,请执行以下操作:

  1. 复制关联的数据分析的 ID。该 ID 是 insight 字段中 insights/ 后面的所有内容。例如,如果 insight 字段显示 projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb, 数据分析 ID 为 7849add9-73c0-419e-b169-42b3671173fb
  2. 按照说明使用您复制的数据分析 ID 来获取政策数据分析

REST

每条建议都包含可帮助您了解提出该建议原因的信息。

如需详细了解建议的各个字段,请参阅 Recommendation 参考文档

如要查看此建议基于的权限使用情况,请查看与建议相关的政策数据分析。这些数据分析在 associatedInsights 字段中列出。如需查看与建议相关的政策数据分析,请执行以下操作:

  1. 复制关联的数据分析的 ID。该 ID 是 insight 字段中 insights/ 后面的所有内容。例如,如果 insight 字段显示 projects/123456789012/locations/us/insightTypes/google.iam.policy.Insight/insights/7849add9-73c0-419e-b169-42b3671173fb, 数据分析 ID 为 7849add9-73c0-419e-b169-42b3671173fb
  2. 按照说明使用您复制的数据分析 ID 来获取政策数据分析

查看、还原和恢复更改

在您应用或忽略项目级角色绑定的建议后,该操作会显示在建议历史记录中。

您可以在以下位置查看存储桶的建议历史记录: Google Cloud 控制台:

  1. 在 Google Cloud 控制台中,前往存储桶页面。

    进入“存储桶”

  2. 找到安全性数据分析列。如果此列 点击列显示选项 然后选择安全性数据分析

  3. 找到您要查看其建议历史记录的存储桶,然后 然后点击该行中的安全性数据分析摘要

  4. 在随即显示的安全建议窗格中,点击 建议历史记录标签页。

    Google Cloud 控制台会显示 角色建议。

  5. 要查看建议的详细信息,请点击 展开箭头。

    Google Cloud 控制台会显示所执行操作的详细信息 包括执行操作的主账号:

  6. 可选:如有必要,您可以还原建议,此操作会撤消 更改建议,或恢复 已关闭。

    如需还原之前应用的建议更改,请点击还原。Google Cloud 控制台会将对 主账号的角色该建议不再显示在 Google Cloud 控制台。

    要恢复已忽略的建议,请点击恢复。通过 IAM 页面中的 Google Cloud 控制台。系统不会更改任何角色或权限。

后续步骤