I would like to add the allUsers member to a google_cloud_run_service with the Cloud Run Invoker role automatically using Terraform.
To get around this:
Only authenticated invocations are allowed for this service. To allow unauthenticated invocations, add "allUsers" as a member and assign it the "Cloud Run invoker" role.
I don't have any issue adding the allUsers member manually and setting the role to Cloud Run Invoker.
But I was hoping that this could be done with Terraform.
I tried the following:
data "google_iam_policy" "noauth" {
binding {
role = "roles/run.invoker"
members = [
"allUsers",
]
}
}
# Enable public access on Cloud Run service
resource "google_cloud_run_service_iam_policy" "noauth" {
location = google_cloud_run_service.default.location
project = google_cloud_run_service.default.project
service = google_cloud_run_service.default.name
policy_data = data.google_iam_policy.noauth.policy_data
}
But it does not seem to create the allUsers member after applying terraform plan and terraform apply.
Update:
main.tf
terraform {
required_version = "= 0.14.7"
backend "gcs" {
bucket = "mybucket-terraform-test"
prefix = "backend"
}
required_providers {
google = {
source = "hashicorp/google"
version = "~> 3.42.0"
}
}
}
foo.tf
resource "google_service_account" "service_account" {
account_id = "project_name-cloudrun"
}
resource "google_service_account_iam_binding" "admin-account-iam" {
service_account_id = google_service_account.service_account.name
role = "roles/iam.serviceAccountUser"
members = [
"user:user@myorg.com",
]
}
resource "google_cloud_run_service" "default" {
name = "myproject-backend"
location = "us-central1"
template {
spec {
service_account_name = "myproject-cloudrun@myproject-dev.iam.gserviceaccount.com"
containers {
image = "us.gcr.io/myproject-dev/myproject/myproject-backend@sha256:abc123"
}
}
}
}
## not working as expected ##
data "google_iam_policy" "noauth" {
binding {
role = "roles/run.invoker"
members = [
"allUsers",
]
}
}
resource "google_cloud_run_service_iam_policy" "noauth" {
location = google_cloud_run_service.default.location
project = google_cloud_run_service.default.project
service = google_cloud_run_service.default.name
policy_data = data.google_iam_policy.noauth.policy_data
}
##