承認済みビュー

このドキュメントでは、BigQuery で承認済みビューと承認済みマテリアライズド ビューを作成する方法について説明します。

概要

データ管理者は、承認済みビューを作成して、データセット内のデータのサブセットを特定のユーザーとグループ(プリンシパル)と共有できます。プリンシパルは、共有されたデータを表示してクエリできますが、ソース データセットに直接アクセスすることはできません。

ビュータイプ

論理ビューは BigQuery のデフォルトのビュータイプです。マテリアライズド ビューは事前に計算されたビューであり、パフォーマンスと効率を向上させるためにクエリの結果を定期的にキャッシュに保存します。

論理ビューの承認済みビューは承認済みビューと呼ばれますが、マテリアライズド ビューの承認済みビューは承認済みマテリアライズド ビューと呼ばれます。

論理ビューが大規模なクエリや計算負荷の高いクエリに依存している場合は、代わりにマテリアライズド ビューを作成できます。ただし、データのサブセットのみをクエリするか、他の手法を使用することで、マテリアライズド ビューを作成せずにパフォーマンスを向上させることができます。

詳しくは、次のリソースをご覧ください。

承認済みビューを作成する手順の概要

ビューを作成して共有する大まかな手順は次のとおりです。この手順は、承認済み論理ビューでも承認済みマテリアライズド ビューでも同じです。

  • ソースデータ格納するデータセットを作成する。
  • クエリを実行して、ソース データセットの宛先テーブルにデータを読み込む。
  • 承認済みビューを含むデータセットを作成する。
  • SQL クエリから承認済みビューを作成し、データ アナリストがクエリ結果で表示できる列を制限する。
  • データ アナリストにクエリジョブを実行する権限を付与する。
  • 承認済みビューを含むデータセットへのアクセス権をデータ アナリストに付与する。
  • 承認済みビューにソース データセットへのアクセス権を付与する。

別の方法

承認済みビューは柔軟でスケーラブルですが、ユースケースによっては次のいずれかの方法が適している場合があります。

  • テーブルに行レベルのポリシーを設定する。
  • テーブルに列レベルのポリシーを設定する。
  • データを別のテーブルに保存する。
  • データセット(承認済みデータセット)内のすべてのビューを共有する。

行レベルまたは列レベルのセキュリティを使用するか、別のテーブルを使用する

データ管理者は、テーブルに行レベルのアクセス ポリシーを設定するか、機密データを保持する別のテーブルを作成することで、該当データを閲覧するユーザーの権限を制限できます。別のテーブルに保存されたデータは分離されるため、ユーザーはテーブルに存在する行数を閲覧できなくなります。

また、ポリシータグを作成して適用することで、テーブル内の列を閲覧するユーザーの権限を制限できます。

データを別のテーブルに保存する方法は最も安全ですが、柔軟性は最も低いです。行レベルのポリシーを設定する方法は、柔軟かつ安全です。承認済みビューを共有する方法は柔軟で、最高のパフォーマンスを実現します。

これらの方法を詳しく比較するには、次のリソースをご覧ください。

データセット内のすべてのビューを共有する

個々のビューを承認せず、ビューのコレクションにデータセットへのアクセス権を付与する場合は、ビューをデータセットにグループ化します。その後、ビューを含むデータセットに対して、アクセス対象のデータが格納されているデータセットへのアクセス権を付与します。

プリンシパルには、ビューのグループを含むデータセットへのアクセス権を付与することも、データセット内の個々のビューへのアクセス権を付与することもできます。別のデータセットにアクセスできるデータセットは、承認済みデータセットといいます。別のデータセットにデータへのアクセスを承認するデータセットは、共有データセットといいます。

詳細については、承認済みデータセットデータセットの承認をご覧ください。

制限事項

  • 別のデータセットに承認済みビューまたは承認済みマテリアライズド ビューを作成する場合、ソース データセットと承認済みビューのデータセットは同じリージョンのロケーションに存在する必要があります。
  • 承認済みビューを削除すると、ビューのリストからその承認済みビューが削除されるまで最大 24 時間かかることがあります。この期間中、承認済みビューにはアクセスできませんが、削除された承認済みビューはビューのリストに表示され、承認済みビューの上限の対象としてカウントされます。この制限により、新しい承認済みビューがその上限を超えた場合、追加の承認済みビューの作成ができなくなります。

始める前に

共有する承認済みビューまたは承認済みマテリアライズド ビューをクエリするための権限をユーザーに与える Identity and Access Management(IAM)ロールを付与します。

