Implantar um certificado gerenciado pelo Google global com autorização do balanceador de carga

Neste tutorial, mostramos como usar o Certificate Manager para implantar um certificado global gerenciado pelo Google com autorização do balanceador de carga.

Com a autorização do balanceador de carga, é possível receber um certificado gerenciado pelo Google para seu domínio quando o tráfego é veiculado pelo balanceador de carga. Esse método não exige registros DNS adicionais para o provisionamento de certificados.

Os seguintes balanceadores de carga são compatíveis com certificados gerenciados pelo Google com autorização do balanceador de carga:

  • Balanceador de carga de aplicativo externo global
  • Balanceador de carga de aplicativo clássico
  • Balanceador de carga de rede de proxy externo global

Objetivos

Nesta seção, mostramos como concluir as seguintes tarefas:

  • Crie um certificado gerenciado pelo Google emitido por uma autoridade de certificação (CA) publicamente confiável com autorização do balanceador de carga usando o Gerenciador de certificados.
  • Implante o certificado em um balanceador de carga compatível usando um proxy HTTPS de destino.

Se você estiver implantando um certificado em um domínio de produção, o tráfego será interrompido brevemente enquanto o certificado é configurado e ativado no balanceador de carga.

Antes de começar

  1. Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. Enable the Compute Engine, Certificate Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instale a CLI do Google Cloud.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  7. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  10. Enable the Compute Engine, Certificate Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instale a CLI do Google Cloud.

  12. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  13. Para inicializar a gcloud CLI, execute o seguinte comando:

    gcloud init

Funções exigidas

Verifique se você tem os seguintes papéis para concluir as tarefas deste tutorial:

  • Proprietário do Certificate Manager (roles/certificatemanager.owner)

    Necessário para criar e gerenciar recursos do Certificate Manager.

  • Administrador do balanceador de carga do Compute (roles/compute.loadBalancerAdmin) ou administrador da rede do Compute (roles/compute.networkAdmin)

    Necessário para criar e gerenciar o proxy HTTPS de destino.

  • Administrador do DNS (roles/dns.admin)

    Obrigatório se você quiser usar o Cloud DNS como solução de DNS.

Para ver mais informações, consulte os seguintes tópicos:

Nomes de domínio

Para criar certificados, obtenha os nomes de domínio totalmente qualificados (FQDNs) dos domínios que você possui. Se você não tiver um domínio, use o Cloud Domains para registrar um domínio.

Criar o balanceador de carga

Este tutorial pressupõe que você já criou e configurou os back-ends, as verificações de integridade, os serviços de back-end e os mapas de URL do balanceador de carga. Se você criou um balanceador de carga de aplicativo externo, anote o nome do mapa de URL, porque ele será necessário mais tarde neste tutorial.

Se você não criou o balanceador de carga, consulte as páginas a seguir para criar um:

Criar um certificado gerenciado pelo Google com autorização do balanceador de carga

Para criar um certificado gerenciado pelo Google com autorização do balanceador de carga, faça o seguinte:

Console

  1. No console do Google Cloud , acesse a página Certificate Manager.

    Acessar o Certificate Manager

  2. Na guia Certificados, clique em Adicionar certificado.

  3. No campo Nome do certificado, insira um nome exclusivo para o certificado.

  4. Opcional: no campo Descrição, insira uma descrição para o certificado. A descrição permite identificar o certificado.

  5. Em Local, selecione Global.

  6. Em Escopo, selecione Padrão.

  7. Em Tipo de certificado, selecione Criar certificado gerenciado pelo Google.

  8. Em Tipo de autoridade de certificação, selecione Pública.

  9. No campo Nomes de domínio, especifique uma lista delimitada por vírgulas de nomes de domínio do certificado. Cada nome de domínio precisa ser totalmente qualificado, como myorg.example.com.

  10. Em Tipo de autorização, selecione Autorização do balanceador de carga.

  11. No campo Rótulos, especifique os rótulos a serem associados ao certificado. Para adicionar um rótulo, clique em Adicionar rótulo e especifique uma chave e um valor para o rótulo.

  12. Clique em Criar.

    O novo certificado aparece na lista.

