BigQuery の IAM 権限のトラブルシューティング
このドキュメントでは、BigQuery の Identity and Access Management(IAM)権限に関する問題のトラブルシューティングを行う方法について説明します。IAM 権限に関する問題が発生すると、通常、次のような Access Denied エラーになります。
Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.Access Denied: Project PROJECT_ID: User does not have bigquery.datasets.get permission on dataset DATASET.User does not have permission to query table PROJECT_ID:DATASET.TABLE.Access Denied: Table PROJECT_ID:DATASET.TABLE: User does not have permission to query table PROJECT_ID:DATASET.TABLE, or perhaps it does not exist.Access Denied: User PRINCIPAL does not have permission to perform bigquery.tables.getData on resource 'projects/PROJECT_ID/datasets/DATASET/tables/TABLE'.
始める前に
- プリンシパルの BigQuery リソースへのアクセスをトラブルシューティングするには、必要な IAM 権限があることを確認します。
問題に関する情報を収集する
リソース アクセスに関する問題のトラブルシューティングを行う際の最初のステップは、不足している権限、アクセスが拒否された IAM プリンシパル、プリンシパルがアクセスしようとしていたリソースを特定することです。
エラーまたはジョブ履歴から情報を取得する
プリンシパル、リソース、権限に関する情報を取得するには、bq コマンドライン ツールの出力、API レスポンス、または Google Cloud コンソールの BigQuery を確認します。
たとえば、権限が不十分な状態でクエリを実行しようとすると、 Google Cloud コンソールの [クエリ結果] セクションの [ジョブ情報] タブに次のようなエラーが表示されます。
エラーを確認して、プリンシパル、リソース、権限を特定します。
場合によっては、エラー メッセージから直接、不足している権限をリクエストできることもあります。詳細については、IAM ドキュメントの権限に関するエラー メッセージのトラブルシューティングをご覧ください。
Cloud Audit Logs から情報を取得する
エラー メッセージが一般的で、情報が不足している場合や、バックグラウンド プロセスでアクションが失敗した場合は、Cloud Audit Logs のログ エクスプローラを使用してエラーに関する情報を取得します。
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
または、ナビゲーション メニューから [モニタリング] > [ログ エクスプローラ] を選択します。
ログ エクスプローラで、ログのスコープとして [プロジェクトのログ] を選択します。
クエリ ウィンドウで、次のクエリを入力して、BigQuery データアクセス ログから権限関連のエラーを取得します。
resource.type="bigquery_resource" AND logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND protoPayload.status.message:"Access Denied" OR protoPayload.status.message:"Permission denied" OR protoPayload.status.code=7
PROJECT_ID は、実際のプロジェクト ID に置き換えます。
クエリ結果で、失敗したオペレーションに対応するログエントリを開きます。
[
protoPayload] セクションで、[authorizationInfo] 配列を開き、[authorizationInfo] 配列の各ノードを開きます。[
authorizationInfo] 配列には、API 呼び出し中に実行されたすべての権限チェックが表示されます。エラーの原因を確認するには、
granted: falseエントリを探します。granted: falseエントリには次の情報が表示されます。permission: チェックされた IAM 権限の文字列。例:bigquery.tables.getDataresource: プリンシパルがアクセスを試みたリソースの完全修飾名。例:projects/myproject/datasets/mydataset/tables/mytableprincipalEmail(利用可能な場合):protoPayload.authenticationInfoで参照される、アクションを試みたプリンシパル。
許可ポリシー用の Policy Analyzer を使用する
許可ポリシー用の Policy Analyzer を使用すると、IAM 許可ポリシーに基づいて、どの IAM プリンシパルがどの BigQuery リソースに対してどのようなアクセス権を持っているかを調べることができます。
権限エラーに関する情報を収集したら、Policy Analyzer を使用して、プリンシパルに必要なアクセス権がない理由を把握できます。このツールは、関連するすべてのポリシー、Google グループのメンバーシップ、プロジェクト、フォルダ、組織などの親リソースからの継承を分析します。
許可ポリシー用の Policy Analyzer を使用するには、分析クエリを作成し、分析のスコープを指定してクエリを実行します。
Google Cloud コンソールで、[Policy Analyzer] ページに移動します。
または、ナビゲーション メニューから [IAM と管理] > [Policy Analyzer] を選択します。
[カスタムクエリを作成] をクリックします。
[クエリを構成する] ページで、事前に収集した情報を入力します。
[スコープを選択] セクションの [クエリのスコープの選択] フィールドで、現在のプロジェクトが表示されていることを確認するか、[参照] をクリックして別のリソースを選択します。
[クエリ パラメータの設定] セクションで、[パラメータ 1] に [プリンシパル] を選択し、[プリンシパル] フィールドにユーザー、グループ、サービス アカウントのメールアドレスを入力します。
[パラメータを追加] をクリックします。
[パラメータ 2] で [権限] を選択し、[権限] フィールドで [選択] をクリックして BigQuery 権限を選択し、[追加] をクリックします。たとえば、
bigquery.tables.getDataを選択します。[パラメータを追加] をクリックします。
[パラメータ 3] で [リソース] を選択し、[リソース] フィールドに完全修飾リソース名を入力します。リソース名には、次の例のようにサービス接頭辞を含める必要があります。
- BigQuery プロジェクト:
//cloudresourcemanager.googleapis.com/projects/PROJECT_ID - BigQuery データセット:
//bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET - BigQuery テーブル:
//bigquery.googleapis.com/projects/PROJECT/datasets/DATASET/tables/TABLE
- BigQuery プロジェクト:
[カスタムクエリ] ペインで、[分析] > [クエリを実行] をクリックします。
クエリ結果を確認します。結果は次のいずれかになります。
- 空のリスト。結果がない場合は、プリンシパルに必要な権限がないことを示します。適切な権限を提供するロールをプリンシパルに付与する必要があります。
- 1 つ以上の結果。アナライザーが許可ポリシーを検出すると、なんらかの形のアクセス権が存在します。各結果の [バインディングを表示] をクリックして、プリンシパルがメンバーであるリソースへのアクセス権を付与するロールを表示します。ポリシー バインディングは、グループ メンバーシップまたは継承によってアクセス権が付与されているかどうか、または IAM 条件か IAM 拒否ポリシーによってアクセスが拒否されているかどうかを示します。
必要な権限を付与する適切な IAM ロールを見つける
プリンシパルに十分なアクセス権がないことを確認したら、次のステップで必要な権限を付与する適切な事前定義 IAM ロールまたはカスタム IAM ロールを見つけます。選択するロールは、最小権限の原則を遵守する必要があります。
組織でカスタムロールを使用している場合は、プロジェクトまたは組織で作成されたすべてのカスタムロールを一覧表示して、適切なロールを見つけることができます。たとえば、 Google Cloud コンソールの [ロール] ページで、リストを Type:Custom でフィルタすると、カスタムロールのみを表示できます。
適切な事前定義 IAM ロールを見つけるには、次の操作を行います。
[BigQuery IAM ロールと権限] ページの [BigQuery の権限] セクションを開きます。
[権限を入力] 検索バーに、エラー メッセージ、ジョブ履歴、監査ログから取得した権限を入力します。例:
bigquery.tables.getData検索結果には、権限を付与する事前定義 BigQuery ロールがすべて表示されます。
最小権限の原則を適用します。ロールのリストで、必要な権限を付与するロールの中で最も権限が制限されたロールを選択します。たとえば、テーブルデータのクエリを実行する権限を付与するために
bigquery.tables.getDataを検索した場合、その権限を付与するロールの中で最も権限が制限されたロールは BigQuery データ閲覧者です。プリンシパルに適切なロールを付与します。BigQuery リソースに IAM ロールを付与する方法については、IAM を使用してリソースへのアクセスを制御するをご覧ください。
次のステップ
- BigQuery のすべての IAM ロールと権限の一覧については、BigQuery の IAM ロールと権限をご覧ください。
- IAM の許可ポリシーと拒否ポリシーのトラブルシューティングの詳細については、ポリシーのトラブルシューティングをご覧ください。
- Policy Intelligence Policy Analyzer の詳細については、許可ポリシー用の Policy Analyzer をご覧ください。
- Policy Troubleshooter の詳細については、Policy Troubleshooter を使用するをご覧ください。