G-gen の杉村です。 Google Cloud (旧称 GCP) の BigQuery にはアクセス制御のための仕組みが多数存在します。その中でも 承認されたビュー と 承認されたデータセット というよく似た名前の2つの機能をご紹介します。
この機能を使うと、利用者に見せるデータの範囲 (カラムやレコード) を制限したり、 BigQuery の IAM 管理運用を楽にしたりすることができます。
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 データ閲覧者
等) - ソーステーブルが所属するデータセットの承認対象ビュー一覧に承認したいビューを追加
詳細な設定手順は、以下のドキュメントに記載されています。
ポイントは、ソーステーブルが所属する データセットが、承認対象ビューの一覧を持つ ということです。
ソーステーブルでビューを承認するのではなく、ソーステーブルが所属しているデータセットの方でビューを承認します。
制約
制約として、ソーステーブルとビューは 同じリージョン に存在する必要があります。
もう一つの考慮点は Quota (上限) です。
一つのデータセットで承認可能なリソース数は最大 2,500 個という制限があります。
この数には後述の承認されたデータセットや、この記事で扱っていない 承認済み関数 (Authorized Functions) も含まれます。
承認するビューの数が多すぎてこの制限に抵触しそうな場合は、後述の承認されたデータセット機能を使って、データセット単位に「まとめる」ことを考えましょう。
承認されたデータセット
承認されたデータセットとは
承認されたデータセット は、承認されたビューの拡張機能です。
基本となる考え方は承認されたビュー機能と同じです。
異なる点は「承認されたビュー機能」ではソースデータセット側からビュー単位で個別に承認するのに対し、「承認されたデータセット機能」ではデータセット単位で承認をするという点です。
この機能を用いて、あるデータセットが別のデータセットを承認すると、 承認対象のデータセットに入っている全てのビューが承認され 、クエリを受け付けることができます。
承認対象ビューの数が多い場合、個別にビューを承認すると手間だったり、ビューを作成するたびに承認を追加する必要がありますが、データセット単位で承認しておけばそのような手間がなくなります。
ユースケース
ユースケースは、「承認されたビュー」と同様です。
以下のような場合に「承認されたビュー」ではなく「承認されたデータセット」を使うと良いでしょう。
- 承認対象のビューの数が多い
- 承認対象のビューが増えたり減ったりする頻度が多く、都度メンテナンスする手間を減らしたい
設定手順
おおまかな手順は以下のとおりです。
- ビューを入れるデータセットを作成
- ソーステーブルから、ビューを作成
- ビューまたはそのデータセットに、利用者からのアクセス権限を付与 (
BigQuery データ閲覧者
等) - ソーステーブルが所属するデータセットの Authorized Views 一覧に、承認対象の データセット を追加
設定手順は基本的に「承認されたビュー」と同じですが、承認対象がビューなのか、データセット全体なのか、の違いです。
制約
制約は承認されたビューと同等ですので、先程の記述をご参照ください。
杉村 勇馬 (記事一覧)
執行役員 CTO / クラウドソリューション部 部長
元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。
Follow @y_sugi_it