gcloud

Para criar um certificado global gerenciado pelo Google com autorização do balanceador de carga, use o comando certificate-manager certificates create:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAMES"

Substitua:

  • CERTIFICATE_NAME: o nome do certificado.
  • DOMAIN_NAMES: uma lista delimitada por vírgulas dos domínios de destino. Cada nome de domínio precisa ser um nome de domínio totalmente qualificado, como myorg.example.com.

Terraform

Use um google_certificate_manager_certificate recurso.

resource "google_certificate_manager_certificate" "default" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "Cert with LB authorization"
  managed {
    domains = [local.domain]
  }
  labels = {
    "terraform" : true
  }
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

API

Crie o certificado fazendo uma solicitação POST ao método certificates.create da seguinte maneira:

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME"
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
 }
}

Substitua:

  • PROJECT_ID: o ID do projeto Google Cloud .
  • CERTIFICATE_NAME: o nome do certificado.
  • DOMAIN_NAMES: uma lista delimitada por vírgulas dos domínios de destino. Cada nome de domínio precisa ser um nome de domínio totalmente qualificado, como myorg.example.com.

Implantar o certificado em um balanceador de carga

Para implantar o certificado global gerenciado pelo Google, use um mapa de certificados.

Criar um CertificateMap

Crie um mapa de certificados que faça referência ao item no mapa de certificados associado ao seu certificado:

gcloud

Para criar um mapa de certificados, use o comando gcloud certificate-manager maps create:

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

Substitua CERTIFICATE_MAP_NAME pelo nome do mapa de certificado de destino.

Terraform

Para criar um mapa de certificados, use um recurso google_certificate_manager_certificate_map.

resource "google_certificate_manager_certificate_map" "certificate_map" {
  name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

Criar um item no mapa de certificados

Crie um item no mapa de certificados e o associe ao seu certificado e mapa de certificados:

gcloud

Para criar um item no mapa de certificados, use o comando gcloud certificate-manager maps entries create:

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME" \
    --certificates="CERTIFICATE_NAME" \
    --hostname="HOSTNAME"

Substitua:

  • CERTIFICATE_MAP_ENTRY_NAME: o nome do item no mapa de certificados.
  • CERTIFICATE_MAP_NAME: o nome do mapa de certificados a que o item no mapa de certificados está anexado.
  • CERTIFICATE_NAME: o nome do certificado que você quer associar ao item no mapa de certificados.
  • HOSTNAME: o nome do host que você quer associar ao item no mapa de certificados.

    Se você quiser criar um certificado que abranja um domínio curinga e um domínio raiz, especifique o nome do host com uma raiz e um caractere curinga, como example.com e *.example.com. Além disso, você precisa especificar duas entradas de mapa de certificado: uma para example.com e outra para *.example.com.

Terraform

Para criar um item no mapa de certificados com um domínio raiz, use um recurso google_certificate_manager_certificate_map_entry.

resource "google_certificate_manager_certificate_map_entry" "first_entry" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = local.domain
}

Para criar um item no mapa de certificados com um domínio curinga, use um recurso google_certificate_manager_certificate_map_entry.

resource "google_certificate_manager_certificate_map_entry" "second_entry" {
  name        = "${local.name}-second-entity-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = "*.${local.domain}"
}

Verificar se o item no mapa de certificados está ativo

Verifique se o item no mapa de certificados está ativo antes de anexar o mapa de certificados correspondente ao proxy de destino.

Para verificar o item no mapa de certificados, use o comando gcloud certificate-manager maps entries describe:

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

Substitua:

  • CERTIFICATE_MAP_ENTRY_NAME: o nome do item no mapa de certificados.
  • CERTIFICATE_NAME: o nome do certificado que você quer associar ao item no mapa de certificados.

O resultado será o seguinte:

certificates:
createTime: '2021-09-06T10:01:56.229472109Z'
hostname: example.com
name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
state: ACTIVE
updateTime: '2021-09-06T10:01:58.277031787Z'

Anexe o mapa de certificados ao proxy de destino.

É possível anexar o mapa de certificado a um proxy de destino novo ou atual.

gcloud

