3-networks-hub-and-spoke/modules/restricted_shared_vpc/service_control.tf (83 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 { prefix = "${var.environment_code}_shared_restricted" access_level_name = "alp_${local.prefix}_members_${random_id.random_access_level_suffix.hex}" perimeter_name = "sp_${local.prefix}_default_perimeter_${random_id.random_access_level_suffix.hex}" bridge_name = "spb_c_to_${local.prefix}_bridge_${random_id.random_access_level_suffix.hex}" } resource "random_id" "random_access_level_suffix" { byte_length = 2 } module "access_level_members" { source = "terraform-google-modules/vpc-service-controls/google//modules/access_level" version = "~> 5.0" description = "${local.prefix} Access Level" policy = var.access_context_manager_policy_id name = local.access_level_name members = var.members } resource "time_sleep" "wait_vpc_sc_propagation" { create_duration = "120s" destroy_duration = "120s" depends_on = [ module.main, module.peering, google_compute_global_address.private_service_access_address, google_service_networking_connection.private_vpc_connection, module.region1_router1, module.region1_router2, module.region2_router1, module.region2_router2, module.private_service_connect, google_dns_policy.default_policy, module.peering_zone, module.firewall_rules, google_compute_router.nat_router_region1, google_compute_address.nat_external_addresses_region1, google_compute_router_nat.egress_nat_region1, google_compute_router.nat_router_region2, google_compute_address.nat_external_addresses_region2, google_compute_router_nat.egress_nat_region2, ] } module "regular_service_perimeter" { source = "terraform-google-modules/vpc-service-controls/google//modules/regular_service_perimeter" version = "~> 5.0" policy = var.access_context_manager_policy_id perimeter_name = local.perimeter_name description = "Default VPC Service Controls perimeter" resources = [var.project_number] access_levels = [module.access_level_members.name] restricted_services = var.restricted_services vpc_accessible_services = ["RESTRICTED-SERVICES"] ingress_policies = var.ingress_policies egress_policies = var.egress_policies depends_on = [ time_sleep.wait_vpc_sc_propagation ] } resource "google_access_context_manager_service_perimeter" "bridge_to_network_hub_perimeter" { count = var.mode == "spoke" ? 1 : 0 perimeter_type = "PERIMETER_TYPE_BRIDGE" parent = "accessPolicies/${var.access_context_manager_policy_id}" name = "accessPolicies/${var.access_context_manager_policy_id}/servicePerimeters/${local.bridge_name}" title = local.bridge_name status { resources = formatlist("projects/%s", [var.project_number, var.restricted_net_hub_project_number]) } depends_on = [module.regular_service_perimeter] }