irisuinwl’s diary

サークル不思議(略)入巣次元の、数学や技術的なことを書きます。

terraformでミスったGCSのバケットを消す

こんにちは。

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" {

対処

  1. console上でbucketを消す

  2. 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できた。

おしまい