radlab-ui/automation/terraform/infrastructure/iam_permissions.tf (139 lines of code) (raw):

/** * Copyright 2023 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. */ locals { super_admin_project_roles = [ "roles/owner", "roles/iam.serviceAccountUser", "roles/iam.serviceAccountTokenCreator" ] developers_infrastructure_roles = [ "roles/pubsub.editor", "roles/resourcemanager.projectIamAdmin", "roles/cloudbuild.builds.editor", "roles/secretmanager.admin", "roles/serviceusage.serviceUsageConsumer" ] developers_frontend_roles = [ "roles/appengine.appAdmin", "roles/iam.serviceAccountUser", "roles/storage.objectAdmin", "roles/cloudbuild.builds.editor", "roles/logging.viewer", "roles/pubsub.publisher", "roles/cloudfunctions.invoker", "roles/serviceusage.serviceUsageConsumer", "roles/firebase.developAdmin" ] developers_backend_api_roles = concat(local.developers_frontend_roles, [ "roles/pubsub.editor", "roles/cloudfunctions.developer", "roles/secretmanager.admin" ]) developers_frontend_permissions = flatten([ for user in var.developers_frontend : [ for role in local.developers_frontend_roles : { user = user role = role } ] ]) developers_backend_api_permissions = flatten([ for user in var.developers_backend_api : [ for role in local.developers_backend_api_roles : { user = user role = role } ] ]) developers_infrastructure_permissions = flatten([ for user in var.developers_infrastructure : [ for role in local.developers_infrastructure_roles : { user = user role = role } ] ]) super_admin_permissions = flatten([ for user in var.super_admins : [ for role in local.super_admin_project_roles : { user = user role = role } ] ]) ui_identity_permissions = flatten([ for user in setunion(var.developers_backend_api, var.developers_frontend) : [ for role in [ "roles/iam.serviceAccountUser", "roles/iam.serviceAccountTokenCreator" ] : { user = user role = role } ] ]) } resource "google_project_iam_member" "developers_infrastructure_permissions" { for_each = { for permission in local.developers_infrastructure_permissions : "${permission.user}.${permission.role}" => permission } project = module.project.project_id member = each.value.user role = each.value.role } resource "google_project_iam_member" "developers_frontend_permissions" { for_each = { for permission in local.developers_frontend_permissions : "${permission.user}.${permission.role}" => permission } project = module.project.project_id member = each.value.user role = each.value.role } resource "google_project_iam_member" "developers_api_permissions" { for_each = { for permission in local.developers_backend_api_permissions : "${permission.user}.${permission.role}" => permission } project = module.project.project_id member = each.value.user role = each.value.role } resource "google_project_iam_member" "super_admin_permissions" { for_each = { for permission in local.super_admin_permissions : "${permission.user}.${permission.role}" => permission } member = each.value.user project = module.project.project_id role = each.value.role } resource "google_billing_account_iam_member" "super_admin_billing_permissions" { for_each = var.set_billing_permissions ? var.super_admins : [] member = each.value billing_account_id = var.billing_account_id role = "roles/billing.admin" } resource "google_service_account_iam_member" "ui_developer_access" { for_each = { for permission in local.ui_identity_permissions : "${permission.user}.${permission.role}" => permission } member = each.value.user role = each.value.role service_account_id = google_service_account.radlab_ui_webapp_identity.id } resource "google_secret_manager_secret_iam_member" "ui_developer_access" { for_each = var.developers_frontend member = each.value role = "roles/secretmanager.secretAccessor" secret_id = google_secret_manager_secret.git_repo_access_token.id }