Para anexar o mapa de certificados a um novo proxy de destino, use o comando gcloud compute target-https-proxies create:

gcloud compute target-https-proxies create PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --url-map="URL_MAP" \
    --global

Substitua:

  • PROXY_NAME: o nome do proxy de destino.
  • CERTIFICATE_MAP_NAME: o nome do mapa de certificados que faz referência ao item no mapa de certificados e ao certificado associado.
  • URL_MAP: o nome do mapa de URL.

Para anexar o mapa de certificados a um proxy HTTPS de destino, use o comando gcloud compute target-https-proxies update. Se você não souber o nome do proxy de destino atual, acesse a página Proxies de destino e anote o nome do proxy.

gcloud compute target-https-proxies update PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --global

Depois de criar ou atualizar o proxy de destino, execute o comando a seguir para verificar:

gcloud compute target-https-proxies list

Terraform

Para anexar o mapa de certificado ao proxy de destino, use um recurso google_compute_target_https_proxy.

Ao configurar um proxy de destino, se você anexar certificados TLS (SSL) diretamente e também por um mapa de certificados, o proxy usará os certificados referenciados pelo mapa e ignorará os certificados TLS (SSL) anexados diretamente.

Verificar o status do certificado

Antes de implantar um certificado em um balanceador de carga, verifique se ele está ativo. Pode levar vários minutos para que o estado do certificado mude para ACTIVE.

Console

  1. No console do Google Cloud , acesse a página Certificate Manager.

    Acessar o Certificate Manager

  2. Na guia Certificados, verifique a coluna Status do certificado.

gcloud

Para verificar o status do certificado, execute o comando a seguir:

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Substitua CERTIFICATE_NAME pelo nome do certificado gerenciado pelo Google de destino.

O resultado será o seguinte:

createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  - domain: myorg.example.com
    state: AUTHORIZED
  domains:
  - myorg.example.com
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
  - myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

Se o estado do certificado não for ACTIVE depois de várias horas, verifique o seguinte:

Para mais etapas de solução de problemas, consulte Resolver problemas do Certificate Manager.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua-os.

  1. Exclua o balanceador de carga e os recursos dele.

    Para mais informações, consulte Limpar uma configuração de balanceamento de carga.

  2. Exclua ou desanexe o mapa de certificados do proxy.

    Para excluir o mapa de certificados, execute o seguinte comando:

    gcloud compute target-https-proxies delete PROXY_NAME
    

    Se você quiser manter o proxy HTTPS de destino, desvincule o mapa de certificados dele.

    • Se houver certificados TLS (SSL) anexados diretamente ao proxy, a remoção do mapa de certificados fará com que o proxy volte a usar esses certificados TLS (SSL) anexados diretamente.
    • Se não houver certificados TLS (SSL) anexados diretamente ao proxy, o mapa de certificados não poderá ser desanexado dele. Primeiro, anexe pelo menos um certificado TLS (SSL) diretamente ao proxy antes de desconectar o mapa de certificados.

    Para desconectar o mapa de certificados, execute o seguinte comando:

    gcloud compute target-https-proxies update PROXY_NAME \
        --clear-certificate-map
    

    Substitua PROXY_NAME pelo nome do proxy de destino.

  3. Exclua o item no mapa de certificados do mapa de certificados:

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
        --map="CERTIFICATE_MAP_NAME"
    

    Substitua:

    • CERTIFICATE_MAP_ENTRY_NAME: o nome do item no mapa de certificados.
    • CERTIFICATE_MAP_NAME: o nome do mapa de certificados.
  4. Exclua o mapa de certificados:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    Substitua CERTIFICATE_MAP_NAME pelo nome do mapa de certificado.

  5. Exclua o certificado gerenciado pelo Google:

    Console

    1. No console do Google Cloud , acesse a página Certificate Manager.

      Acessar o Certificate Manager

    2. Na guia Certificados, marque a caixa de seleção do certificado.

    3. Clique em Excluir.

    4. Na caixa de diálogo exibida, clique em Excluir para confirmar.

    gcloud

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    Substitua CERTIFICATE_NAME pelo nome do certificado de destino.

A seguir