こんにちは。
terraformでGCSのbucketを作って遊んでたら、サービスアカウントのみにしか編集権限をつけなくて自分自身(admin role)がbucketを編集出来なくなる事態になったので解決法をメモろうと思います。
現象
こんな感じのポリシーを作ったらアクセスできないバケットが出来てしまい、terraform apply時のbucket参照できなくて、applyできなくなりました。
resource "google_storage_bucket" "mlops_bucket" { name = var.gcs.bucket_name location = "ASIA-NORTHEAST1" uniform_bucket_level_access = true } data "google_iam_policy" "admin" { binding { role = "roles/storage.admin" members = [ "serviceAccount:my-service-account@appspot.gserviceaccount.com", // "projectOwner:${var.project_id}", // 本当はこれが必要 // "projectEditor:${var.project_id}" // 本当はこれが必要 ] } } resource "google_storage_bucket_iam_policy" "policy" { bucket = google_storage_bucket.mlops_bucket.name policy_data = data.google_iam_policy.admin.policy_data }
こんな表示がでるよ
$ terraform apply Error: Error when reading or editing Resource "storage bucket \"b/mlops-storage-example\"" with IAM Policy: Error retrieving IAM policy for storage bucket "b/mlops-storage-example": googleapi: Error 403: **** does not have storage.buckets.getIamPolicy access to the Google Cloud Storage bucket., forbidden on gcs.tf line 17, in resource "google_storage_bucket_iam_policy" "policy": 17: resource "google_storage_bucket_iam_policy" "policy" {
対処
console上でbucketを消す
terraform state上からリソースを消す(なんかこれ消さないと毎回作るっぽい)
irisu@DESKTOP-JTK8J9L:~/mlops-experience/mlflow/terraform$ terraform state rm google_storage_bucket.mlops_bucket Removed google_storage_bucket.mlops_bucket Successfully removed 1 resource instance(s). irisu@DESKTOP-JTK8J9L:~/mlops-experience/mlflow/terraform$ terraform state rm google_storage_bucket_iam_policy.policy Removed google_storage_bucket_iam_policy.policy Successfully removed 1 resource instance(s).
これでapplyできた。
おしまい