用terraform整理管理BigQuery的权限

前提 (Qiantí)

    terraform 0.12以降の書き方を含みません。

写东西

    • (利用者向けの)BigQuery周りの権限管理をterraformで管理する方法(一例)

※一例なので、良い方法は常に模索したい。

不写书

    terrformの基本的な使い方

制定方针

Google_BigQuery.png

如何设置

事先准备

    • 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

广告
将在 10 秒后关闭
bannerAds