modules/data-governance/main.tf (105 lines of code) (raw):

/** * Copyright 2021-2022 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 { storage_sa = data.google_storage_project_service_account.gcs_account.email_address pubsub_sa = google_project_service_identity.pubsub_sa.email dataflow_sa = google_project_service_identity.dataflow_sa.email compute_sa = "service-${data.google_project.data_ingestion_project.number}@compute-system.iam.gserviceaccount.com" bigquery_sa = data.google_bigquery_default_service_account.bigquery_sa.email confidential_storage_sa = data.google_storage_project_service_account.confidential_gcs_account.email_address confidential_dataflow_sa = google_project_service_identity.confidential_dataflow_sa.email confidential_compute_sa = "service-${data.google_project.reid_project.number}@compute-system.iam.gserviceaccount.com" confidential_bigquery_sa = data.google_bigquery_default_service_account.confidential_bigquery_sa.email data_ingestion_keyring_name = "${var.cmek_keyring_name}_${random_id.suffix.hex}" data_ingestion_key_name = "data_ingestion_kms_key_${random_id.suffix.hex}" bigquery_key_name = "bigquery_kms_key_${random_id.suffix.hex}" reidentification_key_name = "reidentification_kms_key_${random_id.suffix.hex}" confidential_bigquery_key_name = "confidential_bigquery_kms_key_${random_id.suffix.hex}" data_ingestion_key_encrypters_decrypters = "serviceAccount:${local.storage_sa},serviceAccount:${local.pubsub_sa},serviceAccount:${local.dataflow_sa},serviceAccount:${local.compute_sa}" bigquery_key_encrypters_decrypters = "serviceAccount:${local.bigquery_sa}" reidentification_key_encrypters_decrypters = "serviceAccount:${local.confidential_storage_sa},serviceAccount:${local.confidential_dataflow_sa},serviceAccount:${local.confidential_compute_sa}" confidential_bigquery_key_encrypters_decrypters = "serviceAccount:${local.confidential_bigquery_sa}" keys = [ local.data_ingestion_key_name, local.bigquery_key_name, local.reidentification_key_name, local.confidential_bigquery_key_name ] encrypters = [ local.data_ingestion_key_encrypters_decrypters, local.bigquery_key_encrypters_decrypters, local.reidentification_key_encrypters_decrypters, local.confidential_bigquery_key_encrypters_decrypters ] decrypters = [ local.data_ingestion_key_encrypters_decrypters, local.bigquery_key_encrypters_decrypters, local.reidentification_key_encrypters_decrypters, local.confidential_bigquery_key_encrypters_decrypters ] } resource "random_id" "suffix" { byte_length = 4 } data "google_project" "data_ingestion_project" { project_id = var.data_ingestion_project_id } data "google_storage_project_service_account" "gcs_account" { project = var.data_ingestion_project_id } data "google_bigquery_default_service_account" "bigquery_sa" { project = var.non_confidential_data_project_id } resource "google_project_service_identity" "pubsub_sa" { provider = google-beta project = var.data_ingestion_project_id service = "pubsub.googleapis.com" } resource "google_project_service_identity" "dataflow_sa" { provider = google-beta project = var.data_ingestion_project_id service = "dataflow.googleapis.com" } data "google_project" "reid_project" { project_id = var.confidential_data_project_id } data "google_storage_project_service_account" "confidential_gcs_account" { project = var.confidential_data_project_id } data "google_bigquery_default_service_account" "confidential_bigquery_sa" { project = var.confidential_data_project_id } resource "google_project_service_identity" "confidential_dataflow_sa" { provider = google-beta project = var.confidential_data_project_id service = "dataflow.googleapis.com" } module "cmek" { source = "terraform-google-modules/kms/google" version = "~> 2.2" project_id = var.data_governance_project_id labels = var.labels location = var.cmek_location keyring = local.data_ingestion_keyring_name key_rotation_period = var.key_rotation_period_seconds prevent_destroy = !var.delete_contents_on_destroy keys = local.keys key_protection_level = var.kms_key_protection_level set_encrypters_for = local.keys set_decrypters_for = local.keys encrypters = local.encrypters decrypters = local.decrypters }