承認済みデータセット

このドキュメントでは、BigQuery で承認済みデータセットを使用する方法について説明します。承認済みデータセットを使用すると、指定したデータセット内のすべてのビューが、2 番目のデータセット内のデータにアクセスすることを承認できます。承認済みデータセットを使用すれば、個々の承認済みビューを構成する必要はありません。

BigQuery で承認済みデータセットを作成するには、以下を使用します。

概要

BigQuery のビューは、SQL クエリによって定義される仮想テーブルです。たとえば、ビューのクエリでは、テーブルの列のサブセットのみを取得できます。ただし、個人を特定できる情報(PII)を含む列は除外されます。ビューのクエリを実行するには、ビューのクエリによってアクセスされるリソースへのアクセス権が付与されている必要があります。

ビューによって参照されるリソースに直接アクセスすることなく、ビューをクエリできるようにするには、承認済みビューを使用します。承認済みビューを使用すると、プリンシパルに基のデータに対するアクセス権がなくても、ビュー内の制限付きのデータを、指定したグループやユーザー(プリンシパル)と共有できます。これを行うには、プリンシパルにビューへのアクセス権を付与し、基になるデータを含むデータセットへのアクセス権をビューに付与します。

個々のビューを承認せず、ビューのコレクションにデータセットへのアクセス権を付与する場合は、ビューをデータセットにグループ化してから、ビューを含むデータセットにアクセス対象のデータを含むデータセットへのアクセス権を付与します。プリンシパルに、グループとビューを含むデータセットへのアクセス権を付与することも、データセット内の個々のビューへのアクセス権を付与することもできます。別のデータセットにアクセスできるデータセットは、承認済みデータセットといいます。別のデータセットにデータへのアクセスを承認するデータセットは、共有データセットといいます。

必要な権限とロール

データセットの承認またはデータセットの承認取り消しには、次の Identity and Access Management(IAM)権限が必要です。これにより、共有するデータセットのアクセス制御リストを更新できます。

データセットを承認した後、承認済みデータセット内のビューを作成または更新するには、これらと同じ権限が必要です。詳細については、承認済みデータセット内のビューを作成または更新するをご覧ください。

権限 リソース
bigquery.datasets.get 共有するデータセット。
bigquery.datasets.update 共有するデータセット。

事前定義の以下の IAM ロールには、必要な権限が含まれています。

ロール 説明
bigquery.dataOwner BigQuery データオーナー
bigquery.admin BigQuery 管理者

割り当てと上限

承認済みデータセットには、データセットの上限が適用されます。詳細については、データセットの上限をご覧ください。

データセットの承認

次のように、共有するデータセットのアクセスリストに承認するデータセットを追加することで、データセットの現在と将来のビューが別のデータセットにアクセスすることを承認できます。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] パネルでプロジェクトを開き、共有するデータを含むデータセットを選択します。

  3. [アクション] アイコンをクリックし、[開く] を選択します。

  4. 表示された詳細ペインで、[共有] をクリックし、[データセットを承認] オプションを選択します。

    データセットの承認

  5. 表示された [承認済みデータセット] ペインで、承認するデータセットのデータセット ID を次の形式で入力します。

    PROJECT.AUTHORIZED_DATASET

    次に例を示します。

    myProject.myDataset

  6. [承認を追加] をクリックし、[閉じる] をクリックします。

bq

  1. Cloud Shell を開きます。

    Cloud Shell に移動

  2. bq show コマンドを使用して、共有するデータセットの既存のメタデータ(アクセス制御リストを含む)を JSON ファイルに書き込みます。

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. テキスト エディタを使用して、FILE_PATH に作成した JSON ファイルの既存の access セクションに承認するデータセットを追加します。

    次に例を示します。

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]

  4. bq update コマンドを使用して共有データセットを更新します。例:

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. 承認済みデータセットが追加されたことを確認するには、bq show コマンドを再度入力します。次に例を示します。

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. 次のように、datasets.get メソッドを呼び出して、共有するデータセットの現在のメタデータを取得します。

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    レスポンスの本文で、データセットの JSON メタデータを含む Dataset リソースが返されます。

  2. 次のように、Dataset リソースで返された JSON メタデータの access セクションに、承認するデータセットを追加します。

    "access": [
     ...
     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
    ]
  3. datasets.update メソッドを使用して、追加した承認のデータセットを更新します。

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    更新された Dataset リソースをリクエスト本文に含めます。

  4. 承認済みデータセットが追加されたことを確認するには、datasets.get メソッドを再度呼び出します。

データセットの承認を取り消す

別のソース データセットへのアクセスを許可されたデータセットを削除した場合、変更がソース データセットのアクセス制御リスト(ACL)に完全に反映されるまでに最大 24 時間かかることがあります。この期間中、以下の影響があります。

  • 削除されたデータセットを介してソースデータにアクセスすることはできません。
  • 削除されたデータセットは、移行元データセットの ACL に引き続き表示され、カウントされて承認済みデータセットの上限に達する場合があります。そのため、ACL が更新されるまで新しい承認済みデータセットを作成できないことがあります。

