はじめに
BigQueryは完全マネージドな、ペタバイトスケールかつコスパのよいデータウェアハウスとして知られております。そのため、ほぼリアルタイムで膨大な量のデータを解析することを可能としております。
+便利なツールである一方、BigQueryで取り扱うデータには個人情報が含まれていることもあり、適切なアクセス制御が望まれます。
本記事では、Resource Managerのタグ機能を利用して、Terraformによるアクセス制御の実装を紹介したいと思います。
Resource Managerのタグとは
Google Cloudのリソースに対して、Key-Valueペアでタグを付与してIAMの条件に含めることができる機能です。
+例えばBigQueryのデータセットであれば、Key:environment
に対してValue:dev
, stg
, prd
を用意したり、Key:dataset_type
に対してValue:non-pii
, pii
(個人情報を含むか否か)を用意したりなど、データの種類に応じてタグを付与して、より詳細な条件でIAMを管理することができます。
KeyとValueを作ってみる
早速Terraformを書いていきます。
+タグはOrganization配下での管理となります。まずはKeyを作ります。
+resource "google_tags_tag_key" "env_key" { |
このKeyに対してValueを作ります。
+resource "google_tags_tag_value" "dev_tag" { |
適用後、コンソールを見てみましょう。
environment
に対して、dev
, stg
, prd
というKey-Valueペアが生成されました。
BigQueryのDatasetにタグを付与する
今回生成したタグをBigQueryのDatasetに付与していきましょう。
まずは以下のデータセットを用意します。
resource "google_bigquery_dataset" "dataset_dev" { |
データセットへタグを付与する方法ですが、
+-
+
- Terraform +
- gcloudコマンド +
- Google Cloudコンソール +
の3つの方法が存在します。
+Terraformでタグを付与する
Terraformでは、google_tags_location_tag_binding
を利用してタグを付与します。
※本リソースは、現時点(2023/10/15)ではGoogle Betaとなっております。
Terraform公式 - google_tags_location_tag_binding
+data "google_tags_tag_key" "env_key" { |
gcloudコマンドでタグを付与する
以下のコマンドで付与することができます。
+gcloud alpha resource-manager tags bindings create \ |
権限が不足している場合は、Organizationにて以下の権限が必要になります。
+-
+
- roles/resourcemanager.tagUser +
コンソールでタグを付与する
BigQueryのページから、データセットをクリックすると以下のようなデータセット情報が表示されます。
この画面から詳細を編集に移動して下さい。
タグを追加を押すことで、所望のタグを付与することができます。
+ + +付与されたタグは「タグ」の箇所に記載されるようになります。
+ + +IAMを付与する
データセットにタグも付与できたので、最後にIAMを付与しましょう。
IAM条件も記載し、dev
タグが一致するデータセットのみを閲覧許可します。
resource "google_project_iam_member" "test_user" { |
適用後、BigQueryを見てみるとちゃんとdevのデータセットのみが見えていることがわかります。
+ + +まとめ
本記事ではタグを利用したBigQueryデータセットのアクセス権限制御について紹介しました。
+データセット1つ1つのアクセス制御を行うには、各データセットに対してIAM(roles/bigquery.dataViewerなど)を割り当てる必要があったのですが、データセットに付与されたタグでまとめてIAMを管理できると適切な粒度でアクセス制御ができ、タグで閲覧可能な範囲がまとめられるので管理も楽できるなーと思いました。
+データのセキュリティを強固にするには、内部のメンバーに対してのデータアクセス制御も非常に重要となります。ぜひタグベースのIAM制御を試してみてはいかがでしょうか?
+ + +