G-gen の杉村です。 Google Cloud(旧称 GCP)の BigQuery にはアクセス制御のための仕組みが多数存在します。その中でも、承認済みビューと承認済みデータセットというよく似た名前の2つの機能をご紹介します。
この機能を使うと、利用者に見せるデータの範囲(カラムやレコード)を制限したり、 BigQuery の権限管理に関する運用を楽にしたりすることができます。
BigQuery へのアクセス制御について
当記事でご紹介する「承認済みビュー」機能と「承認済みデータセット」機能を理解するには、 Google Cloud の IAM の仕組みの基本と、 BigQuery のアクセス制御に関する知識が前提として必要です。これらの前提知識については、以下の記事をご参照ください。
Google Cloud の IAM の基本
BigQuery における IAM
承認済みビュー
承認済みビューとは
承認済みビュー(Authorized view)とは、利用者に対して、ビューの元となるソーステーブルへのアクセス権限を与えることなく、ビューへのアクセス権限のみを与えることにより、アクセス制御を楽にしたり、利用者に見せるデータの粒度を制御したりできる機能です。
- 参考 : 承認済みビューとマテリアライズド ビュー
図で説明します。

この図の例の場合、利用者はビューへの権限を持っていますが、ビューの元となっているテーブル(ソーステーブル)への権限は持っていません。
通常ですと、利用者がビューへクエリするとき、ビューへのデータアクセス権限を持っていたとしても、同時にビューのソーステーブルへのデータアクセス権限も持っていなければ、クエリは権限エラーで失敗します。
しかし承認されたビューの機能により、ソーステーブルの所属するデータセットに対して「特定のビューからのアクセスを承認する」という設定を実施することで、利用者は、ビューへのアクセス権限さえもっていればクエリを実行することができるようになります。
これにより、利用者はビューだけに閲覧権限を持つので、ビューの SQL で定義された範囲のデータだけを見られるようになります。ビュー作成時の SQL の SELECT 句や WHERE 句で適切にデータを絞れば、利用者に見せたいデータの範囲を絞って見せることができるようになります。
なお、この機能では、データセットが承認対象のビューの一覧を持ちます。例として上記の図では source_dataset
の承認対象ビュー一覧に view_a
を加えることで、利用者はソーステーブルやソースデータセットに権限がなくても、 view_a
にクエリを投げることができます。
ソーステーブルとビューは、同じデータセットに存在していても、違うデータセットに存在していても構いません。また、異なるプロジェクトでも問題ありません。ただしアクセス権限設定を分かりやすくするために、ソーステーブルとビューは異なるデータセットにしたほうが望ましいでしょう。
ユースケース
以下のようなユースケースで用います。
- 利用者の権限をビューやそのデータセットにのみ与えることで、IAM 管理運用を楽にする
- 権限をソーステーブルやソースデータセットに付与する必要がないため、権限管理のポイントを集約できる
- ビュー生成 SQL で 見せたいデータだけを抽出することで、利用者が見ることのできるカラムやフィールドを制限する
- ただしこの場合、管理者側で任意のデータだけを抽出する SQL を書いてビューを作成し、利用者はビューの SQL を編集できないようにする必要がある
設定手順
おおまかな手順は以下のとおりです。
- ソーステーブルからビューを作成
- ビューまたはそのデータセットに、利用者からのアクセス権限を付与(
BigQuery データ閲覧者
等) - ソーステーブルが所属するデータセットの承認対象ビュー一覧に承認したいビューを追加
詳細な設定手順は、以下のドキュメントに記載されています。
- 参考 : ビューを承認する
ポイントは、ソーステーブルが所属するデータセットが、承認対象ビューの一覧を持つという点です。ソーステーブルでビューを承認するのではなく、ソーステーブルが所属しているデータセットの方でビューを承認します。

制約
制約として、ソーステーブルとビューは、同じリージョンに存在する必要があります。
もう1つの考慮点は Quota(割り当て)です。1つのデータセットで承認可能なリソース数は最大 2,500 個という制限があります。この数には後述の承認済みデータセットや、この記事で扱っていない承認済み関数(Authorized Functions)も含まれます。
承認するビューの数が多すぎてこの制限に抵触しそうな場合は、後述の承認されたデータセット機能を使って、データセット単位に「まとめる」ことを考えましょう。
承認済みデータセット
承認済みデータセットとは
承認されたデータセットは、承認されたビューの拡張機能です。基本となる考え方は承認されたビュー機能と同じですが、承認する対象の単位がビューではなく、データセットになっています。
- 参考 : 承認済みデータセット
承認されたビュー機能ではソースデータセット側からビュー単位で個別に承認するのに対し、承認済みデータセット機能ではデータセット単位で承認をするという点が異なります。
この機能を用いて、あるデータセットが別のデータセットを承認すると、承認したデータセットに入っている全てのビューが承認され、クエリを受け付けることができます。
承認対象ビューの数が多い場合、個別にビューを承認すると手間だったり、ビューを作成するたびに承認を追加する必要がありますが、データセット単位で承認しておけばそのような手間がなくなります。
ユースケース
ユースケースは、「承認されたビュー」と同様です。以下のような場合に「承認されたビュー」ではなく「承認されたデータセット」を使うと良いでしょう。
- 承認対象のビューの数が多い
- 承認対象のビューが増えたり減ったりする頻度が多く、都度メンテナンスする手間を減らしたい
設定手順
おおまかな手順は以下のとおりです。
- ビューを入れるデータセットを作成
- ソーステーブルから、ビューを作成
- ビューまたはそのデータセットに、利用者からのアクセス権限を付与(
BigQuery データ閲覧者
等) - ソーステーブルが所属するデータセットの承認対象データセット一覧に、承認対象のデータセットを追加
設定手順は基本的に「承認されたビュー」と同じですが、承認対象がビューなのか、データセット全体なのか、が異なります。

詳細な手順は、以下のドキュメントを参照してください。
- 参考 : データセットの承認
制約
承認する側とされる側のデータセットは、同じリージョンに存在する必要があります。
- 参考 : 制限事項
杉村 勇馬 (記事一覧)
執行役員 CTO / クラウドソリューション部 部長
元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。
Follow @y_sugi_it