fast/addons/2-networking-swp/variables.tf (221 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 * * 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. */ variable "certificate_authority" { description = "Optional Certificate Authority Service pool and CA used by SWP." type = object({ iam = optional(map(list(string)), {}) iam_bindings = optional(map(any), {}) iam_bindings_additive = optional(map(any), {}) iam_by_principals = optional(map(list(string)), {}) ca_configs = map(object({ deletion_protection = optional(string, true) type = optional(string, "SELF_SIGNED") is_ca = optional(bool, true) lifetime = optional(string, null) pem_ca_certificate = optional(string, null) ignore_active_certificates_on_deletion = optional(bool, false) skip_grace_period = optional(bool, true) labels = optional(map(string), null) gcs_bucket = optional(string, null) key_spec = optional(object({ algorithm = optional(string, "RSA_PKCS1_2048_SHA256") kms_key_id = optional(string, null) }), {}) key_usage = optional(object({ cert_sign = optional(bool, true) client_auth = optional(bool, false) code_signing = optional(bool, false) content_commitment = optional(bool, false) crl_sign = optional(bool, true) data_encipherment = optional(bool, false) decipher_only = optional(bool, false) digital_signature = optional(bool, false) email_protection = optional(bool, false) encipher_only = optional(bool, false) key_agreement = optional(bool, false) key_encipherment = optional(bool, true) ocsp_signing = optional(bool, false) server_auth = optional(bool, true) time_stamping = optional(bool, false) }), {}) subject = optional( object({ common_name = string organization = string country_code = optional(string) locality = optional(string) organizational_unit = optional(string) postal_code = optional(string) province = optional(string) street_address = optional(string) }), { common_name = "test.example.com" organization = "Test Example" } ) subject_alt_name = optional(object({ dns_names = optional(list(string), null) email_addresses = optional(list(string), null) ip_addresses = optional(list(string), null) uris = optional(list(string), null) }), null) subordinate_config = optional(object({ root_ca_id = optional(string) pem_issuer_certificates = optional(list(string)) }), null) })) ca_pool_config = optional(object({ create_pool = optional(object({ name = optional(string) tier = optional(string, "DEVOPS") })) use_pool = optional(object({ id = string })) })) }) nullable = false } variable "enable_services" { description = "Configure project by enabling services required for this add-on." type = bool nullable = false default = false } variable "factories_config" { description = "SWP factories configuration paths. Keys in the `swp_configs` variable will be appended to derive individual SWP factory paths." type = object({ policy_rules = optional(string, "data/policy-rules") url_lists = optional(string, "data/url-lists") }) nullable = false default = {} } variable "locations" { description = "Regions where the resources will be created. Keys are used as short names appended to resource names. Interpolation with FAST region names is supported." type = map(string) nullable = false default = {} } variable "name" { description = "Name used for resource names." type = string nullable = false default = "swp" } variable "outputs_location" { description = "Path where providers and tfvars files for the following stages are written. Leave empty to disable." type = string default = null } variable "policy_rules_contexts" { description = "Replacement contexts for policy rules matcher arguments." type = object({ secure_tags = optional(map(string), {}) service_accounts = optional(map(string), {}) url_lists = optional(map(string), {}) }) nullable = false default = {} } variable "project_id" { description = "Project where the resources will be created." type = string nullable = false } variable "swp_configs" { description = "Secure Web Proxy configuration, one per region." type = map(object({ network_id = string subnetwork_id = string certificates = optional(list(string), []) tls_inspection_policy_id = optional(string, null) gateway_config = optional(object({ addresses = optional(list(string), []) delete_router_on_destroy = optional(bool, true) labels = optional(map(string), {}) next_hop_routing_mode = optional(bool, false) ports = optional(list(string), [443]) scope = optional(string) }), {}) service_attachment = optional(object({ nat_subnets = list(string) automatic_connection = optional(bool, false) consumer_accept_lists = optional(map(string), {}) consumer_reject_lists = optional(list(string)) description = optional(string) domain_name = optional(string) enable_proxy_protocol = optional(bool, false) reconcile_connections = optional(bool) })) })) nullable = false default = {} } variable "tls_inspection_policy" { description = "TLS inspection policy configuration. If a CA pool is not specified a local one must be created via the `certificate_authority` variable." type = object({ ca_pool_id = optional(string) exclude_public_ca_set = optional(bool) tls = optional(object({ custom_features = optional(list(string)) feature_profile = optional(string) min_version = optional(string) })) }) default = null validation { condition = ( var.tls_inspection_policy == null || ( try(var.tls_inspection_policy.ca_pool_id, null) != null || var.certificate_authority != null ) ) error_message = "Either specify a CA pool or create one via the certification_authority variable." } validation { condition = ( try(var.tls_inspection_policy.tls, null) == null || contains( ["TLS_VERSION_UNSPECIFIED", "TLS_1_0", "TLS_1_1", "TLS_1_2", "TLS_1_3", "-"], try(var.tls_inspection_policy.tls.min_version, "-") ) ) error_message = "Invalid min TLS version." } validation { condition = ( try(var.tls_inspection_policy.tls, null) == null || contains( [ "PROFILE_UNSPECIFIED", "PROFILE_COMPATIBLE", "PROFILE_MODERN", "PROFILE_RESTRICTED", "PROFILE_CUSTOM" ], try(var.tls_inspection_policy.tls.feature_profile, "-") ) ) error_message = "Invalid TLS version feature profile." } validation { condition = ( try(var.tls_inspection_policy.tls.custom_features, null) == null || try(var.tls_inspection_policy.tls.feature_profile, null) == "PROFILE_CUSTOM" ) error_message = "TLS custom features can only be used with custom profile." } }