/** * Copyright 2023 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 { create_url_lists = { for k, v in var.policy_rules.url_lists : v.url_list => v if v.values != null } } resource "google_network_security_gateway_security_policy" "policy" { provider = google-beta project = var.project_id name = var.name location = var.region description = var.description tls_inspection_policy = var.tls_inspection_config != null ? google_network_security_tls_inspection_policy.tls-policy.0.id : null } resource "google_network_security_tls_inspection_policy" "tls-policy" { count = var.tls_inspection_config != null ? 1 : 0 provider = google-beta project = var.project_id name = var.name location = var.region description = coalesce(var.tls_inspection_config.description, var.description) ca_pool = var.tls_inspection_config.ca_pool exclude_public_ca_set = var.tls_inspection_config.exclude_public_ca_set } resource "google_network_security_gateway_security_policy_rule" "secure_tag_rules" { for_each = var.policy_rules.secure_tags provider = google-beta project = var.project_id name = each.key location = var.region description = coalesce(each.value.description, var.description) gateway_security_policy = google_network_security_gateway_security_policy.policy.name enabled = each.value.enabled priority = each.value.priority session_matcher = trimspace(<<-EOT source.matchTag('${each.value.tag}')%{if each.value.session_matcher != null} && (${each.value.session_matcher})%{endif~} EOT ) application_matcher = each.value.application_matcher tls_inspection_enabled = each.value.tls_inspection_enabled basic_profile = each.value.action } resource "google_network_security_url_lists" "url_lists" { for_each = local.create_url_lists provider = google-beta project = var.project_id name = each.key location = var.region description = coalesce(each.value.description, var.description) values = each.value.values } resource "google_network_security_gateway_security_policy_rule" "url_list_rules" { for_each = var.policy_rules.url_lists provider = google-beta project = var.project_id name = each.key location = var.region description = coalesce(each.value.description, var.description) gateway_security_policy = google_network_security_gateway_security_policy.policy.name enabled = each.value.enabled priority = each.value.priority session_matcher = trimspace(<<-EOT inUrlList(host(), '%{~if each.value.values != null~} ${~google_network_security_url_lists.url_lists[each.value.url_list].id~} %{~else~} ${~each.value.url_list~} %{~endif~}') %{~if each.value.session_matcher != null} && (${each.value.session_matcher})%{~endif~} EOT ) application_matcher = each.value.application_matcher tls_inspection_enabled = each.value.tls_inspection_enabled basic_profile = each.value.action } resource "google_network_security_gateway_security_policy_rule" "custom_rules" { for_each = var.policy_rules.custom project = var.project_id provider = google-beta name = each.key location = var.region description = coalesce(each.value.description, var.description) gateway_security_policy = google_network_security_gateway_security_policy.policy.name enabled = each.value.enabled priority = each.value.priority session_matcher = each.value.session_matcher application_matcher = each.value.application_matcher tls_inspection_enabled = each.value.tls_inspection_enabled basic_profile = each.value.action } resource "google_network_services_gateway" "gateway" { provider = google-beta project = var.project_id name = var.name location = var.region description = var.description labels = var.labels addresses = var.addresses != null ? var.addresses : [] type = "SECURE_WEB_GATEWAY" ports = var.ports scope = var.scope != null ? var.scope : "" certificate_urls = var.certificates gateway_security_policy = google_network_security_gateway_security_policy.policy.id network = var.network subnetwork = var.subnetwork delete_swg_autogen_router_on_destroy = var.delete_swg_autogen_router_on_destroy }