google_gke_tenant/gke_service_account.tf (42 lines of code) (raw):

resource "google_service_account" "gke-account" { account_id = "gke-${var.environment}" description = "GKE deployments in the ${var.environment} environment" project = var.project_id } module "workload-identity-for-tenant-sa" { source = "github.com/mozilla/terraform-modules//google_workload_identity?ref=v2.6.1" name = "gha-${var.application}" namespace = "${var.application}-${var.environment}" project_id = var.cluster_project_id use_existing_k8s_sa = true use_existing_gcp_sa = true gcp_sa_name = google_service_account.gke-account.email } module "workload-identity-for-generic-tenant-sa" { source = "github.com/mozilla/terraform-modules//google_workload_identity?ref=v2.6.1" name = var.application namespace = "${var.application}-${var.environment}" project_id = var.cluster_project_id use_existing_k8s_sa = true use_existing_gcp_sa = true gcp_sa_name = google_service_account.gke-account.email } module "workload-identity-for-tenant-external-secrets-sa" { source = "github.com/mozilla/terraform-modules//google_workload_identity?ref=v2.6.1" name = "external-secrets" namespace = "${var.application}-${var.environment}" project_id = var.cluster_project_id use_existing_k8s_sa = true use_existing_gcp_sa = true gcp_sa_name = google_service_account.gke-account.email } # permissions for use with External Secrets Operator in GKE # # FIXME: The below permission isn't required if we use the pod-based workload identity # https://external-secrets.io/v0.5.8/provider-google-secrets-manager/#using-pod-based-workload-identity # but the instructions there are ... vague and I don't understand them. # resource "google_project_iam_member" "sa-role-token-creator" { project = var.project_id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:${google_service_account.gke-account.email}" } # needed for tag- or regex-based loading of secrets, but not for explicit secret names #resource "google_project_iam_member" "sa-role-secret-viewer" { # project = var.project_id # role = "roles/secretmanager.viewer" # member = "serviceAccount:${google_service_account.gke-account.email}" #} resource "google_project_iam_member" "sa-role-secret-accessor" { project = var.project_id role = "roles/secretmanager.secretAccessor" member = "serviceAccount:${google_service_account.gke-account.email}" }