blueprints/gke/patterns/kong-cloudrun/cert.tf (117 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. */ resource "google_privateca_ca_pool" "default" { project = var.project_id name = "Acme-CA-pool" location = var.region tier = "ENTERPRISE" } resource "google_privateca_certificate_authority" "default" { project = var.project_id certificate_authority_id = "Acme-CA" location = var.region pool = google_privateca_ca_pool.default.name config { subject_config { subject { common_name = "Acme-CA" organization = "Acme" } } x509_config { ca_options { is_ca = true } key_usage { base_key_usage { cert_sign = true crl_sign = true } extended_key_usage { client_auth = true server_auth = true } } } } lifetime = "31536000s" // 1 year key_spec { algorithm = "EC_P256_SHA256" } // Disable CA deletion related safe checks for easier cleanup while testing. deletion_protection = false skip_grace_period = true ignore_active_certificates_on_deletion = true } # TLS certificate for the ILB # resource "tls_private_key" "ilb_cert_key" { algorithm = "RSA" rsa_bits = 2048 } resource "google_privateca_certificate" "ilb_cert" { project = var.project_id certificate_authority = google_privateca_certificate_authority.default.certificate_authority_id location = var.region pool = google_privateca_ca_pool.default.name lifetime = "2592000s" // 30 days name = var.cloudrun_svcname config { subject_config { subject { common_name = var.custom_domain organization = "Acme" } subject_alt_name { dns_names = [var.custom_domain] } } x509_config { ca_options { is_ca = false } key_usage { base_key_usage { key_agreement = true } extended_key_usage { server_auth = true } } } public_key { format = "PEM" key = base64encode(tls_private_key.ilb_cert_key.public_key_pem) } } } # TLS certificate to secure the control plane/data plane Kong communication # resource "tls_private_key" "kong" { algorithm = "ECDSA" ecdsa_curve = "P384" } resource "tls_self_signed_cert" "kong" { allowed_uses = [ "cert_signing", "client_auth", "digital_signature", "key_encipherment", "server_auth", ] private_key_pem = tls_private_key.kong.private_key_pem validity_period_hours = 365 * 24 // 1 year is_ca_certificate = true subject { common_name = "kong_clustering" } }