本页介绍了如何查看、了解和应用 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
:包含您的 Cloud Storage 存储分区的 Google Cloud 项目的 ID。项目 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
:包含您的 Cloud Storage 存储分区的 Google Cloud 项目的 ID。项目 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。项目 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
) 在存储桶 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 查看建议,请参阅本页面上的查看建议。
如需应用建议,请执行以下操作:
将建议标记为
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 存储分区的“允许”政策分析。