- 岸下優介
- DataEngineering
- 約 1,600 文字
- 500 View
目次
はじめに
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制御を試してみてはいかがでしょうか?