このページでは、BigQuery データセットの IAM ロールの推奨事項を表示、理解、適用する方法について説明します。ロールの推奨事項により、プリンシパルが実際に必要な権限のみを持つようにすることで、最小権限の原則を徹底できます。
始める前に
IAM API と Recommender API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。Security Command Center のプレミアム ティアまたはエンタープライズ ティアが組織レベルまたはプロジェクト レベルで有効になっていることを確認します。詳しくは、お支払いについてをご覧ください。
ロールに関する推奨事項について理解する。
認証を設定する。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
gcloud
Google Cloud コンソールで Cloud Shell をアクティブにします。
Google Cloud コンソールの下部にある Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Google Cloud CLI をインストールします。
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要な 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
推奨事項を確認する:
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 データセットの許可ポリシーの分析情報を使用する方法を確認する。