3-networks-hub-and-spoke/envs/shared/net-hubs.tf (256 lines of code) (raw):
/**
* Copyright 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 {
/*
* Base network ranges
*/
supported_restricted_service = [
"accessapproval.googleapis.com",
"adsdatahub.googleapis.com",
"aiplatform.googleapis.com",
"alloydb.googleapis.com",
"alpha-documentai.googleapis.com",
"analyticshub.googleapis.com",
"apigee.googleapis.com",
"apigeeconnect.googleapis.com",
"artifactregistry.googleapis.com",
"assuredworkloads.googleapis.com",
"automl.googleapis.com",
"baremetalsolution.googleapis.com",
"batch.googleapis.com",
"bigquery.googleapis.com",
"bigquerydatapolicy.googleapis.com",
"bigquerydatatransfer.googleapis.com",
"bigquerymigration.googleapis.com",
"bigqueryreservation.googleapis.com",
"bigtable.googleapis.com",
"binaryauthorization.googleapis.com",
"cloud.googleapis.com",
"cloudasset.googleapis.com",
"cloudbuild.googleapis.com",
"clouddebugger.googleapis.com",
"clouddeploy.googleapis.com",
"clouderrorreporting.googleapis.com",
"cloudfunctions.googleapis.com",
"cloudkms.googleapis.com",
"cloudprofiler.googleapis.com",
"cloudresourcemanager.googleapis.com",
"cloudscheduler.googleapis.com",
"cloudsearch.googleapis.com",
"cloudtrace.googleapis.com",
"composer.googleapis.com",
"compute.googleapis.com",
"connectgateway.googleapis.com",
"contactcenterinsights.googleapis.com",
"container.googleapis.com",
"containeranalysis.googleapis.com",
"containerfilesystem.googleapis.com",
"containerregistry.googleapis.com",
"containerthreatdetection.googleapis.com",
"datacatalog.googleapis.com",
"dataflow.googleapis.com",
"datafusion.googleapis.com",
"datamigration.googleapis.com",
"dataplex.googleapis.com",
"dataproc.googleapis.com",
"datastream.googleapis.com",
"dialogflow.googleapis.com",
"dlp.googleapis.com",
"dns.googleapis.com",
"documentai.googleapis.com",
"domains.googleapis.com",
"eventarc.googleapis.com",
"file.googleapis.com",
"firebaseappcheck.googleapis.com",
"firebaserules.googleapis.com",
"firestore.googleapis.com",
"gameservices.googleapis.com",
"gkebackup.googleapis.com",
"gkeconnect.googleapis.com",
"gkehub.googleapis.com",
"healthcare.googleapis.com",
"iam.googleapis.com",
"iamcredentials.googleapis.com",
"iaptunnel.googleapis.com",
"ids.googleapis.com",
"integrations.googleapis.com",
"kmsinventory.googleapis.com",
"krmapihosting.googleapis.com",
"language.googleapis.com",
"lifesciences.googleapis.com",
"logging.googleapis.com",
"managedidentities.googleapis.com",
"memcache.googleapis.com",
"meshca.googleapis.com",
"meshconfig.googleapis.com",
"metastore.googleapis.com",
"ml.googleapis.com",
"monitoring.googleapis.com",
"networkconnectivity.googleapis.com",
"networkmanagement.googleapis.com",
"networksecurity.googleapis.com",
"networkservices.googleapis.com",
"notebooks.googleapis.com",
"opsconfigmonitoring.googleapis.com",
"orgpolicy.googleapis.com",
"osconfig.googleapis.com",
"oslogin.googleapis.com",
"privateca.googleapis.com",
"pubsub.googleapis.com",
"pubsublite.googleapis.com",
"recaptchaenterprise.googleapis.com",
"recommender.googleapis.com",
"redis.googleapis.com",
"retail.googleapis.com",
"run.googleapis.com",
"secretmanager.googleapis.com",
"servicecontrol.googleapis.com",
"servicedirectory.googleapis.com",
"spanner.googleapis.com",
"speakerid.googleapis.com",
"speech.googleapis.com",
"sqladmin.googleapis.com",
"storage.googleapis.com",
"storagetransfer.googleapis.com",
"sts.googleapis.com",
"texttospeech.googleapis.com",
"timeseriesinsights.googleapis.com",
"tpu.googleapis.com",
"trafficdirector.googleapis.com",
"transcoder.googleapis.com",
"translate.googleapis.com",
"videointelligence.googleapis.com",
"vision.googleapis.com",
"visionai.googleapis.com",
"vmmigration.googleapis.com",
"vpcaccess.googleapis.com",
"webrisk.googleapis.com",
"workflows.googleapis.com",
"workstations.googleapis.com",
]
restricted_services = length(var.custom_restricted_services) != 0 ? var.custom_restricted_services : local.supported_restricted_service
net_hub_config = module.net_hub_config.net_hub_config
base_subnet_primary_ranges = local.net_hub_config.base.subnet_primary_ranges
base_hub_dns_enable_inbound_forwarding = local.net_hub_config.base.hub_dns_enable_inbound_forwarding
base_hub_dns_enable_logging = local.net_hub_config.base.hub_dns_enable_logging
base_hub_firewall_enable_logging = local.net_hub_config.base.hub_firewall_enable_logging
base_hub_nat_bgp_asn = local.net_hub_config.base.hub_nat_bgp_asn
base_hub_nat_num_addresses_region1 = local.net_hub_config.base.hub_nat_num_addresses_region1
base_hub_nat_num_addresses_region2 = local.net_hub_config.base.hub_nat_num_addresses_region2
base_hub_windows_activation_enabled = local.net_hub_config.base.hub_windows_activation_enabled
base_private_service_cidr = try(local.net_hub_config.base.private_service_cidr, null)
base_private_service_connect_ip = try(local.net_hub_config.base.private_service_connect_ip, null)
base_hub_nat_igw_enabled = local.net_hub_config.base.hub_nat_igw_enabled
base_net_hub_vpc_routes = local.net_hub_config.base.net_hub_vpc_routes
subnet_net_hub_base = local.net_hub_config.base.subnet_net_hub
secondary_base_subnets = local.net_hub_config.base.secondary_subnets
restricted_subnet_primary_ranges = try(local.net_hub_config.restricted.subnet_primary_ranges, [])
restricted_hub_dns_enable_inbound_forwarding = try(local.net_hub_config.restricted.hub_dns_enable_inbound_forwarding, false)
restricted_hub_dns_enable_logging = try(local.net_hub_config.restricted.hub_dns_enable_logging, false)
restricted_hub_firewall_enable_logging = try(local.net_hub_config.restricted.hub_firewall_enable_logging, false)
restricted_hub_nat_bgp_asn = try(local.net_hub_config.restricted.hub_nat_bgp_asn, null)
restricted_hub_nat_num_addresses_region1 = try(local.net_hub_config.restricted.hub_nat_num_addresses_region1, 0)
restricted_hub_nat_num_addresses_region2 = try(local.net_hub_config.restricted.hub_nat_num_addresses_region2, 0)
restricted_hub_windows_activation_enabled = try(local.net_hub_config.restricted.hub_windows_activation_enabled, false)
restricted_private_service_cidr = try(local.net_hub_config.restricted.private_service_cidr, null)
restricted_private_service_connect_ip = try(local.net_hub_config.restricted.private_service_connect_ip, null)
restricted_hub_nat_igw_enabled = try(local.net_hub_config.restricted.hub_nat_igw_enabled, false)
restricted_net_hub_vpc_routes = try(local.net_hub_config.restricted.net_hub_vpc_routes, [])
subnet_net_hub_restricted = try(local.net_hub_config.restricted.subnet_net_hub, [])
secondary_restricted_subnets = try(local.net_hub_config.restricted.secondary_subnets, [])
net_hub_router_ha_enabled = local.net_hub_config.net_hub_router_ha_enabled
}
module "net_hub_config" {
source = "../../modules/nhas_config/net_hub_config"
config_file = "../../vpc_config.yaml"
restricted_enabled = local.restricted_enabled
}
/******************************************
Base Network VPC
*****************************************/
module "base_shared_vpc" {
source = "../../modules/base_shared_vpc"
project_id = local.base_net_hub_project_id
dns_hub_project_id = local.dns_hub_project_id
environment_code = local.environment_code
bgp_asn_subnet = local.bgp_asn_number
default_region1 = local.default_region1
default_region2 = local.default_region2
domain = var.domain
dns_enable_inbound_forwarding = local.base_hub_dns_enable_inbound_forwarding
dns_enable_logging = local.base_hub_dns_enable_logging
firewall_enable_logging = local.base_hub_firewall_enable_logging
nat_bgp_asn = local.base_hub_nat_bgp_asn
nat_num_addresses_region1 = local.base_hub_nat_num_addresses_region1
nat_num_addresses_region2 = local.base_hub_nat_num_addresses_region2
windows_activation_enabled = local.base_hub_windows_activation_enabled
mode = "hub"
subnets = local.subnet_net_hub_base
secondary_ranges = local.secondary_base_subnets
region1_enabled = local.region1_enabled
region2_enabled = local.region2_enabled
private_service_cidr = local.base_private_service_cidr
private_service_connect_ip = local.base_private_service_connect_ip
nat_enabled = local.base_hub_nat_igw_enabled
router_ha_enabled = local.net_hub_router_ha_enabled
vpc_routes = local.base_net_hub_vpc_routes
depends_on = [module.dns_hub_vpc]
}
/******************************************
Restricted Network VPC
*****************************************/
module "restricted_shared_vpc" {
source = "../../modules/restricted_shared_vpc"
count = local.restricted_enabled ? 1 : 0
project_id = local.restricted_net_hub_project_id
project_number = local.restricted_net_hub_project_number
dns_hub_project_id = local.dns_hub_project_id
environment_code = local.environment_code
access_context_manager_policy_id = var.access_context_manager_policy_id
restricted_services = local.restricted_services
members = distinct(concat([
"serviceAccount:${local.networks_service_account}",
"serviceAccount:${local.projects_service_account}",
"serviceAccount:${local.organization_service_account}",
], var.perimeter_additional_members))
bgp_asn_subnet = local.bgp_asn_number
default_region1 = local.default_region1
default_region2 = local.default_region2
domain = var.domain
dns_enable_inbound_forwarding = local.restricted_hub_dns_enable_inbound_forwarding
dns_enable_logging = local.restricted_hub_dns_enable_logging
firewall_enable_logging = local.restricted_hub_firewall_enable_logging
nat_bgp_asn = local.restricted_hub_nat_bgp_asn
nat_num_addresses_region1 = local.restricted_hub_nat_num_addresses_region1
nat_num_addresses_region2 = local.restricted_hub_nat_num_addresses_region2
windows_activation_enabled = local.restricted_hub_windows_activation_enabled
mode = "hub"
subnets = local.subnet_net_hub_restricted
secondary_ranges = local.secondary_restricted_subnets
region1_enabled = local.region1_enabled
region2_enabled = local.region2_enabled
private_service_cidr = local.restricted_private_service_cidr
private_service_connect_ip = local.restricted_private_service_connect_ip
nat_enabled = local.restricted_hub_nat_igw_enabled
router_ha_enabled = local.net_hub_router_ha_enabled
vpc_routes = local.restricted_net_hub_vpc_routes
egress_policies = distinct(concat(
local.dedicated_interconnect_egress_policy,
var.egress_policies
))
ingress_policies = var.ingress_policies
depends_on = [module.dns_hub_vpc]
}