必要なロール

承認済みビューを作成および更新するには、ビューを含むデータセットに対する権限と、ビューへのアクセス権を提供するデータセットに対する権限が必要です。

また、ビューを含むプロジェクトとデータセットへのアクセス権をユーザーまたはグループに付与する必要があります。

ビューを含むデータセットに対する管理者権限

BigQuery では、ビューはテーブル リソースとして扱われます。このため、ビューを作成するには、テーブルの作成と同じ権限が必要になります。また、ビューの SQL クエリで参照されるテーブルにクエリを実行する権限も必要です。

ビューを作成するには、bigquery.tables.create IAM 権限が必要です。事前定義された IAM ロールの roles/bigquery.dataEditor には、ビューの作成に必要な権限が含まれています。

bigquery.datasets.create 権限がある場合は、作成したデータセットにビューを作成できます。所有していないデータのビューを作成するには、そのテーブルに対する bigquery.tables.getData 権限が必要です。

BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。

ビューへのアクセス権を提供する 2 つ目のデータセットに対する管理者権限

データセット プロパティを更新するには、次の IAM 権限が必要です。

  • bigquery.datasets.update
  • bigquery.datasets.setIamPolicy( Google Cloud コンソールでデータセットのアクセス制御を更新する場合にのみ必要)

事前定義された IAM ロールの roles/bigquery.dataOwner には、データセットのプロパティを更新するために必要な権限が含まれています。

また、bigquery.datasets.create 権限を付与されている場合は、作成したデータセットのプロパティを更新できます。

BigQuery での IAM のロールと権限については、事前定義ロールと権限をご覧ください。

ビューのプロジェクトとデータセットに対するユーザー権限

承認済みビューをユーザーまたはグループと共有するには、そのユーザーまたはグループに次の IAM 権限を付与する必要があります。

  • 承認済みビューを含むプロジェクトに対する roles/bigquery.user IAM ロール。
  • 承認済みビューを含むデータセットに対する roles/bigquery.dataViewer IAM ロール。

承認済みビューを操作する

以降のセクションでは、承認済みビューと承認済みマテリアライズド ビューの操作方法について説明します。

承認済みビューを作成する

承認済みビューを作成するには、次のいずれかのオプションを選択します。承認済みビューの承認、共有、削除の詳細な手順については、承認済みビューを作成するのチュートリアルをご覧ください。

