承認済みデータセット
このドキュメントでは、BigQuery で承認済みデータセットを使用する方法について説明します。承認済みデータセットを使用すると、指定したデータセット内のすべてのビューが、2 番目のデータセット内のデータにアクセスすることを承認できます。承認済みデータセットを使用すれば、個々の承認済みビューを構成する必要はありません。
BigQuery で承認済みデータセットを作成するには、以下を使用します。
- Google Cloud コンソール
bq update
コマンドdatasets.update
API メソッド
概要
BigQuery のビューは、SQL クエリによって定義される仮想テーブルです。たとえば、ビューのクエリでは、テーブルの列のサブセットのみを取得できます。ただし、個人を特定できる情報(PII)を含む列は除外されます。ビューのクエリを実行するには、ビューのクエリによってアクセスされるリソースへのアクセス権が付与されている必要があります。
ビューによって参照されるリソースに直接アクセスすることなく、ビューをクエリできるようにするには、承認済みビューを使用します。承認済みビューを使用すると、プリンシパルに基のデータに対するアクセス権がなくても、ビュー内の制限付きのデータを、指定したグループやユーザー(プリンシパル)と共有できます。これを行うには、プリンシパルにビューへのアクセス権を付与し、基になるデータを含むデータセットへのアクセス権をビューに付与します。
個々のビューを承認せず、ビューのコレクションにデータセットへのアクセス権を付与する場合は、ビューをデータセットにグループ化してから、ビューを含むデータセットにアクセス対象のデータを含むデータセットへのアクセス権を付与します。プリンシパルに、グループとビューを含むデータセットへのアクセス権を付与することも、データセット内の個々のビューへのアクセス権を付与することもできます。別のデータセットにアクセスできるデータセットは、承認済みデータセットといいます。別のデータセットにデータへのアクセスを承認するデータセットは、共有データセットといいます。
必要な権限とロール
データセットの承認またはデータセットの承認取り消しには、次の Identity and Access Management(IAM)権限が必要です。これにより、共有するデータセットのアクセス制御リストを更新できます。
データセットを承認した後、承認済みデータセット内のビューを作成または更新するには、これらと同じ権限が必要です。詳細については、承認済みデータセット内のビューを作成または更新するをご覧ください。
権限 | リソース |
---|---|
bigquery.datasets.get
|
共有するデータセット。 |
bigquery.datasets.update
|
共有するデータセット。 |
事前定義の以下の IAM ロールには、必要な権限が含まれています。
ロール | 説明 |
---|---|
bigquery.dataOwner
|
BigQuery データオーナー |
bigquery.admin
|
BigQuery 管理者 |
割り当てと上限
承認済みデータセットには、データセットの上限が適用されます。詳細については、データセットの上限をご覧ください。
データセットの承認
次のように、共有するデータセットのアクセスリストに承認するデータセットを追加することで、データセットの現在と将来のビューが別のデータセットにアクセスすることを承認できます。
コンソール
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] パネルでプロジェクトを開き、共有するデータを含むデータセットを選択します。
[
アクション] アイコンをクリックし、[開く] を選択します。表示された詳細ペインで、[共有] をクリックし、[データセットを承認] オプションを選択します。
表示された [承認済みデータセット] ペインで、承認するデータセットのデータセット ID を次の形式で入力します。
PROJECT.AUTHORIZED_DATASET
次に例を示します。
myProject.myDataset
[承認を追加] をクリックし、[閉じる] をクリックします。
bq
Cloud Shell を開きます。
bq show
コマンドを使用して、共有するデータセットの既存のメタデータ(アクセス制御リストを含む)を JSON ファイルに書き込みます。bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
テキスト エディタを使用して、FILE_PATH に作成した JSON ファイルの既存の
access
セクションに承認するデータセットを追加します。次に例を示します。
"access": [ ... { "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } } ]
bq update
コマンドを使用して共有データセットを更新します。例:bq update --source FILE_PATH PROJECT:SHARED_DATASET
承認済みデータセットが追加されたことを確認するには、
bq show
コマンドを再度入力します。次に例を示します。bq show --format=prettyjson PROJECT:SHARED_DATASET
API
次のように、
datasets.get
メソッドを呼び出して、共有するデータセットの現在のメタデータを取得します。GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
レスポンスの本文で、データセットの JSON メタデータを含む
Dataset
リソースが返されます。次のように、
Dataset
リソースで返された JSON メタデータのaccess
セクションに、承認するデータセットを追加します。"access": [ ... { "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } } ]
datasets.update
メソッドを使用して、追加した承認のデータセットを更新します。PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
更新された
Dataset
リソースをリクエスト本文に含めます。承認済みデータセットが追加されたことを確認するには、
datasets.get
メソッドを再度呼び出します。
データセットの承認を取り消す
別のソース データセットへのアクセスを許可されたデータセットを削除した場合、変更がソース データセットのアクセス制御リスト(ACL)に完全に反映されるまでに最大 24 時間かかることがあります。この期間中、以下の影響があります。
- 削除されたデータセットを介してソースデータにアクセスすることはできません。
- 削除されたデータセットは、移行元データセットの ACL に引き続き表示され、カウントされて承認済みデータセットの上限に達する場合があります。そのため、ACL が更新されるまで新しい承認済みデータセットを作成できないことがあります。
承認済みデータセット内のビューに付与されているアクセス権を取り消すには、次の手順で共有データセットのアクセスリストから承認済みデータセットを削除します。
コンソール
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] パネルでプロジェクトを開き、共有データセットを選択します。
[
アクション] アイコンをクリックし、[開く] を選択します。表示された詳細ペインで、[共有] をクリックし、[データセットを承認] オプションを選択します。
表示された [承認済みデータセット] ペインで、[現在承認されているデータセット] セクションで承認済みデータセットのエントリを見つけます。
削除する承認済みデータセットの横にある削除アイコンをクリックして、[閉じる] をクリックします。
bq
Cloud Shell を開きます。
bq show
コマンドを使用して、共有データセットの既存のメタデータ(アクセス制御リストを含む)を JSON ファイルに書き込みます。bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
テキスト エディタを使用して、次のように、FILE_PATH に作成した JSON ファイルの
access
セクションから承認済みデータセットを削除します。{ "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } }
bq update
コマンドを使用して共有データセットを更新します。次に例を示します。bq update --source FILE_PATH PROJECT:SHARED_DATASET
承認済みデータセットが削除されたことを確認するには、
bq show
コマンドを再度入力します。次に例を示します。bq show --format=prettyjson PROJECT:SHARED_DATASET
API
次のように
datasets.get
メソッドを呼び出して、共有データセットの現在のメタデータを取得します。GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
レスポンスの本文で、データセットの JSON メタデータを含む
Dataset
リソースが返されます。Dataset
リソースで返された JSON のaccess
セクションから、承認済みのデータセットを削除します。次に例を示します。{ "dataset": { "dataset": { "project_id": "PROJECT", "dataset_id": "AUTHORIZED_DATASET" }, "target_types": "VIEWS" } }
datasets.update
メソッドを使用して、削除後の承認でデータセットを更新します。PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET
更新された
Dataset
リソースをリクエスト本文に含めます。承認済みデータセットが削除されたことを確認するには、
datasets.get
メソッドを再度呼び出します。
承認済みデータセット内のビューを作成または更新する
承認済みデータセット内のビューを作成または更新するには、必要な権限とロールに記載されている共有データセットに対する権限に加え、標準データセット内のビューを作成または更新するための権限が必要です。
次の表に、承認済みデータセット内にあるビューを作成または更新するために必要な Identity and Access Management(IAM)権限をまとめます。
権限 | リソース |
---|---|
bigquery.datasets.get
|
共有するデータセット。 |
bigquery.datasets.update
|
共有するデータセット。 |
bigquery.tables.getData
|
作成または更新する新しいビューで参照されている共有データセットのテーブルまたはビュー。 |
bigquery.tables.create
|
ビューを作成する承認済みデータセット。 |
bigquery.tables.update
|
ビューを更新する承認済みデータセット。 |
承認済みデータセットからビューを削除するための追加の権限は必要ありません。
承認済みデータセット内のビューに対するクエリ
承認済みデータセット内のビューをクエリするには、ユーザーにビューへのアクセス権が必要ですが、共有データセットへのアクセス権は必要ありません。
詳細については、承認済みビューをご覧ください。
承認済みデータセットの例
次の例は、承認済みデータセットを作成して使用する方法を示しています。
たとえば、private_dataset
と public_dataset
という名前の 2 つのデータセットがあるとします。private_dataset
データセットには private_table
という名前のテーブルが含まれています。public_dataset
データセットには、private_table_filtered
という名前のビューが含まれています。private_table_filtered
ビューは、private_table
テーブルのフィールドの一部(すべてではない)を返すクエリに基づいています。
次のように、private_table
テーブル内のすべてのデータではなく、private_table_filtered
ビューによって返されたデータに対するアクセス権をユーザーに付与できます。
public_dataset
データセットのbigquery.dataViewer
ロールをユーザーに付与します。このロールにはbigquery.tables.getData
権限が含まれており、ユーザーはpublic_dataset
データセットのビューにクエリを実行できます。データセットのユーザーにロールを付与する方法については、データセットへのアクセスの制御をご覧ください。これで、ユーザーは
public_dataset
内のビューにクエリを実行する権限を取得しましたが、private_dataset
内のprivate_table
テーブルには引き続きアクセスできません。ユーザーがprivate_table
テーブルに直接クエリを実行しようとするか、private_table_filtered
ビューにクエリを実行することでprivate_table
テーブルに間接的にアクセスしようとすると、次のようなエラー メッセージが表示されます。Access Denied: Table PROJECT:private_dataset.private_table: User does not have permission to query table PROJECT:private_dataset.private_table.
Google Cloud コンソールの [BigQuery] ページで、
private_dataset
データセットを開き、[共有] をクリックして、[データセットを承認] を選択します。表示された [承認済みデータセット] ペインで、[データセット ID] フィールドに「
PROJECT.public_dataset
」と入力し、[承認を追加] をクリックします。private_dataset
データセットのアクセス制御リストにpublic_dataset
データセットが追加されます。これにより、public_dataset
データセット内のビューが承認され、private_dataset
データセット内のデータにクエリを実行できるようになります。これで、ユーザーは
private_dataset
データセット内のデータに直接アクセスする権限がなくても、private_dataset
データセットに間接的にアクセスできるpublic_dataset
データセット内のprivate_table_filtered
ビューにクエリを実行できるようになりました。
制限事項
- 承認済みデータセットは異なるリージョンに作成できますが、BigQuery はクロスリージョンのクエリをサポートしていません。そのため、同じリージョンにデータセットを作成することをおすすめします。
次のステップ
データセット内のデータにアクセスする個々のビューを承認する方法については、承認済みビューをご覧ください。
データセット内のテーブル関数またはユーザー定義関数による承認については、承認済み関数をご覧ください。