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

本页面介绍如何查看、了解和应用针对 Cloud Storage 存储分区的 IAM 角色建议。角色建议可确保主帐号只拥有其实际所需的权限,从而帮助您实施最小权限原则。

准备工作

  • 启用 IAM and Recommender API。

    启用 API

  • 了解角色建议

所需 IAM 角色

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

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

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

所需权限

如需管理存储桶级角色建议,您需要具备以下权限:

  • 如需查看建议,请执行以下操作:
    • iam.roles.get
    • iam.roles.list
    • recommender.iamPolicyRecommendations.get
    • recommender.iamPolicyRecommendations.list
    • recommender.iamPolicyInsights.get
    • recommender.iamPolicyInsights.list
    • storage.buckets.getIamPolicy
  • 如需采纳和拒绝建议,请执行以下操作:
    • 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 资源的访问权限。除了 Google 管理的服务账号的建议以外,建议绝不会再提高主账号的访问权限级别。如需了解详情,请参阅如何生成角色建议

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

  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:包含您的 Cloud Storage 存储分区的 Google Cloud 项目的 ID。项目 ID 是字母数字字符串,如 my-project

响应类似于以下示例。在此示例中,所有经过身份验证的用户 (allAuthenticatedUsers) 在存储桶 mybucket 上都具有 Storage Legacy Object 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:包含您的 Cloud Storage 存储分区的 Google Cloud 项目的 ID。项目 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:包含您的 Cloud Storage 存储分区的 Google Cloud 项目的 ID。项目 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。项目 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) 在存储桶 mybucket 上都具有 Storage Legacy Object 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。项目 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。项目 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。项目 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 天内未使用过这些权限。

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

  • 蓝色、带“机器学习”图标 :同时属于该主账号当前角色和建议角色的权限,并不是因为主账号在过去 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 控制台中将不再显示该建议。

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

后续步骤