本页介绍了如何查看、了解和应用 Cloud Storage 存储分区的 IAM 角色建议。角色建议可确保主账号仅拥有其实际需要的权限,从而帮助您强制执行最小权限原则。
准备工作
Enable the IAM and Recommender APIs.
确保您已在组织级层激活 Security Command Center 的高级层级。如需了解详情,请参阅结算问题。
了解角色建议。
设置身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需 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
查看您的建议:
如需列出 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 存储分区的“允许”政策分析。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-02-14。
-
Role Viewer (