google_project/main.tf (58 lines of code) (raw):
/**
* # Terraform Module for Project Provisioning
* Sets up a single GCP project linked to a billing account plus management metadata.
*/
resource "random_id" "project" {
byte_length = 2
}
resource "google_project" "project" {
name = local.display_name
project_id = local.project_id
deletion_policy = var.deletion_policy
billing_account = var.billing_account_id
folder_id = var.parent_id
auto_create_network = false
labels = local.all_project_labels
}
resource "google_project_service" "project" {
for_each = local.all_project_services
project = local.project_id
service = each.key
disable_on_destroy = false
}
resource "google_project_iam_audit_config" "data_access_high" {
count = var.risk_level == "high" ? 1 : 0
project = local.project_id
service = "allServices"
audit_log_config {
log_type = "ADMIN_READ"
}
audit_log_config {
log_type = "DATA_READ"
}
audit_log_config {
log_type = "DATA_WRITE"
}
}
resource "google_logging_project_exclusion" "data_access_exclusions" {
name = "exclude-data-access-log-sink"
description = "Exclude data access logs except BigQuery, IAM, Secret Manager, and STS for this project. Additional services can be included with var.additional_data_access_logs"
project = local.project_id
filter = <<EOT
log_id("cloudaudit.googleapis.com/data_access")
AND NOT protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.BigQueryAuditMetadata"
${local.data_access_logs_filter}
EOT
}
resource "google_logging_project_bucket_config" "project" {
project = local.project_id
location = "global"
bucket_id = "_Default"
enable_analytics = var.log_analytics
}
resource "google_logging_linked_dataset" "default_linked_dataset" {
count = var.log_analytics ? 1 : 0
link_id = replace("${local.display_name}-default-log-linked", "-", "_")
bucket = google_logging_project_bucket_config.project.id
description = "Linked Dataset for Project Logging"
}