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

# Service Accounts locals { # Helpers for the clunky formatting of these values automation_SA = "serviceAccount:${google_service_account.automation.email}" server_SA = "serviceAccount:${google_service_account.server.email}" client_SA = "serviceAccount:${google_service_account.client.email}" } resource "google_service_account" "server" { account_id = "api-backend" display_name = "API Backend service account" depends_on = [google_project_service.enabled] } resource "google_service_account" "client" { account_id = "client-frontend" display_name = "Client Frontend service account" depends_on = [google_project_service.enabled] } resource "google_service_account" "automation" { account_id = "automation" display_name = "Automation service account" depends_on = [google_project_service.enabled] } # Server can access the database resource "google_project_iam_member" "server_permissions" { project = var.project_id role = "roles/cloudsql.client" member = local.server_SA depends_on = [google_service_account.server] } # Cloud Build can access the database resource "google_project_iam_member" "build_permissions" { project = var.project_id role = "roles/cloudsql.client" member = local.automation_SA depends_on = [google_service_account.automation] } # Server needs introspection permissions resource "google_project_iam_member" "server_introspection" { project = var.project_id role = "roles/run.viewer" member = local.server_SA depends_on = [google_service_account.server] } # Server needs to write to Cloud Trace resource "google_project_iam_member" "server_traceagent" { project = var.project_id role = "roles/cloudtrace.agent" member = local.server_SA depends_on = [google_service_account.server] }