foundation-extension/4-projects/business_unit_1/development/boa_gke.tf (126 lines of code) (raw):

/** * Copyright 2021 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 { boa_gsa_roles = { gke = [ "roles/cloudtrace.agent", "roles/monitoring.metricWriter" ], sql = [ "roles/cloudsql.admin" // TODO: reduce permissions ] } // workaround for ACM boa_gke_nodes_gsa_roles = { gke = [ "roles/logging.logWriter", "roles/storage.objectViewer", "roles/monitoring.metricWriter", "roles/stackdriver.resourceMetadata.writer", "roles/monitoring.viewer" ], cicd = [ "roles/artifactregistry.reader", "roles/source.reader" ] } } module "boa_gke_project" { source = "github.com/terraform-google-modules/terraform-example-foundation/4-projects/modules/single_project" impersonate_service_account = var.terraform_service_account org_id = var.org_id billing_account = var.billing_account folder_id = data.google_active_folder.env.name environment = "development" vpc_type = "base" enable_hub_and_spoke = var.enable_hub_and_spoke alert_spent_percents = var.alert_spent_percents alert_pubsub_topic = var.alert_pubsub_topic budget_amount = var.budget_amount project_prefix = var.project_prefix activate_apis = [ "cloudresourcemanager.googleapis.com", "compute.googleapis.com", "container.googleapis.com", "dns.googleapis.com", "monitoring.googleapis.com", "logging.googleapis.com", "storage.googleapis.com", "cloudtrace.googleapis.com", "stackdriver.googleapis.com", "cloudkms.googleapis.com", "secretmanager.googleapis.com", "sql-component.googleapis.com", "sqladmin.googleapis.com", "meshca.googleapis.com", "meshtelemetry.googleapis.com", "meshconfig.googleapis.com", "iamcredentials.googleapis.com", "iam.googleapis.com", "gkeconnect.googleapis.com", "gkehub.googleapis.com", "anthos.googleapis.com", "billingbudgets.googleapis.com", "iap.googleapis.com", "storage-api.googleapis.com", "oslogin.googleapis.com", "binaryauthorization.googleapis.com", "privateca.googleapis.com", "containerscanning.googleapis.com", "multiclusteringress.googleapis.com", "serviceusage.googleapis.com" ] # Metadata project_suffix = "boa-gke" application_name = "bu1-sample-application" billing_code = "1234" primary_contact = "example@example.com" secondary_contact = "example2@example.com" business_code = "bu1" } # Service account to allow Bank of Anthos Pods to securely communicate with GCP APIs, in specific Cloud SQL and Cloud Operations resource "google_service_account" "boa_gsa" { account_id = "boa-gsa" description = "Service account to allow Bank of Anthos Pods to securely communicate with GCP APIs, in specific Cloud SQL and Cloud Operations" project = module.boa_gke_project.project_id } resource "google_project_iam_member" "boa_gsa_roles_gke" { for_each = toset(local.boa_gsa_roles.gke) project = module.boa_gke_project.project_id role = each.value member = "serviceAccount:${google_service_account.boa_gsa.email}" } resource "google_project_iam_member" "boa_gsa_roles_sql" { for_each = toset(local.boa_gsa_roles.sql) project = module.boa_sql_project.project_id role = each.value member = "serviceAccount:${google_service_account.boa_gsa.email}" } # Service account to allow Bank of Anthos GKE Node Service Account with minimal permissions to run nodes and access artifact repos in cicd project resource "google_service_account" "boa_gke_nodes_gsa" { account_id = "boa-gke-nodes-${var.environment_code}-gsa" description = "Service account to allow Bank of Anthos GKE Node Service Account with minimal permissions to run nodes and access artifact repos in cicd project" project = module.boa_gke_project.project_id } resource "google_project_iam_member" "boa_gke_nodes_gsa_roles_gke" { for_each = toset(local.boa_gke_nodes_gsa_roles.gke) project = module.boa_gke_project.project_id role = each.value member = "serviceAccount:${google_service_account.boa_gke_nodes_gsa.email}" } resource "google_project_iam_member" "boa_gke_nodes_gsa_roles_cicd" { for_each = toset(local.boa_gke_nodes_gsa_roles.cicd) project = var.app_cicd_project_id role = each.value member = "serviceAccount:${google_service_account.boa_gke_nodes_gsa.email}" }