terraform/iam.tf (75 lines of code) (raw):

/** * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ resource "null_resource" "org_policy_temp" { depends_on = [module.project_services] provisioner "local-exec" { working_dir = "${path.module}" command = "sh ${path.module}/scripts/execute-gcloud-cmd.sh ${var.project_id} YES" } } resource "null_resource" "delete_org_policy_temp" { provisioner "local-exec" { working_dir = "${path.module}" command = "sh ${path.module}/scripts/execute-gcloud-cmd.sh ${var.project_id} NO" } depends_on = [module.project_services, null_resource.org_policy_temp, google_cloud_run_service.backend ] } module "genai_cloudrun_service_account" { source = "terraform-google-modules/service-accounts/google" version = "~> 4.0" project_id = var.project_id names = [var.service_account] project_roles = [ "${var.project_id}=>roles/cloudsql.client", "${var.project_id}=>roles/bigquery.admin", "${var.project_id}=>roles/aiplatform.user", "${var.project_id}=>roles/datastore.owner" ] depends_on = [module.project_services] } resource "google_project_iam_member" "default_ce_sa_role" { for_each = toset([ "roles/storage.admin", "roles/artifactregistry.admin", "roles/firebase.admin", "roles/cloudbuild.builds.builder", "roles/logging.logWriter" ]) role = each.key member = "serviceAccount:${data.google_project.project.number}-compute@developer.gserviceaccount.com" project = var.project_id depends_on = [module.project_services] } resource "google_project_iam_member" "default_cloudbuild_sa_role" { for_each = toset([ "roles/firebase.admin", "roles/artifactregistry.admin", "roles/serviceusage.apiKeysAdmin", "roles/cloudbuild.builds.builder" ]) role = each.key member = "serviceAccount:${data.google_project.project.number}@cloudbuild.gserviceaccount.com" project = var.project_id depends_on = [module.project_services] } resource "google_cloud_run_service_iam_member" "invoker" { location = google_cloud_run_service.backend.location project = google_cloud_run_service.backend.project service = google_cloud_run_service.backend.name role = "roles/run.invoker" member = "allUsers" depends_on = [ google_cloud_run_service.backend ] }