Search code examples
google-cloud-platformterraformgoogle-cloud-storageterraform-provider-gcpinfrastructure-as-code

How to create public google bucket with uniform_bucket_level_access enabled?


I want to create publicly accessible Google Cloud Bucket with uniform_bucket_level_access enabled using terraform. All of the examples on provider's docs which are for public bucket does not contain this setting.

When I try to use:

resource "google_storage_bucket_access_control" "public_rule" {
  bucket = google_storage_bucket.a_bucket.name
  role   = "READER"
  entity = "allUsers"
}

resource "google_storage_bucket" "a_bucket" {
  name          = <name>
  location      = <region>
  project       = var.project_id
  storage_class = "STANDARD"
  uniform_bucket_level_access = true
  versioning {
    enabled = false
  }
}

I get the following error:

 Error: Error creating BucketAccessControl: googleapi: Error 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access, invalid

If I remove the line for uniform access everything works as expected. Do I have to use google_storage_bucket_iam resource for achieving this ?


Solution

  • You will have to use google_storage_bucket_iam. I like to use the member one so I don't accidentally clobber other IAM bindings, but you can use whatever your needs dictate.

    resource "google_storage_bucket_iam_member" "member" {
      bucket = google_storage_bucket.a_bucket.name
      role   = "roles/storage.objectViewer"
      member = "allUsers"
    }
    

    EDIT: Use this instead of the google_storage_bucket_access_controls resource that you have.