承認済みデータセット内のビューに付与されているアクセス権を取り消すには、次の手順で共有データセットのアクセスリストから承認済みデータセットを削除します。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] パネルでプロジェクトを開き、共有データセットを選択します。

  3. [アクション] アイコンをクリックし、[開く] を選択します。

  4. 表示された詳細ペインで、[共有] をクリックし、[データセットを承認] オプションを選択します。

    データセットの承認

  5. 表示された [承認済みデータセット] ペインで、[現在承認されているデータセット] セクションで承認済みデータセットのエントリを見つけます。

  6. 削除する承認済みデータセットの横にある削除アイコンをクリックして、[閉じる] をクリックします。

bq

  1. Cloud Shell を開きます。

    Cloud Shell に移動

  2. bq show コマンドを使用して、共有データセットの既存のメタデータ(アクセス制御リストを含む)を JSON ファイルに書き込みます。

    bq show --format=prettyjson PROJECT:SHARED_DATASET > FILE_PATH
  3. テキスト エディタを使用して、次のように、FILE_PATH に作成した JSON ファイルの access セクションから承認済みデータセットを削除します。

      {
        "dataset": {
          "dataset": {
            "project_id": "PROJECT",
            "dataset_id": "AUTHORIZED_DATASET"
          },
          "target_types": "VIEWS"
        }
      }
  4. bq update コマンドを使用して共有データセットを更新します。次に例を示します。

    bq update --source FILE_PATH PROJECT:SHARED_DATASET
  5. 承認済みデータセットが削除されたことを確認するには、bq show コマンドを再度入力します。次に例を示します。

    bq show --format=prettyjson PROJECT:SHARED_DATASET

API

  1. 次のように datasets.get メソッドを呼び出して、共有データセットの現在のメタデータを取得します。

    GET https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    レスポンスの本文で、データセットの JSON メタデータを含む Dataset リソースが返されます。

  2. Dataset リソースで返された JSON の access セクションから、承認済みのデータセットを削除します。次に例を示します。

     {
       "dataset": {
         "dataset": {
           "project_id": "PROJECT",
           "dataset_id": "AUTHORIZED_DATASET"
         },
         "target_types": "VIEWS"
       }
     }
  3. datasets.update メソッドを使用して、削除後の承認でデータセットを更新します。

    PUT https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT/datasets/SHARED_DATASET

    更新された Dataset リソースをリクエスト本文に含めます。

  4. 承認済みデータセットが削除されたことを確認するには、datasets.get メソッドを再度呼び出します。

承認済みデータセット内のビューを作成または更新する

承認済みデータセット内のビューを作成または更新するには、必要な権限とロールに記載されている共有データセットに対する権限に加え、標準データセット内のビューを作成または更新するための権限が必要です。

次の表に、承認済みデータセット内にあるビューを作成または更新するために必要な Identity and Access Management(IAM)権限をまとめます。

権限 リソース
bigquery.datasets.get 共有するデータセット。
bigquery.datasets.update 共有するデータセット。
bigquery.tables.getData 作成または更新する新しいビューで参照されている共有データセットのテーブルまたはビュー。
bigquery.tables.create ビューを作成する承認済みデータセット。
bigquery.tables.update ビューを更新する承認済みデータセット。

承認済みデータセットからビューを削除するための追加の権限は必要ありません。

承認済みデータセット内のビューに対するクエリ

承認済みデータセット内のビューをクエリするには、ユーザーにビューへのアクセス権が必要ですが、共有データセットへのアクセス権は必要ありません。

詳細については、承認済みビューをご覧ください。

承認済みデータセットの例

次の例は、承認済みデータセットを作成して使用する方法を示しています。

たとえば、private_datasetpublic_dataset という名前の 2 つのデータセットがあるとします。private_dataset データセットには private_table という名前のテーブルが含まれています。public_dataset データセットには、private_table_filtered という名前のビューが含まれています。private_table_filtered ビューは、private_table テーブルのフィールドの一部(すべてではない)を返すクエリに基づいています。

次のように、private_table テーブル内のすべてのデータではなく、private_table_filtered ビューによって返されたデータに対するアクセス権をユーザーに付与できます。

  1. 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.

  2. Google Cloud コンソールの [BigQuery] ページで、private_dataset データセットを開き、[共有] をクリックして、[データセットを承認] を選択します。

  3. 表示された [承認済みデータセット] ペインで、[データセット ID] フィールドに「PROJECT.public_dataset」と入力し、[承認を追加] をクリックします。

    private_dataset データセットのアクセス制御リストに public_dataset データセットが追加されます。これにより、public_dataset データセット内のビューが承認され、private_dataset データセット内のデータにクエリを実行できるようになります。

    これで、ユーザーは private_dataset データセット内のデータに直接アクセスする権限がなくても、private_dataset データセットに間接的にアクセスできる public_dataset データセット内の private_table_filtered ビューにクエリを実行できるようになりました。

制限事項

  • 承認済みデータセットは異なるリージョンに作成できますが、BigQuery はクロスリージョンのクエリをサポートしていません。そのため、同じリージョンにデータセットを作成することをおすすめします。

次のステップ

  • データセット内のデータにアクセスする個々のビューを承認する方法については、承認済みビューをご覧ください。

  • データセット内のテーブル関数またはユーザー定義関数による承認については、承認済み関数をご覧ください。