はじめに
本記事ではポリシータグの設定からそのポリシータグをBigQueryの対象カラムに反映させるまでTerraformで実装する方法を解説します。
更にその先のユースケースとして、LookerStudioのレポート上ではポリシータグのマスキングルールが適用されている列を閲覧したい場合が考えられまれますので、本記事ではLookerStudio周りの権限設定にも触れていきます。
そもそもポリシータグやマスキングルールとは?と気になる方は以下のの記事を参照してください。

注意
Troccoで定期的に実行されるパイプラインに組み込んでいるテーブルに対してポリシータグを設定する場合、パイプライン実行時にポリシータグが外されてしまう事象を確認しています。(2024年9月時点)
これはデータ転送時のWRITE_TRUNCATEモードによる影響が関係していると推測しています。
以下、Terraformコードの全体です。
以下より、上記Terraformコードを部分的に分けて解説していきます。
変数定義
project_id
変数が定義されています。Google CloudのプロジェクトIDを指定するための変数で、デフォルト値はexample.project
に設定されています。
Google Cloud プロバイダー設定
Google Cloudのプロバイダーを設定しています。var.project_id
変数でプロジェクトIDが指定され、リージョンはasia-northeast1
に設定されています。
Looker Studio用サービスアカウント作成
Looker Studioビューアー用のサービスアカウントを作成しています。account_id
とdisplay_name
を設定し、BigQueryデータの閲覧やジョブ実行に使用されます。
IAMロールの割り当て: BigQueryデータ閲覧者
サービスアカウントにroles/bigquery.dataViewer
のロールを付与し、BigQueryデータの閲覧権限を与えています。
IAMロールの割り当て: BigQueryジョブユーザー
サービスアカウントにBigQueryジョブを実行できるroles/bigquery.jobUser
のロールを付与しています。
IAMロールの割り当て: アクセストークン作成者
特定のサービスエージェントにアクセストークン作成権限を与えるロールroles/iam.serviceAccountTokenCreator
を付与しています。
Googleグループにサービスアカウントユーザーロールの付与
Looker Studioのサービスアカウントに対してGoogleグループadmin@sample.co.jp
がroles/iam.serviceAccountUser
のロールを持つようにバインディングしています。
このロールは、そのグループのメンバーがサービスアカウントを使用して操作を行うことを許可します。
ポリシータグの作成: Personalデータ
personalデータのマスキングポリシーを適用するためのポリシータグ分類を作成しています。リージョンはasia-northeast1
に設定されています。
ポリシータグの作成: NameとCorpName
personalデータのNameとCorpNameに関連するデータをマスキングするためのポリシータグを作成しています。
IAMロールの割り当て: ポリシータグでマスキングされているカラムを閲覧させるグループを設定
NameポリシータグのIAMメンバーにデータ閲覧権限を与えています。同様にCorpNameにも同じ設定がされています。
roles/datacatalog.categoryFineGrainedReader
ロールを持つユーザーやグループはマスキングされいているデータを閲覧することができます。
IAMロールの割り当て: ポリシータグでマスキングされているカラムを閲覧させないグループを設定
Nameポリシータグに対して、データマスキングを適用するためのIAMバインディングを設定しています。同様にCorpNameにも同じ設定がされています。
roles/bigquerydatapolicy.maskedReader
ロールを持つユーザーやグループはマスキングルールが適用されているカラムは閲覧できません。
データマスキングポリシーの作成
personalデータのNameとCorpNameに対するマスキングルールを設定しています。マスキングルールとしては「常にNULL」を返す設定です。
BigQueryテーブルリソース
このコードはBigQueryのcustomerデータセットにidentityというテーブルを作成し、データの機密性を確保するために特定のカラムにデータマスキングポリシーを適用しています。
テーブルのスキーマにはnameとcorpNameという2つのカラムがあり、それぞれSTRING型のデータを格納しデータがなくても許容(NULLABLE)される設定です。
さらにこれらのカラムにはデータマスキング用のポリシータグが付与されており、権限のあるユーザーのみが実際のデータにアクセス可能で、それ以外のユーザーにはデータがマスクされて見えないように設定されています。
このようにして、BigQuery内でのデータセキュリティを強化しています。
まとめ
この記事はBigQueryのポリシータグの作成から対象カラムへの適用までをTerraformで実装するコードについて解説しました。
Terraformでインフラ構成を管理することは大規模なチームになるほどその恩恵を享受することができます。
今後ビジネスのスケールなどでチームが拡大する可能性がある場合は早めにインフラをTerraformで管理することをお勧めします。
参考

備考
Hakky では社内のデータ活用やサービスとしてデータ提供を行うためのソリューションを展開しております。
「社内のデータを一元管理し、よりデータドリブンな組織を構築したい」など具体的な相談はもちろんのこと、「どんなことをお願いできるのか知りたい」や「こんなことをやりたい」など、ご検討段階でも構いませんので、ぜひお気軽にフォームよりお問い合わせくださいませ。