テーブルおよびビューへのアクセスの制御
このドキュメントでは、テーブル アクセス ポリシーを使用して、テーブルとビューへのアクセスを管理する方法について説明します。テーブル アクセス ポリシーの概要については、テーブル アクセス ポリシーの概要をご覧ください。
テーブルまたはビューを作成すると、次の方法でポリシーを設定できます。
- Google Cloud コンソールを使用する
bq set-iam-policy
コマンドを使用するtables.setIamPolicy
メソッドを呼び出すGRANT
またはREVOKE
データ制御言語(DCL)ステートメントを使用する
テーブル アクセス ポリシーは、ビューとデータセット レベル承認済みビューのアクセス権を設定するために使用できます。ビューでは、テーブル アクセス ポリシーを使用して共有した他のテーブルとビューを参照することもできます。
始める前に
テーブル アクセス ポリシーは、BigQuery リソース(テーブルやビューなど)に対して使用できます。テーブルやビューの作成方法については、テーブルの作成またはビューの作成をご覧ください。
アクセス ポリシーの作成に必要な権限
テーブル アクセス ポリシーを作成するには、bigquery.tables.setIamPolicy
Identity and Access Management(IAM)権限を付与されている必要があります。
次の各 IAM 事前定義ロールには、テーブルまたはビューのアクセス ポリシーを作成するために必要な権限が含まれています。
roles/bigquery.dataOwner
roles/bigquery.admin
BigQuery での IAM の詳細については、IAM によるアクセス制御をご覧ください。
テーブルとビューをクエリするために必要な権限
ユーザーには、クエリが参照するすべてのテーブルとビューに対するbigquery.tables.getData
権限が必要です。さらに、ビューをクエリする場合は、基盤となるすべてのテーブルとビューに対してこの権限が必要になります。ただし、承認済みビューまたは承認済みデータセットを使用する場合は、ユーザーに基盤となるソースデータへのアクセス権を付与する必要はありません。
次の各 IAM 事前定義ロールには、クエリで参照するすべてのテーブルとビューに対してユーザーが必要とする権限が含まれています。
roles/bigquery.admin
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.dataViewer
アクセス ポリシーを作成する
テーブルやビューのアクセス ポリシーを作成するには、次の操作を行います。
Console
BigQuery ページに移動します。
[エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
データセットを開いて、テーブルまたはビューを選択します。
[
共有] をクリックします。[共有] ページでユーザー(またはプリンシパル)を追加するには、[
プリンシパルを追加] をクリックします。[プリンシパルの追加] ページで、次の操作を行います。
- [新しいプリンシパル] にユーザー名を入力します。個別のユーザー、グループ、サービス アカウント、ワークスペース ドメインを追加できます。
- [ロールを選択] プルダウン リストから、ユーザーに付与するロールを選択します。
- [条件を追加] をクリックして、ユーザーに対する条件付きアクセスを追加します。
[保存] をクリックして、新しいユーザーの変更を保存します。
[閉じる] をクリックして [共有] ページを閉じます。
SQL
ユーザーにロールを付与するには、GRANT
DCL ステートメントを使用します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
GRANT `ROLE_LIST` ON TABLE DATASET.TABLE_OR_VIEW TO 'USER_LIST';
次のように置き換えます。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。
bq
既存のポリシーをローカル ファイルに取得します。
bq get-iam-policy \ project-id:dataset.table_or_view \ > policy.json
ここで
- project-id は、プロジェクト ID です。
- dataset は、更新するリソース(テーブルまたはビュー)を含むデータセットの名前です。
- table_or_view は、更新するリソースの名前です。
テーブルまたはビューを特定し、ポリシーの出力をファイルにリダイレクトする例:
bq get-iam-policy dataset1.table1 > policy.json
bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
bq get-iam-policy project1:dataset1.table1 > policy.json
ポリシーにメンバーをまだ追加していない場合、
policy.json
ファイルにetag
値が含まれますが、その他のフィールドは含まれません。policy.json
ファイルのフォーマットの詳細については、ポリシーについてをご覧ください。初めてメンバーを追加する場合は、
bindings
フィールドをポリシーに追加します。たとえば、joe@example.com
に BigQuery データ閲覧者(roles/bigquery.dataViewer
)ロールを追加するには、次のようにします。"bindings": [ { "members": [ "user:joe@example.com" ], "role": "roles/bigquery.dataViewer" } ]
既存のバインディングにメンバーを追加する場合は、既存メンバーの後ろにそのメンバーを追加します。この例では、既存のバインディングで
jane@example.com
に BigQuery データ閲覧者(roles/bigquery.dataViewer
)ロールを付与する方法を示しています。"members": [ "user:joe@example.com", "user:jane@example.com" ], "role": "roles/bigquery.dataViewer"
ポリシーを更新します。
bq set-iam-policy \ project-id:dataset.table_or_view \ policy.json
IAM ポリシー スキーマのバージョンについては、ポリシー バージョンをご覧ください。
API
tables.getIamPolicy
を呼び出して、現在のポリシーを取得します。ポリシーを編集してメンバーやバインディングを追加します。ポリシーの形式については、
bq
の例をご覧ください。tables.setIamPolicy
を呼び出して、新しいポリシーを書き込みます。
IAM ポリシー スキーマのバージョンについては、ポリシー バージョンをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
アクセス ポリシーを更新する
テーブルやビューのアクセス ポリシーを更新するには、次の操作を行います。
Console
BigQuery ページに移動します。
[エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
データセットを開いて、テーブルまたはビューを選択します。
[
共有] をクリックします。[共有] ページで、次の操作を行います。
新しいユーザーを追加するには、アクセス ポリシーの作成の手順を行います。
ユーザーのアクセス権を削除するには、[検索] フィールドを使用してユーザーを検索するか、ユーザーが属するロールを開きます。削除するユーザーの削除アイコン
をクリックします。ユーザーのアクセス権を変更するには、編集アイコン
をクリックします。
変更を加えたら [保存] をクリックします。
[閉じる] をクリックして [共有] ページを閉じます。
SQL
データセット内のテーブルまたはビューからユーザーのロールを削除するには、REVOKE
DCL ステートメントを使用します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
REVOKE `ROLE_LIST` ON TABLE DATASET.TABLE_OR_VIEW FROM 'USER_LIST';
次のように置き換えます。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。
bq
既存のポリシーをローカル ファイルに取得します。
bq get-iam-policy --format=prettyjson \ project-id:dataset.table_or_view \ > policy.json
ここで
- project-id は、プロジェクト ID です。
- dataset は、更新するテーブルが含まれているデータセットの名前です。
- table_or_view は、更新するテーブルまたはビューの名前です。
テーブルまたはビューを特定し、ポリシーの出力をファイルにリダイレクトする例:
bq get-iam-policy dataset1.table1 > policy.json
bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
bq get-iam-policy project1:dataset1.table1 > policy.json
必要に応じて policy.json を変更します。
policy.json
ファイルのフォーマットの詳細については、ポリシーについてをご覧ください。IAM ポリシー スキーマのバージョンについては、ポリシー バージョンをご覧ください。
ポリシーを更新します。
bq set-iam-policy \ project-id:dataset.table_or_view \ policy.json
API
tables.getIamPolicy
を呼び出して、現在のポリシーを取得します。ポリシーを編集してメンバーやバインディングを追加します。
ポリシーに必要な形式については、ポリシー リファレンスのトピックをご覧ください。
tables.setIamPolicy
を呼び出して、更新されたポリシーを書き込みます。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
Identity and Access Management ポリシーの詳細については、ポリシーについてとポリシーのリファレンス トピックをご覧ください。
次のステップ
監査ロギングで、テーブル アクセス ポリシー管理アクティビティの監査ロギングについて確認する。