この記事では、Data Catalog の Policy tags の使い方 について紹介します。
BigQuery ではプロジェクトやデータセット、テーブル単位でのアクセス制御が可能です。しかし、PII(個人を特定できる情報 - Personally Identitifiable Information )など、特定のカラムに対して個別のアクセス権を求めるニーズが高まっています。テーブルにアクセスできたとしてもそのテーブルの機密データを表示させたくないといったケースです。
Data Catalog の Policy tags では、BigQuery テーブルの特定のカラムに対してアクセス権限のコントロールをすることができる機能です。例えば、テーブル A のカラム B は個人情報が含まれているのでアクセスコントロールをしたい場合などに Policy tags が利用されます。
Policy tags の使い方を公式ドキュメントをなぞって紹介します。
BigQuery データセットとテーブルの作成
まずは BigQuery のデータセットを作成します。今回はデータセット名はpolicy_tags_demo
とします。bigquery-public-dataset > chicago_taxi_trips > taxi_trips の流れで「taxi_trips」テーブルをクリックします。そして画面上部の「COPY」をクリックし、taxi_trips テーブルをpolicy_tags_demo
データセットのtaxi_trips_copy
というテーブル名にコピーします。
コピーが完了したら BigQuery のコンソールへ移動し、以下の SQL を実行します。
まだポリシータグを付与していないので問題なくクエリを実行することができます。

ポリシータグを作成 & アタッチ
これからポリシータグを作成します。Data Catalog の Policy tags のコンソールへ移動します。そして画面上部の「CREATE TAXONOMY」をクリックします。

以下のキャプチャのように入力して「CREATE」をクリックします。

「Taxi trips policy tags」というポリシータグを作成することができました。

続いて Data Catalog の Search のコンソールへ移動し、検索ボックスに「taxi_trips_copy」と入力し、ヒットした「taxi_trips_copy」テーブルをクリックします。

「SCHEMA AND COLUMN TAGS」タブをクリックし、company カラムの Policy Tags のプラスボタンをクリックします。

「Sensitive taxi data」を選択して「SELECT」をクリックします。

company カラムに「Taxi trips policy tags」の「Sensitive taxi data」というポリシータグを付与することができました。

BigQuery のコンソールへ移動し、以下の SQL を実行すると権限エラーになります。
権限をプリンシパルに付与
Data Catalog の Policy tags のコンソールへ移動し、「Sensitive taxi data」を選択して画面上部の「SHOW INFO PANEL」をクリックすると権限の情報を見ることができます。「ADD PRINCIPAL」をクリックします。

プリンシパルを入力し、Role として「Fine-Grained Reader」を選択して「SAVE」をクリックします。

これで入力されたプリンシパルは「Sensitive taxi data」ポリシータグが付与されているカラムに対する SQL クエリが可能になります。
参考