コンソール

  1. [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで、承認済みビューのベースとなるクエリを入力します。

  3. [保存] > [ビューを保存] の順にクリックします。

  4. [ビューの保存] ダイアログで、次の操作を行います。

    1. [プロジェクト] に、ビューを保存するプロジェクトを入力します。

    2. [データセット] に、ビューを保存するデータセットを入力します。これは、ソースクエリで使用されるデータセットとは異なるデータセットである必要があります。

    3. [テーブル] に、ビューの名前を入力します。

    4. [保存] をクリックします。

  5. 承認済みビューを使用できるユーザーに必要な権限を付与します。

  6. [エクスプローラ] ペインで、ソースクエリで使用されているデータセットを選択します。

  7. [詳細] ペインで、[共有] > [ビューを承認] をクリックします。

  8. [承認済みビュー] ペインの [承認済みビュー] に、PROJECT_ID.DATASET_ID.VIEW_NAME 形式でビューの完全修飾名を入力します。

  9. [承認を追加] をクリックします。

Terraform

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

# Creates an authorized view.

# Create a dataset to contain the view.
resource "google_bigquery_dataset" "view_dataset" {
  dataset_id  = "view_dataset"
  description = "Dataset that contains the view"
  location    = "us-west1"
}

# Create the view to authorize.
resource "google_bigquery_table" "movie_view" {
  project     = google_bigquery_dataset.view_dataset.project
  dataset_id  = google_bigquery_dataset.view_dataset.dataset_id
  table_id    = "movie_view"
  description = "View to authorize"

  view {
    query          = "SELECT item_id, avg(rating) FROM `movie_project.movie_dataset.movie_ratings` GROUP BY item_id ORDER BY item_id;"
    use_legacy_sql = false
  }
}


# Authorize the view to access the dataset
# that the query data originates from.
resource "google_bigquery_dataset_access" "view_authorization" {
  project    = "movie_project"
  dataset_id = "movie_dataset"

  view {
    project_id = google_bigquery_table.movie_view.project
    dataset_id = google_bigquery_table.movie_view.dataset_id
    table_id   = google_bigquery_table.movie_view.table_id
  }
}

# Specify the IAM policy for principals that can access
# the authorized view. These users should already
# have the roles/bigqueryUser role at the project level.
data "google_iam_policy" "principals_policy" {
  binding {
    role = "roles/bigquery.dataViewer"
    members = [
      "group:example-group@example.com",
    ]
  }
}

# Set the IAM policy on the authorized  view.
resource "google_bigquery_table_iam_policy" "authorized_view_policy" {
  project     = google_bigquery_table.movie_view.project
  dataset_id  = google_bigquery_table.movie_view.dataset_id
  table_id    = google_bigquery_table.movie_view.table_id
  policy_data = data.google_iam_policy.principals_policy.policy_data
}

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。

ディレクトリを準備する

Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。

  1. Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf にする必要があります(例: main.tf)。このチュートリアルでは、このファイルを main.tf とします。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。

    新しく作成した main.tf にサンプルコードをコピーします。

    必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。

  3. 環境に適用するサンプル パラメータを確認し、変更します。
  4. 変更を保存します。
  5. Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
    terraform init

    最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行します。プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。

  3. Google Cloud プロジェクトを開いて結果を表示します。 Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

承認済みビューのユーザーまたはグループを管理する

ビューを承認したら、データセット、テーブル、ビューに対して次のタスクを行い、ビューへのアクセスを維持できます。

  • アクセス ポリシーを表示する。
  • アクセス権を付与する。
  • アクセス権を取り消す。
  • アクセスを拒否する。

詳細については、IAM を使用してリソースへのアクセスを制御するをご覧ください。

ビューへの承認を解除する

ビューへの承認を解除するには、次のいずれかのオプションを選択します。

コンソール

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

    [BigQuery] に移動

  2. [エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。

  3. [ 共有] > [ビューを承認] をクリックします。

  4. をクリックして [承認を解除] をクリックします。

  5. [閉じる] をクリックします。

bq

ビューへの承認を解除するには、bq rm コマンドを使用します。承認を解除するビューの table_id を入力します。

    bq rm \
    project_id:dataset:table_id
    

API

tables.delete メソッドを呼び出し、projectIDdatasetIDtableID の各プロパティを使用して、データセットの承認済みビューを削除します。詳細については、テーブルをご覧ください。

割り当てと上限

  • 承認済みビューには、データセットの上限が適用されます。詳細については、データセットの上限をご覧ください。
  • 承認済みビューを削除すると、そのビューへのすべての参照がシステムから削除されるまで最大 24 時間かかることがあります。エラーを回避するには、24 時間待った後で削除されたビューの名前を再利用するか、ビューに一意の名前を作成します。

高度なトピック

以降のセクションでは、承認済みビューの高度な使用方法について説明します。

行レベルのセキュリティと承認済みビューを組み合わせる

論理ビューまたはマテリアライズド ビューに表示されるデータは、基になるソーステーブルの行レベルのアクセス ポリシーに従ってフィルタリングされます。

行レベルのセキュリティがマテリアライズド ビューとどのように連携するかについては、他の BigQuery 機能での行レベルのセキュリティの使用をご覧ください。

列レベルのセキュリティと承認済みビューを組み合わせる

列レベルのセキュリティがビューに与える影響は、そのビューが承認済みビューであるかどうかとは無関係です。

権限が適用される詳しい仕組みについては、列レベルのセキュリティのクエリビューをご覧ください。

承認済みビューで BigQuery Sharing を使用する

BigQuery Sharing(旧 Analytics Hub)は、次の機能を備えたデータ交換プラットフォームです。

  • 組織の境界を越えてデータと分析情報を大規模に共有できる。
  • 堅牢なセキュリティとプライバシーのフレームワークが使用されている。
  • 共有データセットと呼ばれる BigQuery データセットと、それに関連付けられた承認済みビューと承認済みデータセットを、一連のサブスクライバーにパブリッシュできる。

リンク済みデータセットは、読み取り専用の BigQuery データセットです。これは、共有データセットへのポインタまたは参照として機能します。BigQuery Sharing リスティングをサブスクライブすると、データセットのコピーではなく、リンク済みデータセットがプロジェクトに作成されます。したがって、サブスクライバーはデータを読み取ることはできますが、その中のオブジェクトを追加することや更新することはできません。

リンク済みデータセット内のテーブルを参照するマテリアライズド ビューはサポートされていません

詳細については、BigQuery Sharing の概要をご覧ください。

次のステップ