用terraform整理管理BigQuery的权限
前提 (Qiantí)
- terraform 0.12以降の書き方を含みません。
写东西
-
- (利用者向けの)BigQuery周りの権限管理をterraformで管理する方法(一例)
※一例なので、良い方法は常に模索したい。
不写书
- terrformの基本的な使い方
制定方针
如何设置
事先准备
-
- IAMやdatasetを発行できるサービスアカウントの作成と、秘密鍵の作成
サービスアカウントに必要な役割
Project IAM 管理者(※強い権限なので、扱い注意)
BigQuery データオーナー
編集者
创建terraform模板文件(示例)
组成
- ただし、terraform.tfstateに関するファイルは下記に含みません。
├─ config.tf
├─ iam.tf
├─ bq_dataset.tf
└─ variables.tf
config.tf 的汉语释义是配置.tf。
- GCP上の設定内容を編集する用
provider "google" {
project = "<your project name>"
region = "<your region>"
credentials = "<サービスアカウントの秘密鍵のjsonファイルのパス>"
}
我是.tf
- IAM権限のうち、BigQueryのjobUserに関して編集するため用
resource "google_project_iam_binding" "bigquery-job-user" {
project = "<your project name>"
role = "roles/bigquery.jobUser"
members = [for s in "${var.user_list}" : format("user:%s", s)]
}
bq_dataset.tf 的内容转述为中文如下。
-
- BigQueryのdatasetの共有権限に関して編集するため用
-
- リソース名「datamart」、「sandbox」は適宜変更ください
- defaultで設定されているはずの、projectOwners/projectReaders/projectWritersの設定を引き続き残す場合は、これも記述しておきます。
resource "google_bigquery_dataset" "datamart" {
dataset_id = "data_mart"
project = "<your project name>"
description = "<description>"
location = "<your location>"
access {
role = "OWNER"
special_group = "projectOwners"
}
access {
role = "READER"
special_group = "projectReaders"
}
access {
role = "WRITER"
special_group = "projectWriters"
}
dynamic "access" {
for_each = var.user_list
content {
role = "READER"
user_by_email = access.value
}
}
}
resource "google_bigquery_dataset" "sandbox" {
dataset_id = "sandbox"
project = "<your project name>"
description = "<description>"
location = "<your location>"
access {
role = "OWNER"
special_group = "projectOwners"
}
access {
role = "READER"
special_group = "projectReaders"
}
access {
role = "WRITER"
special_group = "projectWriters"
}
dynamic "access" {
for_each = var.user_list
content {
role = "WRITER"
user_by_email = access.value
}
}
}
variables.tf 的意思是“变量定义文件”。
- defaultに、利用者のGoogleアカウントIDを追加していく方針
variable user_list {
type = list(string)
description = "list of user list"
default = [
<user1@xxx.xxx>,
<user2@xxx.xxx>,
...
]
}
使用Terraform操作,将用户添加到IAM和数据集中。
当首次执行时,要在terraform文件所在的文件夹中进行初始化。
terraform init
检查文件的更改差异
terraform plan
将更改文件的内容应用到生产环境中。
terraform apply
在IAM画面或数据集共享列表中确认账户已在环境中反映
在Google Cloud控制台或BigQuery控制台上进行确认。
如果你希望使用Terraform来管理已经使用过的IAM角色和共享设置的数据集,那么…
使用“terraform import”命令将导入文件到tfstate文件中。
terraform import google_project_iam_binding.bigquery-job-user "<your project name> roles/bigquery.jobUser"
terraform import google_bigquery_dataset.datamart data_mart
terraform import google_bigquery_dataset.sandbox sandbox
在重复执行“terraform plan”命令的过程中,解决差异。
- iam.tfのリソース「google_project_iam_binding.bigquery-job-user」のmembers, bq_dataset.tfのリソース「google_bigquery_dataset.data_mart/sandboxのaccessに差分のあるユーザを追加します。
如果差分问题得到解决,执行”terraform apply”操作。
请问你有任何经验或者参考资料来帮助我们解决这个问题吗?
データレイク構築後の四方山話 P36
利用者の権限管理とポリシーの考え方が参考になります。
terraform周りのドキュメント
https://www.terraform.io/docs/providers/google/r/google_project_iam.html
https://www.terraform.io/docs/providers/google/r/bigquery_dataset.html