google_project_iam_binding は注意して使った方がよさそう
Terraform の Google Provider の google_project_iam_binding
は注意して使った方がよさそう。
Google: google_project_iam - Terraform by HashiCorp
google_project_iam_binding の使用例
例えば「編集者」ロールを ptiringo@example.com
に与える場合、google_project_iam_binding
を用いて書くと以下のようになる。
resource "google_project_iam_binding" "editor" {
role = "roles/editor" // 編集者
members = [
"user:ptiringo@example.com"
]
}
この設定でも問題なくロールを付与することができるのだが、google_project_iam_binding
の気を付けないといけないところは、指定されたメンバーに "のみ" このロールが付与されるように振る舞うというところ。つまり指定されたメンバー以外に当該のロールを保持しているアカウントがあれば、そのアカウントからロールが剥奪される動きをとる。
google_project_iam_binding を使用する場合の注意点
具体的に問題となりうるのは、Google 管理のサービスアカウントのロールの剥奪を行ってしまう場合だ。
例えば、内部の Google プロセスを実行する Google API サービス エージェント (project-number@cloudservices.gserviceaccount.com
) には「編集者」ロールが自動的に付与されるが、Terraform で上記の設定を行なってしまうと、Terraform 実行時にこのロールを剥奪してしまう(さらにこの動きは Terraform の出力結果には表示されない)。
警告: Google API サービス エージェントに付与されているロールは変更しないでください。また、取り消しも行わないでください。これらのロールを変更または取り消すと、一部の Google Cloud サービスが使用できなくなります。
https://cloud.google.com/iam/docs/service-accounts?hl=ja#google-managed
Google のドキュメントには上記の記載があり、実際に各所に問題が発生することになる。
回避方法としての google_project_iam_member
こういった場合、google_project_iam_member
を使うのが無難だろう。
resource "google_project_iam_member" "editor" {
role = "roles/editor" // 編集者
member = "user:ptiringo@example.com"
}
google_project_iam_member
でもアカウントにロールを付与することができる。こちらは指定されたメンバーに当該のロールを付与し、それ以外に当該のロールを保有するアカウントに対しては影響を与えない動きをとる。
Discussion