本頁說明如何查看、瞭解及套用 BigQuery 資料集的 IAM 角色建議。角色建議可協助您強制執行最低權限原則,確保主體只會有實際所需的權限。
事前準備
Enable the IAM and Recommender APIs.
請確認您已在機構或專案層級啟用Security Command Center 的進階或企業方案。詳情請參閱帳單問題。
瞭解角色建議。
設定驗證方法。
Select the tab for how you plan to use the samples on this page:
gcloud
-
專案的角色檢視者 (
roles/iam.roleViewer
) -
IAM 推薦功能管理員 (
roles/recommender.iamAdmin
) 專案 -
BigQuery 資料擁有者 (
roles/bigquery.dataOwner
) 資料集 -
如要查看建議:
-
專案的
iam.roles.get
-
專案的
iam.roles.list
-
專案的
recommender.iamPolicyRecommendations.get
-
專案的
recommender.iamPolicyRecommendations.list
-
專案的
recommender.iamPolicyInsights.get
-
專案的
recommender.iamPolicyInsights.list
-
bigquery.datasets.getIamPolicy
資料集
-
專案的
-
如何套用及略過建議:
-
專案的
recommender.iamPolicyRecommendations.update
-
bigquery.datasets.setIamPolicy
資料集
-
專案的
LOCATION
:Cloud Storage 資料集所在的區域,例如us
或us-central1
。PROJECT_ID
:包含 BigQuery 資料集的 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
:BigQuery 資料集所在的區域,例如us
或us-central1
。 -
PROJECT_ID
:包含 BigQuery 資料集的 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_BIGQUERY_DATASET", "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
:建議的專屬 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
:BigQuery 資料集所在的區域,例如us
或us-central1
。 -
PROJECT_ID
:包含 BigQuery 資料集的 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_BIGQUERY_DATASET", "stateInfo": { "state": "SUCCEEDED" } ...
-
PROJECT_ID
:包含 BigQuery 資料集的專案 ID。Google Cloud 專案 ID 為英數字元字串,例如my-project
。LOCATION
:BigQuery 資料集所在的區域,例如us
或us-central1
。-
PAGE_SIZE
:選用。這項要求傳回的結果數上限。如未指定,伺服器會決定要傳回的結果數量。如果建議數量大於頁面大小,回應會包含分頁符記,可用於擷取下一頁結果。 -
PAGE_TOKEN
:選用。這個方法先前回應中傳回的分頁符記。如果指定,建議清單會從上一個要求結束的位置開始。 PROJECT_ID
:您的 Google Cloud 專案 ID。專案 ID 為英數字串,例如my-project
。將建議標示為
CLAIMED
:如要將建議標示為
CLAIMED
,防止建議在您套用時變更,請使用 Recommender API 的recommendations.markClaimed
方法。使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:包含 BigQuery 資料集的專案 ID。Google Cloud 專案 ID 為英數字元字串,例如my-project
。LOCATION
:BigQuery 資料集所在的區域,例如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_BIGQUERY_DATASET", ...
如果可以套用建議,請將建議狀態更新為
SUCCEEDED
;如果無法套用建議,請更新為FAILED
:SUCCEEDED
如要將建議標示為
SUCCEEDED
,表示您已套用建議,請使用 Recommender API 的recommendations.markSucceeded
方法。使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:包含 BigQuery 資料集的專案 ID。Google Cloud 專案 ID 為英數字元字串,例如my-project
。LOCATION
:BigQuery 資料集所在的區域,例如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_BIGQUERY_DATASET", ...
FAILED
如要將建議標示為
FAILED
,表示您無法套用建議,請使用 Recommender API 的recommendations.markFailed
方法。使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:包含 BigQuery 資料集的Google Cloud 專案 ID。專案 ID 為英數字元字串,例如my-project
。LOCATION
:BigQuery 資料集所在的區域,例如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_BIGQUERY_DATASET", ...
- 複製相關洞察資料的 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 取得政策洞察。
- 進一步瞭解建議工具。
- 瞭解如何使用 BigQuery 資料集的允許政策洞察。
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 角色
如要取得管理資料集層級角色建議所需的權限,請要求管理員授予下列 IAM 角色:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義角色具備管理資料集層級角色建議所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要管理資料集層級的角色建議,您必須具備下列權限:
查看及套用建議
您可以使用 Google Cloud CLI 和 Recommender API,查看及套用資料集層級的角色建議。
gcloud
查看建議:
如要列出資料集層級的建議,請執行
gcloud recommender recommendations list
指令,只篩選 BigQuery 資料集建議:gcloud recommender recommendations list \ --location=LOCATION \ --recommender=google.iam.policy.Recommender \ --project=PROJECT_ID \ --format=json \ --filter="recommenderSubtype:REMOVE_ROLE_BIGQUERY_DATASET OR recommenderSubtype:REPLACE_ROLE_BIGQUERY_DATASET"
替換下列值:
回應類似下列範例。在本範例中,專案
my-project
(projectEditor:my-project
) 中具有編輯者角色的所有使用者,在資料集dataset-1
中都具有 BigQuery 資料編輯者角色 (roles/bigquery.dataEditor
)。不過,過去 90 天內沒有人使用這個角色。因此,角色建議會建議您撤銷角色:[ { "associatedInsights": [ { "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282" } ], "content": { "operationGroups": [ { "operations": [ { "action": "remove", "path": "/iamPolicy/bindings/*/members/*", "pathFilters": { "/iamPolicy/bindings/*/condition/expression": "", "/iamPolicy/bindings/*/members/*": "projectEditor:my-project", "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor" }, "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1", "resourceType": "bigquery.googleapis.com/Dataset" } ] } ], "overview": { "addedRoles": [], "member": "projectEditor:my-project", "minimumObservationPeriodInDays": "0", "removedRole": "roles/bigquery.dataEditor", "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" } }, "description": "This role has not been used during the observation window.", "etag": "\"3b123bc08d028128\"", "lastRefreshTime": "2024-02-04T08:00:00Z", "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288", "primaryImpact": { "category": "SECURITY", "securityProjection": { "details": { "revokedIamPermissionsCount": 37 } } }, "priority": "P4", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "ACTIVE" }, "targetResources": [ "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" ] }, { "associatedInsights": [ { "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/9d11057e-9c71-410f-ad55-fc82d87761d0" } ], "content": { "operationGroups": [ { "operations": [ { "action": "remove", "path": "/iamPolicy/bindings/*/members/*", "pathFilters": { "/iamPolicy/bindings/*/condition/expression": "", "/iamPolicy/bindings/*/members/*": "user:alicexz@google.com", "/iamPolicy/bindings/*/role": "roles/bigquery.dataOwner" }, "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1", "resourceType": "bigquery.googleapis.com/Dataset" } ] } ], "overview": { "addedRoles": [], "member": "user:alicexz@google.com", "minimumObservationPeriodInDays": "0", "removedRole": "roles/bigquery.dataOwner", "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" } }, "description": "This role has not been used during the observation window.", "etag": "\"1da285f7aa6438f1\"", "lastRefreshTime": "2024-02-04T08:00:00Z", "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/56013294-cf81-402a-8cde-25489545777c", "primaryImpact": { "category": "SECURITY", "securityProjection": { "details": { "revokedIamPermissionsCount": 64 } } }, "priority": "P4", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "ACTIVE" }, "targetResources": [ "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" ] } ]
請仔細查看每項建議,並考量這些建議會如何變更主體對 Google Cloud 資源的存取權。如要瞭解如何透過 gcloud CLI 查看建議,請參閱本頁的「查看建議」一節。
如何套用最佳化建議:
REST
查看建議:
如要列出 BigQuery 資料集的所有可用建議,請使用 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_BIGQUERY_DATASET%20OR%20recommenderSubtype%20%3D%20REPLACE_ROLE_BIGQUERY_DATASET&pageSize=PAGE_SIZE&pageToken=PAGE_TOKEN
如要傳送要求,請展開以下其中一個選項:
回應類似下列範例。在本範例中,專案 `my-project` (
projectEditor:my-project
) 中具有編輯者角色的所有使用者,在資料集dataset-1
中都具有 BigQuery 資料編輯者角色 (roles/bigquery.dataEditor
)。不過,過去 90 天內沒有人使用這個角色。因此,角色建議會建議您撤銷角色:{ "recommendations": [ { "name": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/0e9831fe-6810-476b-b14d-2b64bda17288", "description": "This role has not been used during the observation window.", "lastRefreshTime": "2024-02-02T08:00:00Z", "primaryImpact": { "category": "SECURITY", "securityProjection": { "details": { "revokedIamPermissionsCount": 37 } } }, "content": { "operationGroups": [ { "operations": [ { "action": "remove", "resourceType": "bigquery.googleapis.com/Dataset", "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1", "path": "/iamPolicy/bindings/*/members/*", "pathFilters": { "/iamPolicy/bindings/*/condition/expression": "", "/iamPolicy/bindings/*/members/*": "projectEditor:my-project", "/iamPolicy/bindings/*/role": "roles/bigquery.dataEditor" } } ] } ], "overview": { "resource": "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1", "member": "projectEditor:my-project", "removedRole": "roles/bigquery.dataEditor", "addedRoles": [], "minimumObservationPeriodInDays": "0" } }, "stateInfo": { "state": "ACTIVE" }, "etag": "\"d008ad3780bad5e0\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "associatedInsights": [ { "insight": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/984eccca-0241-472f-baab-2557dd0d7282" } ], "priority": "P4", "targetResources": [ "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1" ] } ] }
請仔細查看每項建議,並考量這些建議會如何變更主體對 Google Cloud 資源的存取權。如要瞭解如何透過 REST API 查看建議,請參閱本頁的「查看建議」一節。
如何套用最佳化建議:
瞭解最佳化建議
每項建議都會附上相關資訊,協助您瞭解提出建議的原因。
如要瞭解建議的欄位,請參閱
Recommendation
參考資料。如要查看這項建議的依據權限用量,請查看與建議相關聯的政策洞察。這些洞察資料會列在
associatedInsights
欄位中。如要查看與建議相關的政策洞察資料,請按照下列步驟操作:後續步驟
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-15 (世界標準時間)。
-
專案的角色檢視者 (