analytics-hub/s4-subscr-subscriber-projects/shared_vpc.tf (188 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 # # https://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. resource "google_compute_network" "vpc_network_xpn" { project = data.google_project.subscr_subscr_xpn.name name = "vpc-xpn-${var.name_suffix}" auto_create_subnetworks = false } resource "google_compute_subnetwork" "vpc_subnet_xpn" { project = data.google_project.subscr_subscr_xpn.name name = "vpc-xpn-subnetwork-${var.name_suffix}" region = var.region network = google_compute_network.vpc_network_xpn.id private_ip_google_access = true ip_cidr_range = "10.0.0.0/24" } resource "google_compute_router" "nat_router_xpn" { project = data.google_project.subscr_subscr_xpn.name name = "router-nat-${var.name_suffix}" region = var.region network = google_compute_network.vpc_network_xpn.id bgp { asn = 64514 } } resource "google_compute_address" "nat_external_address_xpn" { project = data.google_project.subscr_subscr_xpn.name name = "address-nat-${var.name_suffix}" region = var.region } resource "google_compute_router_nat" "nat_egress_xpn" { project = data.google_project.subscr_subscr_xpn.name name = "nat-egress-${var.name_suffix}" router = google_compute_router.nat_router_xpn.name region = var.region nat_ip_allocate_option = "MANUAL_ONLY" nat_ips = [google_compute_address.nat_external_address_xpn.self_link] source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES" log_config { filter = "TRANSLATIONS_ONLY" enable = true } } resource "google_compute_shared_vpc_host_project" "host" { project = data.google_project.subscr_subscr_xpn.name } resource "google_compute_shared_vpc_service_project" "service1" { host_project = data.google_project.subscr_subscr_xpn.name service_project = data.google_project.subscr_subscr_vm.name } data "google_compute_default_service_account" "default_xpn" { project = data.google_project.subscr_subscr_xpn.name } data "google_compute_default_service_account" "default_vm" { project = data.google_project.subscr_subscr_vm.name } output "default_account_vm" { value = data.google_compute_default_service_account.default_vm.email } output "default_account_xpn" { value = data.google_compute_default_service_account.default_xpn.email } resource "google_compute_instance" "jumphost_in_xpn" { project = data.google_project.subscr_subscr_xpn.name zone = var.zone name = "jumphost-xpn" machine_type = "e2-medium" boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { subnetwork = google_compute_subnetwork.vpc_subnet_xpn.self_link } service_account { email = data.google_compute_default_service_account.default_xpn.email scopes = ["cloud-platform"] } allow_stopping_for_update = true } resource "google_compute_instance" "jumphost_in_vm" { depends_on = [ google_compute_shared_vpc_service_project.service1 ] project = data.google_project.subscr_subscr_vm.name zone = var.zone name = "jumphost-vm" machine_type = "e2-medium" boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { subnetwork = google_compute_subnetwork.vpc_subnet_xpn.self_link } service_account { email = data.google_compute_default_service_account.default_vm.email scopes = ["cloud-platform"] } allow_stopping_for_update = true } resource "google_compute_firewall" "allow-google-lb-hc" { name = "allow-google-lb-hc-${var.name_suffix}" project = data.google_project.subscr_subscr_xpn.name network = google_compute_network.vpc_network_xpn.id allow { ports = ["22", "80", "443", "8080", "8443"] protocol = "tcp" } direction = "INGRESS" description = "Allow Google LB and HC ranges" priority = 1000 source_ranges = [ "130.211.0.0/22", "35.191.0.0/16", "35.235.240.0/20", "209.85.152.0/22", "209.85.204.0/22" ] } resource "google_compute_firewall" "allow-google-iap" { name = "allow-google-iap-${var.name_suffix}" project = data.google_project.subscr_subscr_xpn.name network = google_compute_network.vpc_network_xpn.id allow { ports = ["22", "80", "443", "8080", "8443"] protocol = "tcp" } direction = "INGRESS" description = "Allow Google IAP range" priority = 1000 source_ranges = [ "35.235.240.0/20" ] } resource "google_compute_firewall" "allow-internal" { name = "allow-internal-${var.name_suffix}" project = data.google_project.subscr_subscr_xpn.name network = google_compute_network.vpc_network_xpn.id allow { protocol = "all" } direction = "INGRESS" description = "Allow rfc1918 ranges" priority = 1000 source_ranges = [ "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16" ] } resource "google_dns_managed_zone" "pga" { for_each = var.pga_domains project = data.google_project.subscr_subscr_xpn.name name = "${each.key}-pga-${var.name_suffix}" dns_name = each.value force_destroy = false visibility = "private" private_visibility_config { networks { network_url = google_compute_network.vpc_network_xpn.id } } } resource "google_dns_record_set" "pga_cname" { for_each = var.pga_domains project = data.google_project.subscr_subscr_xpn.name name = "*.${each.value}" managed_zone = google_dns_managed_zone.pga["${each.key}"].name type = "CNAME" ttl = 300 rrdatas = ["restricted.${each.value}"] } resource "google_dns_record_set" "pga_a" { for_each = var.pga_domains project = data.google_project.subscr_subscr_xpn.name name = "restricted.${each.value}" managed_zone = google_dns_managed_zone.pga["${each.key}"].name type = "A" ttl = 300 rrdatas = ["199.36.153.4", "199.36.153.5", "199.36.153.6", "199.36.153.7"] } resource "google_dns_record_set" "pga_dom_a" { for_each = var.pga_domains project = data.google_project.subscr_subscr_xpn.name name = "${each.value}" managed_zone = google_dns_managed_zone.pga["${each.key}"].name type = "A" ttl = 300 rrdatas = ["199.36.153.4", "199.36.153.5", "199.36.153.6", "199.36.153.7"] }