execution/00-bootstrap/iam.tf (259 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. /******************************************** Service Account used to run Organization Stage *********************************************/ module "organization" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v34.1.0" project_id = var.bootstrap_project_id name = var.organization_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.organization_administrator } iam_project_roles = { (var.network_hostproject_id) = [ "roles/iam.serviceAccountUser", "roles/serviceusage.serviceUsageAdmin", ] (var.network_serviceproject_id) = [ "roles/iam.serviceAccountUser", "roles/serviceusage.serviceUsageAdmin", ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /******************************************** Service Account used to run Networking Stage *********************************************/ module "networking" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.networking_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.networking_administrator } iam_folder_roles = { (var.folder_id) = [ "roles/compute.xpnAdmin", ] } iam_project_roles = { (var.network_hostproject_id) = [ "roles/compute.networkAdmin", ] (var.network_serviceproject_id) = [ "roles/cloudsql.viewer" ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /******************************************** Service Account used to run Security Stage *********************************************/ module "security" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.security_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.security_administrator } iam_project_roles = { (var.network_hostproject_id) = [ "roles/compute.securityAdmin" ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /******************************************** Service Account used to run CloudSQL Producer Stage *********************************************/ module "cloudsql_producer" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.producer_cloudsql_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.producer_cloudsql_administrator } iam_project_roles = { (var.network_serviceproject_id) = [ "roles/cloudsql.admin" ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /******************************************** Service Account used to run AlloyDB Producer Stage *********************************************/ module "alloydb_producer" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.producer_alloydb_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.producer_alloydb_administrator } iam_project_roles = { (var.network_serviceproject_id) = [ "roles/alloydb.admin" ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /******************************************** Service Account used to run MRC Producer Stage *********************************************/ module "mrc_producer" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.producer_mrc_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.producer_mrc_administrator } iam_project_roles = { (var.network_serviceproject_id) = [ "roles/redis.admin" ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /******************************************** Service Account used to run Vertex AI Producer Stages *********************************************/ module "vertex_producer" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.producer_vertex_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.producer_vertex_administrator } iam_project_roles = { (var.network_serviceproject_id) = [ "roles/aiplatform.admin" ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /******************************************** Service Account used to run GKE Producer Stage *********************************************/ module "gke_producer" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.producer_gke_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.producer_gke_administrator } iam_project_roles = { (var.network_serviceproject_id) = [ "roles/container.admin", "roles/compute.instanceAdmin", "roles/iam.serviceAccountAdmin", "roles/iam.serviceAccountUser", "roles/resourcemanager.projectIamAdmin", ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /**************************************************** Service Account used to run Networking Manual Stage *****************************************************/ module "networking_manual" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.networking_manual_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.networking_manual_administrator } iam_project_roles = { (var.network_hostproject_id) = [ "roles/compute.networkAdmin", ] (var.network_serviceproject_id) = [ "roles/cloudsql.viewer", ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /******************************************** Service Account used to run GCE Consumer Stage *********************************************/ module "gce_consumer" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.consumer_gce_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.consumer_gce_administrator } iam_project_roles = { (var.network_hostproject_id) = [ "roles/compute.networkUser", ] (var.network_serviceproject_id) = [ "roles/compute.instanceAdmin.v1", "roles/iam.serviceAccountUser", ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } } /******************************************** Service Account used to run Cloud Run Consumer Stage *********************************************/ module "cloudrun_consumer" { source = "github.com/GoogleCloudPlatform/cloud-foundation-fabric//modules/iam-service-account?ref=v31.1.0" project_id = var.bootstrap_project_id name = var.consumer_cloudrun_sa_name iam = { "roles/iam.serviceAccountTokenCreator" = var.consumer_cloudrun_administrator } iam_project_roles = { (var.network_hostproject_id) = [ "roles/compute.networkUser", ] (var.network_serviceproject_id) = [ "roles/iam.serviceAccountUser", "roles/run.admin" ] } iam_storage_roles = { (module.google_storage_bucket.name) = [ "roles/storage.objectAdmin" ] } }