🔖
BigQuery × dbt × Terraform でポリシータグ設定と個人情報マスキング
公開
2025-03-12
文章量
約2852字
株式会社ヤードの代表で、Yardの開発者です。 データプロダクトの受託開発や技術顧問・アドバイザーもお受けしております。 #データ利活用 #DevOps #個人開発
はじめに
BigQueryで個人情報などの秘匿データを適切に管理するためには、ポリシータグを活用してデータマスキングを実施する方法が推奨されています。
本記事では、Google CloudのポリシータグとデータマスキングポリシーをTerraformで設定し、それをdbtを通じてBigQueryのテーブルに付与する方法について解説します。
ポリシータグとデータマスキングポリシーの定義(Terraform)
まず、Terraformでポリシータグおよびマスキングポリシーを設定します。
Taxonomyの作成
resource "google_data_catalog_taxonomy" "personal_taxonomy" {
project = "my-project"
region = "asia-northeast1"
display_name = "Personal Table Masking Policy"
description = "個人情報のマスキング用ポリシータグ"
activated_policy_types = ["FINE_GRAINED_ACCESS_CONTROL"]
}
ポリシータグの作成(例: 企業名)
resource "google_data_catalog_policy_tag" "corpname" {
taxonomy = google_data_catalog_taxonomy.personal_taxonomy.id
display_name = "CorpName"
description = "企業名をマスクするためのポリシータグ"
}
ポリシータグのIAM設定
ポリシータグへの閲覧権限を特定のグループに付与します。
resource "google_data_catalog_policy_tag_iam_binding" "corpname_tag_viewer" {
policy_tag = google_data_catalog_policy_tag.corpname.id
role = "roles/datacatalog.categoryFineGrainedReader"
members = [
"group:admin@sample.com",
]
}
データマスキングポリシーの作成
作成したポリシータグに対してデータマスキングポリシーを設定します。
resource "google_bigquery_datapolicy_data_policy" "masking_corpname_policy" {
project = "my-project"
location = "asia-northeast1"
data_policy_id = "masking_corpname_policy"
policy_tag = google_data_catalog_policy_tag.corpname.id
data_policy_type = "DATA_MASKING_POLICY"
data_masking_policy {
predefined_expression = "ALWAYS_NULL"
}
}
マスキングポリシーへのアクセス権限設定
マスキングされたデータを閲覧できるユーザーをIAMで制御します。
resource "google_bigquery_datapolicy_data_policy_iam_binding" "corpname_masked_reader" {
project = "my-project"
location = "asia-northeast1"
data_policy_id = google_bigquery_datapolicy_data_policy.masking_corpname_policy.data_policy_id
role = "roles/bigquerydatapolicy.maskedReader"
members = [
"group:viewer@sample.com"
]
}
dbtを使ったポリシータグの付与方法
dbt_project.yml
にポリシータグIDを設定
Terraformで作成したポリシータグのIDをdbt_project.yml
に設定します。
= 略 =
vars:
policy_tags:
corpname_policy_tag: "projects/my-project/locations/asia-northeast1/taxonomies/{taxonomy_id}/policyTags/{policy_tag_id}"
= 略 =
dbtモデルへのポリシータグ設定
dbtモデル(例: user
)にポリシータグを付与します。
models/mart/_model.yml
:
version: 2
models:
- name: user
columns:
- name: id
- name: name
- name: corpname
policy_tags:
- '{ { var("policy_tags")["corpname_policy_tag"] }}'
dbtモデルの定義例
以下のようにモデルを定義します。
models/mart/user.sql
:
{{ config(
alias='test',
materialized='table',
) }}
select
1 id,
'toita' name,
'yard' corpname
dbtモデルの実行
モデルを実行するとポリシータグ付きのテーブルが作成されます。
$ dbt run --select user
注意点
- dbtはモデルの作成後にポリシータグを付与します。モデル作成が成功し、ポリシータグ付与が失敗すると、一時的に秘匿データが公開されるリスクがあります。
- モデルの再実行やCI/CDパイプラインなどでポリシータグの設定漏れが起きないよう、テストやレビューを徹底しましょう。
まとめ
本記事ではTerraformとdbtを連携してBigQueryにポリシータグを設定し、データマスキングを行う方法を解説しました。
適切な管理により、安全で堅牢なデータ基盤の構築を目指しましょう。