このページでは、BigQuery データセットの IAM ロールに関する推奨事項を表示、理解、適用する方法について説明します。ロールの推奨事項により、プリンシパルが実際に必要な権限のみを持つようにすることで、最小権限の原則を徹底できます。
始める前に
Enable the IAM and Recommender APIs.
ロールに関する推奨事項について理解する。
必要な IAM のロール
データセットレベルのロールの推奨事項を管理するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトに対するロール閲覧者(
roles/iam.roleViewer
) -
プロジェクトに対する IAM Recommender 管理者(
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
: レコメンデーションの一意の識別子。この値は、レコメンデーションの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
: 省略可。レコメンデーションに関する任意のメタデータを含むカンマで区切られた Key-Value ペア。たとえば、--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
: レコメンデーションの一意の識別子。この値は、レコメンデーションの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
: 省略可。レコメンデーションに関する任意のメタデータを含むカンマで区切られた Key-Value ペア。たとえば、--state-metadata=reviewedBy=alice,priority=high
です。メタデータにより、レコメンデーションのstateInfo.stateMetadata
フィールドが置き換わります。
たとえば、レコメンデーションを「完了」に設定した場合、レスポンスにより
SUCCEEDED
ステータスにレコメンデーションが表示されます。この例では、わかりやすくするためにほとんどのフィールドを省略しています。... "priority": "P1", "recommenderSubtype": "REMOVE_ROLE_BIGQUERY_DATASET", "stateInfo": { "state": "SUCCEEDED" } ...
REST
この手順は、ユーザーが認証済みで、GOOGLE_APPLICATION_CREDENTIALS
環境変数が設定されていることを前提としています。
推奨事項を確認する:
BigQuery データセットで利用可能なすべての推奨事項を一覧表示するには、Recommender API の recommendations.list
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: BigQuery データセットを含む Google Cloud プロジェクトの ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。LOCATION
: BigQuery データセットが配置されているリージョン(例:us
やus-central1
)。-
PAGE_SIZE
: 省略可。このリクエストから返される結果の最大数。指定しなかった場合、サーバーが結果数を決定します。推奨事項の数がページサイズより大きい場合、レスポンスにページ設定トークンが含まれます。このトークンを使用して、結果の次のページを取得できます。 -
PAGE_TOKEN
: 省略可。以前のレスポンスでこのメソッドから返されたページ設定トークン。指定すると、前のリクエストが終了した時点から推奨事項のリストが開始します。 PROJECT_ID
: Google Cloud プロジェクト IDプロジェクト ID は英数字からなる文字列です(例:my-project
)。
HTTP メソッドと URL:
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 データセットを含む Google Cloud プロジェクトの ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。LOCATION
: BigQuery データセットが配置されているリージョン(例: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
: 省略可。レコメンデーションに関する任意のメタデータと Key-Value ペアを含むオブジェクト。例:{"reviewedBy": "alice", "priority": "high"}
メタデータにより、レコメンデーションのstateInfo.stateMetadata
フィールドが置き換わります。
HTTP メソッドと URL:
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 データセットを含む Google Cloud プロジェクトの ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。LOCATION
: BigQuery データセットが配置されているリージョン(例: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
: 省略可。レコメンデーションに関する任意のメタデータと Key-Value ペアを含むオブジェクト。例:{"reviewedBy": "alice", "priority": "high"}
メタデータにより、レコメンデーションのstateInfo.stateMetadata
フィールドが置き換わります。
HTTP メソッドと URL:
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
: 推奨事項の一意の識別子。この値は、レコメンデーションの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
: 省略可。レコメンデーションに関する任意のメタデータと Key-Value ペアを含むオブジェクト。例:{"reviewedBy": "alice", "priority": "high"}
メタデータにより、レコメンデーションのstateInfo.stateMetadata
フィールドが置き換わります。
HTTP メソッドと URL:
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 を使用して、手順どおりに操作を行い、ポリシーの分析情報を取得します。
次のステップ
- Recommender の詳細を確認する。
- BigQuery データセットの許可ポリシーの分析情報を使用する方法を確認する。