本頁說明如何查看、瞭解及套用 BigQuery 資料集的 IAM 角色建議。角色建議可確保主體只會有實際所需的權限,協助您強制執行最低權限原則。
事前準備
Enable the IAM and Recommender APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.請確認您已在機構或專案層級啟用Security Command Center 的進階或企業方案。詳情請參閱帳單問題。
瞭解角色建議。
設定驗證方法。
Select the tab for how you plan to use the samples on this page:
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 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
必要 IAM 角色
如要取得管理資料集層級角色建議所需的權限,請要求管理員授予下列 IAM 角色:
-
專案的角色檢視者 (
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
資料集
-
專案的
查看及套用建議
您可以使用 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"
替換下列值:
LOCATION
:Cloud Storage 資料集所在的區域,例如us
或us-central1
。PROJECT_ID
:包含 BigQuery 資料集的 Google Cloud 專案 ID。專案 ID 為英數字元字串,例如my-project
。
回應類似下列範例。在本範例中,專案
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 查看建議,請參閱本頁的「查看建議」一節。
如何套用最佳化建議:
使用
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" } ...
-
REST
查看建議:
如要列出 BigQuery 資料集的所有可用建議,請使用 Recommender API 的
recommendations.list
方法。使用任何要求資料之前,請先替換以下項目:
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
。
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 查看建議,請參閱本頁的「查看建議」一節。
如何套用最佳化建議:
將建議標示為
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 資料集的專案 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:markFailed
JSON 要求主體:
{ "etag": "ETAG", "stateMetadata": { "STATE_METADATA" } }
如要傳送要求,請展開以下其中一個選項:
回應會以
FAILED
狀態顯示建議,如下列範例所示。 為求明確,這個範例省略了大部分的欄位:... "stateInfo": { "state": "FAILED" }, "etag": "\"7caf4103d7669e12\"", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", ...
瞭解最佳化建議
每項最佳化建議都會附上相關資訊,協助您瞭解提出建議的原因。
如要瞭解建議的欄位,請參閱
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 取得政策洞察。
後續步驟
- 進一步瞭解建議工具。
- 瞭解如何使用 BigQuery 資料集的允許政策洞察。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-09-11 (世界標準時間)。
-
專案的角色檢視者 (