Emitir um certificado usando o Terraform

Saiba como usar o Terraform com o Certificate Authority Service para fazer o seguinte:

  • Crie um pool de ACs e uma AC raiz no novo pool.
  • Crie um pool de CA e uma CA subordinada dentro dele, que é assinada pela CA raiz
  • Gere uma nova solicitação de assinatura de certificado (CSR).
  • Use a CSR gerada para solicitar um certificado do pool de CAs que contém a CA subordinada.

O Terraform é um software de código aberto que permite criar e gerenciar seus recursos do CA Service usando o paradigma de infraestrutura como código. Neste guia de início rápido, usamos o provedorGoogle Cloud do Terraform para o Terraform.


Para seguir as instruções detalhadas desta tarefa diretamente no console do Google Cloud , clique em Orientação:

Orientações


Antes de começar

Verifique se você tem o papel do IAM de administrador do serviço de AC (roles/privateca.admin). Se você não tiver esse papel do IAM, leia Conceder um único papel para informações sobre como conceder esse papel.

Criar um projeto Google Cloud

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the CA Service API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the CA Service API.

    Enable the API

  8. Instalar a CLI do Google Cloud

    Se ainda não tiver feito isso, instale a Google Cloud CLI. Quando solicitado, escolha o projeto que você selecionou ou criou anteriormente.

    Se a Google Cloud CLI já estiver instalada, atualize-a executando o comando gcloud components update:

    gcloud components update
    

    Amostra de configuração do Terraform

    provider "google" {}
    provider "tls" {}
    
    resource "google_project_service" "privateca_api" {
      service            = "privateca.googleapis.com"
      disable_on_destroy = false
    }
    
    # Root CaPool & CA
    
    resource "google_privateca_ca_pool" "root" {
      name     = "root-pool"
      location = "us-central1"
      tier     = "ENTERPRISE"
      publishing_options {
        publish_ca_cert = true
        publish_crl     = true
      }
    }
    
    resource "google_privateca_certificate_authority" "root-ca" {
      certificate_authority_id = "my-root-ca"
      location                 = "us-central1"
      pool                     = google_privateca_ca_pool.root.name
      config {
        subject_config {
          subject {
            organization = "google"
            common_name  = "my-certificate-authority"
          }
        }
        x509_config {
          ca_options {
            is_ca = true
          }
          key_usage {
            base_key_usage {
              cert_sign = true
              crl_sign  = true
            }
            extended_key_usage {
              server_auth = true
            }
          }
        }
      }
      type = "SELF_SIGNED"
      key_spec {
        algorithm = "RSA_PKCS1_4096_SHA256"
      }
    
      // Disable CA deletion related safe checks for easier cleanup.
      deletion_protection                    = false
      skip_grace_period                      = true
      ignore_active_certificates_on_deletion = true
    }
    
    # Sub CaPool & CA
    
    resource "google_privateca_ca_pool" "subordinate" {
      name     = "sub-pool"
      location = "us-central1"
      tier     = "ENTERPRISE"
      publishing_options {
        publish_ca_cert = true
        publish_crl     = true
      }
    
      issuance_policy {
        baseline_values {
          ca_options {
            is_ca = false
          }
          key_usage {
            base_key_usage {
              digital_signature = true
              key_encipherment  = true
            }
            extended_key_usage {
              server_auth = true
            }
          }
        }
      }
    }
    
    resource "google_privateca_certificate_authority" "sub-ca" {
      pool                     = google_privateca_ca_pool.subordinate.name
      certificate_authority_id = "my-sub-ca"
      location                 = "us-central1"
      subordinate_config {
        certificate_authority = google_privateca_certificate_authority.root-ca.name
      }
      config {
        subject_config {
          subject {
            organization = "HashiCorp"
            common_name  = "my-subordinate-authority"
          }
          subject_alt_name {
            dns_names = ["hashicorp.com"]
          }
        }
        x509_config {
          ca_options {
            is_ca = true
            # Force the sub CA to only issue leaf certs
            max_issuer_path_length = 0
          }
          key_usage {
            base_key_usage {
              cert_sign = true
              crl_sign  = true
            }
            extended_key_usage {
              server_auth = true
            }
          }
        }
      }
      lifetime = "31536000s"
      key_spec {
        algorithm = "RSA_PKCS1_4096_SHA256"
      }
      type = "SUBORDINATE"
    
      // Disable CA deletion related safe checks for easier cleanup.
      deletion_protection                    = false
      skip_grace_period                      = true
      ignore_active_certificates_on_deletion = true
    }
    
    # Leaf cert
    
    resource "tls_private_key" "example" {
      algorithm = "RSA"
    }
    
    resource "tls_cert_request" "example" {
      private_key_pem = tls_private_key.example.private_key_pem
    
      subject {
        common_name  = "example.com"
        organization = "ACME Examples, Inc"
      }
    }
    
    resource "google_privateca_certificate" "default" {
      pool = google_privateca_ca_pool.subordinate.name
      # Explicitly refer the sub-CA so that the certificate creation will wait for the CA creation.
      certificate_authority = google_privateca_certificate_authority.sub-ca.certificate_authority_id
      location              = "us-central1"
      lifetime              = "860s"
      name                  = "my-certificate"
      pem_csr               = tls_cert_request.example.cert_request_pem
    }

    Executar o arquivo de configuração do Terraform

    Para aplicar a configuração do Terraform em um projeto Google Cloud , siga as etapas nas seções a seguir.

    Preparar o Cloud Shell

    1. Inicie o Cloud Shell.
    2. Defina o projeto Google Cloud padrão em que você quer aplicar as configurações do Terraform.

      Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

      As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

    Preparar o diretório

    Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

    1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

      Copie o exemplo de código no main.tf recém-criado.

      Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

    3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
    4. Salve as alterações.
    5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
      terraform init

      Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

      terraform init -upgrade

    Aplique as alterações

    1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
      terraform plan

      Faça as correções necessárias na configuração.

    2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
      terraform apply

      Aguarde até que o Terraform exiba a mensagem "Apply complete!".

    3. Abra seu Google Cloud projeto para conferir os resultados. No console do Google Cloud , navegue até seus recursos na UI para verificar se foram criados ou atualizados pelo Terraform.

    Limpeza

    Para evitar cobranças na sua conta Google Cloud pelos recursos usados neste guia de início rápido, exclua o pool de CA e todos os recursos definidos no arquivo de configuração do Terraform:

    terraform destroy
    

    Quando solicitado, digite yes.

    Se você criou um novo projeto para este guia de início rápido e não precisa mais dele, exclua o projeto.

    A seguir