特定のサービスにのみロールを割り当てる(リソース)
google_{サービス名}_iam_member
でつけれる
例としてfunctions(2世代)にロールを割り当てる
resource "google_cloudfunctions2_function_iam_member" "member" {
project = google_cloudfunctions2_function.function.project
location = google_cloudfunctions2_function.function.location
cloud_function = google_cloudfunctions2_function.function.name
role = "ここに割り当てたいロールを記載"
member = "ここにロールを割り当てるGSA等を記載"
}
特定のサービスにのみロールを割り当てる(データソース)
例として 特定のGCS
にロールを割り当てる方法
# まずはデータセットを作る
data "google_iam_policy" "policy" {
binding {
role = "ここに割り当てたいロールを記載"
members = [
"serviceAccount:ここにロールを割り当てるGSA等を記載,
]
}
}
# GCSを作る
resource "google_storage_bucket" "bucket1" {
name = "bucket1"
location = "asia-northeast1"
force_destroy = true
project = var.project
}
# 作った GCS にデータセットを割り当てる
resource "google_storage_bucket_iam_policy" "bucket1" {
bucket = google_storage_bucket.bucke1.name
policy_data = data.google_iam_policy.policy.policy_data
}
※google_storage_bucket_iam_policy
ではbucket1の上記で指定したロール以外は全て剥奪される
PJ単位でフォルダを分けてるが共通部分をmoduleに切り出す構成
構成
terraform-repo ├── module │ └── 共通module.tf │ └── variable.tf ├── production │ └── main.tf └── staging └── main.tf
共通module.tf
# 実際にロールをbindingする処理
resource "google_project_iam_binding" "binding" {
project = var.project
# map(list(string))でもらってるので一旦for_eachしてroleとmembersに渡す
for_each = var.bindings
role = each.key
members = each.value
}
variable.tf
# main.tfで定義したロールを共通module.tfで使えるようにする処理
variable "project" {
type = string
description = "プロジェクト"
}
variable "bindings" {
type = map(list(string))
description = "IAMの定義(ロール名がkey, 紐付けるアカウントのリストがvalue)"
}
main.tf
locals {
bindings1 = {
"ここに付与したいロールを記載" = setunion(
"ここに追加したいGSA等を記載",
)
}
module "任意のモジュール名" {
source = "../module/"
project = "PJ名を記載"
bindings = bindings1
}
コメント