本頁說明如何查看、瞭解及套用 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
-
如要查看建議:
-
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 控制台,前往「Cloud Storage bucket」頁面。
找出「安全性洞察資料」欄。如果沒有看到這個資料欄,請按一下「資料欄顯示選項」圖示
,然後選取「安全性深入分析」。「安全性洞察」欄會顯示值區的所有政策洞察摘要。每個摘要都會指出該值區中所有角色獲得的過多權限總數。
如果系統提供建議來解決任何洞察資料, Google Cloud 控制台會顯示「有可用的建議」
圖示。如有建議可供查看,請按一下政策洞察摘要,開啟「安全性建議」窗格。這個窗格會列出 bucket 中具備角色的所有主體、這些主體的角色,以及與這些角色相關聯的任何政策洞察。
按一下「有可用的建議」
圖示,即可查看建議詳細資料。如果建議是更換角色,角色建議一律會提供一組可套用的預先定義角色。
在某些情況下,角色建議也會建議在專案層級建立新的自訂角色。如有自訂角色建議, Google Cloud 控制台預設會顯示。如要切換至預先定義角色建議,請按一下「查看建議的預先定義角色」。
請仔細查看建議,並確認您瞭解這項建議會如何變更主體對 Google Cloud 資源的存取權。除非是服務代理人的建議,否則建議絕不會提高主體的存取權層級。詳情請參閱「角色建議的產生方式」。
如要瞭解如何在控制台中查看建議,請參閱本頁的「查看建議」一節。
選用:如果建議是建立自訂角色,請視需要更新「名稱」、「說明」、「ID」和「角色發布階段」。
如要為自訂角色新增權限,請按一下「新增權限」。
如要從自訂角色移除權限,請取消勾選要移除的每項權限。
根據建議採取行動。
如要套用建議,請按一下「套用」或「建立並套用」。如果之後 90 天內改變心意,可以使用最佳化建議記錄還原選擇。
如要關閉最佳化建議,請按一下「關閉」,然後確認選擇。 只要最佳化建議仍有效,您就能還原已略過的建議。
重複上述步驟,直到查看完所有建議為止。
LOCATION
:Cloud Storage bucket 所在的區域,例如us
或us-central1
。PROJECT_ID
:包含 Cloud Storage 值區的 Google Cloud 專案 ID。專案 ID 為英數字元字串,例如my-project
。使用
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
:建議的專屬 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 bucket 所在的區域,例如us
或us-central1
。 -
PROJECT_ID
:包含 Cloud Storage bucket 的 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" } ...
-
取得 bucket 的允許政策,然後修改並設定允許政策,以反映建議。
如果可以套用建議,請將建議狀態更新為
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
:建議的專屬 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 bucket 所在的區域,例如us
或us-central1
。 -
PROJECT_ID
:包含 Cloud Storage bucket 的 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" } ...
-
PROJECT_ID
:包含 Cloud Storage bucket 的Google Cloud 專案 ID。專案 ID 為英數字元字串,例如my-project
。LOCATION
:Cloud Storage bucket 所在的區域,例如us
或us-central1
。-
PAGE_SIZE
:選用。這項要求傳回的結果數上限。如未指定,伺服器會決定要傳回的結果數量。如果建議數量大於頁面大小,回應會包含分頁符記,可用於擷取下一頁結果。 -
PAGE_TOKEN
:選用。這個方法先前回應中傳回的分頁符記。如果指定,建議清單會從上一個要求結束的位置開始。 PROJECT_ID
:您的 Google Cloud 專案 ID。專案 ID 為英數字串,例如my-project
。將建議標示為
CLAIMED
:如要將建議標示為
CLAIMED
,防止建議在您套用時變更,請使用 Recommender API 的recommendations.markClaimed
方法。使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:包含 Cloud Storage bucket 的Google Cloud 專案 ID。專案 ID 為英數字元字串,例如my-project
。LOCATION
:Cloud Storage 值區所在的區域,例如us
或us-central1
。RECOMMENDATION_ID
:建議的專屬 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 bucket 的Google Cloud 專案 ID。專案 ID 為英數字元字串,例如my-project
。LOCATION
:Cloud Storage 值區所在的區域,例如us
或us-central1
。RECOMMENDATION_ID
:建議的專屬 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 bucket 的Google Cloud 專案 ID。專案 ID 為英數字元字串,例如my-project
。LOCATION
:Cloud Storage 值區所在的區域,例如us
或us-central1
。RECOMMENDATION_ID
:建議的專屬 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", ...
- 複製相關洞察資料的 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 取得政策洞察。
- 複製相關洞察資料的 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 控制台的「Bucket」頁面。
找出「安全性洞察資料」欄。如果沒有看到這個資料欄,請按一下「資料欄顯示選項」圖示
,然後選取「安全性深入分析」。找出要查看建議記錄的 bucket,然後點選該列中的安全性洞察摘要。
在隨即顯示的「安全性建議」窗格中,按一下「建議記錄」分頁標籤。
Google Cloud 控制台會顯示角色建議的先前動作清單。
如要查看建議的詳細資料,請按一下
展開箭頭。Google Cloud 控制台會顯示所採取動作的詳細資料,包括採取動作的主體:
選用:如有需要,您可以還原最佳化建議,撤銷建議中的變更,或還原您略過的最佳化建議。
如要還原先前套用的建議變更,請按一下「還原」。 Google Cloud 控制台會還原主體角色的變更。Google Cloud 控制台不會再顯示這項最佳化建議。
如要還原已關閉的建議,請按一下「還原」。建議會顯示在Google Cloud 控制台的「IAM」IAM頁面。角色或權限不會變更。
- 進一步瞭解建議工具。
- 瞭解如何使用 Cloud Storage 值區的允許政策洞察。
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 的憑證。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
必要 IAM 角色
如要取得管理 bucket 層級角色建議所需的權限,請要求管理員授予您專案的下列 IAM 角色:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義角色具備管理 bucket 層級角色建議所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要管理 bucket 層級的角色建議,您必須具備下列權限:
查看及套用建議
您可以使用 Google Cloud CLI 和 Recommender API,查看及套用 bucket 層級的角色建議。
控制台
gcloud
查看建議:
如要列出 bucket 層級的建議,請執行
gcloud recommender recommendations list
指令,只篩選 Cloud Storage bucket 建議: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"
替換下列值:
回應類似下列範例。在本例中,所有已通過驗證的使用者 (
allAuthenticatedUsers
) 在 bucketmybucket
上都具有 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 查看建議,請參閱本頁的「查看建議」一節。
如何套用最佳化建議:
REST
查看建議:
如要列出 Cloud Storage 值區的所有可用建議,請使用 Recommender API 的
recommendations.list
方法。使用任何要求資料之前,請先替換以下項目:
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
) 在 bucketmybucket
上都具有 Storage 舊版物件讀取者角色 (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 查看建議,請參閱本頁的「查看建議」一節。
如何套用最佳化建議:
瞭解最佳化建議
每項建議都會附上相關資訊,協助您瞭解提出建議的原因。
控制台
為協助您瞭解系統提出建議的原因,Google Cloud 控制台會顯示主體的權限用量,這是由與建議相關聯的政策洞察回報。
為協助您瞭解套用建議的影響,Google Cloud 控制台也會顯示以顏色和符號編碼的權限清單。這份清單會顯示套用建議後,主體的權限會如何變更。例如,可能會顯示如下清單:
各顏色和符號代表的權限類型如下:
gcloud
每項建議都會附上相關資訊,協助您瞭解提出建議的原因。
如要瞭解建議的欄位,請參閱
Recommendation
參考資料。如要查看這項建議的依據權限用量,請查看與建議相關聯的政策洞察。這些洞察資料會列在
associatedInsights
欄位中。如要查看與建議相關的政策洞察資料,請按照下列步驟操作:REST
每項建議都會附上相關資訊,協助您瞭解提出建議的原因。
如要瞭解建議的欄位,請參閱
Recommendation
參考資料。如要查看這項建議的依據權限用量,請查看與建議相關聯的政策洞察。這些洞察資料會列在
associatedInsights
欄位中。如要查看與建議相關的政策洞察資料,請按照下列步驟操作:查看、還原及復原變更
套用或關閉專案層級角色繫結的建議後,該動作會顯示在建議記錄中。
您可以在Google Cloud 控制台中查看 bucket 的建議記錄:
後續步驟
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-15 (世界標準時間)。
-
如要查看建議: