本页介绍了如何查看、了解和应用 Cloud Storage 存储桶的 IAM 角色建议。角色建议可确保主账号仅拥有其实际需要的权限,从而帮助您强制执行最小权限原则。
准备工作
Enable the IAM and Recommender APIs.
确保您已在组织级别激活高级层级: Security Command Center。有关详情,请参阅结算 问题。
了解角色建议。
所需 IAM 角色
如需获取管理存储桶级角色建议所需的权限, 请让管理员授予您 项目的以下 IAM 角色:
-
Role Viewer (
roles/iam.roleViewer
) -
Storage Admin (
roles/storage.admin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含管理存储桶级角色建议所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需管理存储桶级角色建议,您必须拥有以下权限:
-
如需查看建议,请执行以下操作:
-
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 查看和应用分桶级角色建议。
控制台
在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
找到安全性数据分析列。如果该列未显示,请点击列显示选项
,然后选择安全分析。安全性数据分析列显示存储桶的所有政策数据分析摘要。每个摘要都会显示 的多余权限的总数 授予该存储桶的所有角色
如果有建议可用于处理存储桶的任何数据分析,Google Cloud 控制台会显示有建议可用 图标。
如果有需要查看的建议,请点击政策数据分析摘要 打开安全建议窗格。此窗格列出了所有主账号 在存储桶中拥有角色的人员、其角色以及任何政策数据分析 与这些角色相关的功能
点击 有建议可用 图标即可获取有关建议的详细信息。
如果建议替换角色,则角色建议始终会建议使用您可以应用的一组预定义角色。
在某些情况下,角色建议还会建议在项目级层创建新的自定义角色。如果自定义 有可用的角色建议时,Google Cloud 控制台会 默认值。要切换到预定义角色建议,请点击查看建议的预定义角色。
请仔细查看建议,并务必了解它将如何改变主账号对 Google Cloud 资源的访问权限。除 如果是针对服务代理的建议,则建议永远不会提高 主账号的访问权限级别。如需了解详情,请参阅如何生成角色建议。
如需了解如何在控制台中查看建议,请参阅本页面上的查看建议。
可选:如果建议创建自定义角色,请根据需要更新标题、说明、ID、角色发布阶段。
如果您需要为自定义角色添加权限,请点击添加权限。
如果您需要从自定义角色中移除权限,请取消选中您要移除的每项权限对应的复选框。
针对建议采取措施。
如需应用建议,请点击应用或创建并应用。如果您在接下来的 90 天内改变主意,请使用建议历史记录还原您的选择。
要忽略建议,请点击忽略,然后确认您的选择。只要建议仍然有效,您就可以恢复已忽略的建议。
重复前面的步骤,直到您查看完所有建议。
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 所在的区域 例如us
或us-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 查看建议,请参阅本页面中的查看建议。
如需应用建议,请执行以下操作:
使用
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 所在的区域 存储桶所在的位置,例如us
或us-central1
。 -
PROJECT_ID
:Google Cloud 项目的 ID 该文件包含您的 Cloud Storage 存储分区项目 ID 是字母数字字符串,例如my-project
。 -
FORMAT
:响应的格式。请使用json
或yaml
。 -
ETAG
:建议中etag
字段的值,例如"dd0686e7136a4cbb"
。请注意,该值可以包含引号。 -
STATE_METADATA
:可选。以英文逗号分隔的键值对,其中包含您对建议所选择的元数据。例如--state-metadata=reviewedBy=alice,priority=high
。元数据会替换建议中的stateInfo.stateMetadata
字段。
如果命令成功,响应会显示建议处于
CLAIMED
状态,如下例所示。为清楚起见,示例省略了大部分字段:... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_STORAGE_BUCKET", "stateInfo": { "state": "CLAIMED" } ...
-
获取该存储桶的允许政策,然后 修改和设置允许政策,使其反映 建议。
如果能够应用建议,请将建议的状态更新为
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 所在的区域 存储桶所在的位置,例如us
或us-central1
。 -
PROJECT_ID
:Google Cloud 项目的 ID 该文件包含您的 Cloud Storage 存储分区项目 ID 是字母数字字符串,例如my-project
。 -
FORMAT
:响应的格式。请使用json
或yaml
。 -
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 存储桶所在的区域,例如us
或us-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 查看建议,请参阅本页面上的查看建议。
如需应用建议,请执行以下操作:
将建议标记为
CLAIMED
:如需将建议标记为
CLAIMED
(这样可以防止建议在您应用它时发生变化),请使用 Recommender API 的recommendations.markClaimed
方法。在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:包含您的 Cloud Storage 存储桶的 Google Cloud 项目的 ID。项目 ID 是字母数字字符串,例如my-project
。LOCATION
:Cloud Storage 存储桶所在的区域,例如us
或us-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", ...
如果能够应用建议,请将建议的状态更新为
SUCCEEDED
;否则,请更新为FAILED
:SUCCEEDED
如需将建议标记为
SUCCEEDED
,表明您可以应用它,请使用 Recommender API 的recommendations.markSucceeded
方法。在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:包含您的 Cloud Storage 存储桶的 Google Cloud 项目的 ID。项目 ID 是字母数字字符串,例如my-project
。LOCATION
:Cloud Storage 存储桶所在的区域,例如us
或us-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 存储桶所在的区域,例如us
或us-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 可能显示如下所示的列表:
与每种颜色和符号相关联的权限类型如下所示:
gcloud
每条建议都包含可帮助您了解提出该建议原因的信息。
如需详细了解建议的各个字段,请参阅 Recommendation
参考文档。
如要查看此建议基于的权限使用情况,请查看与建议相关的政策数据分析。这些数据分析在 associatedInsights
字段中列出。如需查看与建议相关的政策数据分析,请执行以下操作:
- 复制关联的数据分析的 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
。 - 按照说明使用您复制的数据分析 ID 来获取政策数据分析。
REST
每条建议都包含可帮助您了解提出该建议原因的信息。
如需详细了解建议的各个字段,请参阅 Recommendation
参考文档。
如要查看此建议基于的权限使用情况,请查看与建议相关的政策数据分析。这些数据分析在 associatedInsights
字段中列出。如需查看与建议相关的政策数据分析,请执行以下操作:
- 复制关联的数据分析的 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
。 - 按照说明使用您复制的数据分析 ID 来获取政策数据分析。
查看、还原和恢复更改
在您应用或忽略项目级角色绑定的建议后,该操作会显示在建议历史记录中。
您可以在 Google Cloud 控制台中查看存储桶的建议历史记录:
在 Google Cloud 控制台中,前往存储桶页面。
找到安全性数据分析列。如果此列 点击列显示选项
然后选择安全性数据分析。找到您要查看建议历史记录的令牌桶,然后点击该行中的安全分析摘要。
在随即显示的安全建议窗格中,点击 建议历史记录标签页。
Google Cloud 控制台会显示 角色建议。
要查看建议的详细信息,请点击
展开箭头。Google Cloud 控制台会显示所执行操作的详细信息 包括执行操作的主账号:
可选:如有必要,您可以还原建议,此操作会撤消 更改建议,或恢复 已关闭。
如需还原之前应用的建议更改,请点击还原。Google Cloud 控制台会还原对主账号的角色所做的更改。该建议不再显示在 Google Cloud 控制台中。
要恢复已忽略的建议,请点击恢复。该建议会显示在 Google Cloud 控制台中的 IAM 页面上。系统不会更改任何角色或权限。
后续步骤
- 详细了解 Recommender。
- 了解如何使用允许对 Cloud Storage 进行政策数据分析 存储分区。