Implantar um certificado global gerenciado pelo Google com autorização de DNS


Este tutorial explica o processo de implantação de certificado usando um certificado gerenciado pelo Google com DNS autorização como exemplo.

Os balanceadores de carga a seguir oferecem suporte a certificados gerenciados pelo Google com autorização de DNS:

  • Balanceador de carga de aplicativo externo global
  • Balanceador de carga de aplicativo clássico
  • Balanceador de carga de aplicativo interno entre regiões
  • Balanceador de carga de rede de proxy externo global

Para comparar os tipos de autorização de domínio aceitos, consulte Autorizações de domínio.

Se você quiser migrar um certificado para o Gerenciador de certificados, siga as etapas em Migrar certificados para o Gerenciador de certificados.

Objetivos

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

  • Criar um certificado gerenciado pelo Google emitido por uma organização confiável autoridade certificadora com autorização de DNS usando o Gerenciador de certificados.
  • Implantar o certificado em um balanceador de carga compatível usando um HTTPS de destino proxy.

Para mais informações sobre o processo de implantação de certificados, consulte Implantação geral.

Antes de começar

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

    Go to project selector

  2. A versão 465.0.0 ou mais recente da CLI gcloud é necessária para implantar o certificado. Para verificar a versão da CLI gcloud, execute o seguinte comando:

    gcloud --version
    
  3. Para atualizar a CLI gcloud, execute o seguinte comando.

    gcloud components update
    
  4. Você precisa ter os papéis a seguir para concluir as tarefas desta tutorial:

    • Proprietário do Gerenciador de certificados: é necessário para criar e gerenciar os recursos do Gerenciador de certificados.
    • Administrador do balanceador de carga do Compute ou administrador da rede do Compute: necessário para criar e gerenciar o proxy de destino HTTPS.
    • Administrador de DNS: obrigatório se você quiser usar o Cloud DNS como solução de DNS.

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

Criar um certificado gerenciado pelo Google com autorização de DNS

Conclua as etapas nesta seção para criar uma autorização de DNS e uma Certificado gerenciado pelo Google que faz referência a essa autorização de DNS.

Criar uma autorização de DNS

Crie a autorização DNS conforme descrito nesta seção. Se você está criando um Autorização de DNS para um certificado com caractere curinga, como *.myorg.example.com, configura a autorização de DNS para o domínio pai, por exemplo, myorg.example.com.

gcloud

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

O tipo de autorização de DNS padrão para um certificado global gerenciado pelo Google é FIXED_RECORD. Para usar a autorização de DNS por projeto, execute os seguintes comandos:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --type="PER_PROJECT_RECORD"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

Substitua:

  • AUTHORIZATION_NAME: o nome da autorização de DNS.
  • DOMAIN_NAME: o nome do domínio para o qual você está criando essa autorização de DNS. O nome de domínio precisa ser um nome de domínio totalmente qualificado, como myorg.example.com.

O comando retorna uma resposta semelhante a esta. Use o registro CNAME da saída para adicionar à configuração de DNS.

createTime: '2022-01-14T13:35:00.258409106Z'
dnsResourceRecord:
data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog.
name: _acme-challenge.myorg.example.com.
type: CNAME
domain: myorg.example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

Terraform

Para criar uma autorização de DNS, use um Recurso google_certificate_manager_dns_authorization.

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "${local.name}-dnsauth-${random_id.tf_prefix.hex}"
  description = "The default dns auth"
  domain      = local.domain
  labels = {
    "terraform" : true
  }
}

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

Adicionar o registro CNAME à configuração de DNS

Se você estiver usando o Google Cloud para gerenciar seu DNS, conclua as etapas nesta seção. Caso contrário, consulte a documentação do seu DNS de terceiros solução.

Antes de concluir as etapas nesta seção, verifique se você criou um zona de DNS pública.

Ao criar uma autorização de DNS, o comando da CLI gcloud retorna o registro CNAME correspondente. Você precisa adicionar esse registro CNAME à sua configuração DNS na zona DNS do domínio de destino da seguinte maneira:

gcloud

  1. Inicie a transação do registro DNS:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    Substitua DNS_ZONE_NAME pelo nome da zona de DNS de destino.

  2. Adicione o registro CNAME à zona DNS de destino:

    gcloud dns record-sets transaction add CNAME_RECORD \
        --name="_acme-challenge.DOMAIN_NAME." \
        --ttl="30" \
        --type="CNAME" \
        --zone="DNS_ZONE_NAME"
    

    Substitua:

    • CNAME_RECORD: o valor de dados completo do registro CNAME retornados pelo comando da Google Cloud CLI que criou o DNS autorização.
    • DOMAIN_NAME: o nome do domínio de destino. O nome de domínio deve ser um nome de domínio totalmente qualificado, como myorg.example.com: Você também deve incluir o ponto final após o nome de domínio de destino.
    • DNS_ZONE_NAME: o nome da zona de destino do DNS.

    Veja o exemplo a seguir:

    gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \
        --name="_acme-challenge.myorg.example.com." \
        --ttl="30" \
        --type="CNAME" \
        --zone="myorg-example-com"
    
  3. Execute a transação do registro DNS para salvar as alterações:

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    Substitua DNS_ZONE_NAME pelo nome do DNS de destino. zona.

Terraform

Para adicionar o registro CNAME à configuração de DNS, use um recurso google_dns_record_set.

resource "google_dns_record_set" "cname" {
  name         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].name
  managed_zone = google_dns_managed_zone.default.name
  type         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].type
  ttl          = 300
  rrdatas      = [google_certificate_manager_dns_authorization.default.dns_resource_record[0].data]
}

Criar um certificado gerenciado pelo Google que faça referência à autorização DNS

Para criar um certificado gerenciado pelo Google que faça referência à autorização DNS criada nas etapas anteriores, faça o seguinte:

Console

  1. No console do Google Cloud, acesse a página Gerenciador de certificados.

    Acessar o Gerenciador de certificados

  2. Na página que aparece, selecione a guia Certificados.

  3. Clique em Adicionar certificado.

  4. Digite um Nome para o certificado.

    O nome precisa ser exclusivo no projeto.

  5. Opcional: digite a Descrição do certificado. A descrição ajuda a identificar um certificado específico mais tarde.

  6. Em Local, escolha Global.

  7. Em Escopo, escolha qualquer uma das seguintes opções:

    1. Padrão: escolha o padrão para Balanceador de carga de aplicativo externo global, Balanceador de carga de aplicativo clássico ou Balanceador de carga de rede de proxy externo global.
    2. Todas as regiões: escolha todas as regiões para um balanceador de carga de aplicativo interno entre regiões.
  8. Em Tipo de certificado, escolha Criar um certificado gerenciado pelo Google.

  9. Em Tipo de autoridade de certificação, escolha Pública.

  10. Especifique os Nomes de domínio do certificado. Insira um valor delimitado por vírgulas lista dos domínios de destino. Além disso, cada nome de domínio precisa ser um nome de domínio totalmente qualificado, como myorg.example.com.

  11. Em Tipo de autorização, escolha Autorização de DNS. Se o nome de domínio tiver uma autorização DNS associada, ele será selecionado automaticamente. Se o nome de domínio não tiver uma autorização de DNS associada, faça o seguinte:

    1. Clique em Criar autorização de DNS ausente para abrir a caixa de diálogo "Criar autorização de DNS".
    2. No campo Nome da autorização de DNS, especifique o nome da autorização de DNS.
    3. Clique em Criar autorização de DNS. Verifique se o nome DNS está associado ao nome de domínio.
  12. Especifique um rótulo para associar ao certificado. É possível adicionar mais de um rótulo, se necessário. Para adicionar um marcador, clique no Adicionar rótulo e especifique um key e um value para o rótulo.

  13. Clique em Criar. Verifique se o novo certificado aparece na lista de certificados.

gcloud

Para um balanceador de carga de aplicativo externo global, um balanceador de carga de aplicativo clássico ou Balanceador de carga de rede de proxy externo global

Execute este comando:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME \
    --dns-authorizations=AUTHORIZATION_NAME

Substitua:

  • CERTIFICATE_NAME: um nome exclusivo do certificado.
  • DOMAIN_NAME: o domínio de destino do certificado. O nome de domínio deve ser um nome de domínio totalmente qualificado, como myorg.example.com:
  • AUTHORIZATION_NAME: o nome do DNS. autorização que você criou para este certificado.

Para criar um certificado gerenciado pelo Google com um nome de domínio curinga, use o comando a seguir. Um nome de domínio curinga. abrange todos os subdomínios de primeiro nível de um determinado domínio.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
    --dns-authorizations=AUTHORIZATION_NAME

Substitua:

  • CERTIFICATE_NAME: um nome exclusivo do certificado.
  • DOMAIN_NAME: o domínio de destino do certificado. O prefixo de ponto de asterisco (*.) significa um certificado curinga. O domínio precisa ser um nome de domínio totalmente qualificado, como myorg.example.com.
  • AUTHORIZATION_NAME: o nome da autorização de DNS criada para este certificado.

Para um balanceador de carga de aplicativo interno entre regiões

Execute este comando:

  gcloud certificate-manager certificates create CERTIFICATE_NAME \
      --domains=DOMAIN_NAME \
      --dns-authorizations=AUTHORIZATION_NAME \
      --scope=all-regions

Substitua:

  • CERTIFICATE_NAME: um nome exclusivo do certificado.
  • DOMAIN_NAME: o domínio de destino do certificado. O nome de domínio deve ser um nome de domínio totalmente qualificado, como myorg.example.com:
  • AUTHORIZATION_NAME: o nome do DNS. autorização que você criou para este certificado.

Para criar um certificado gerenciado pelo Google com um nome de domínio curinga, use o comando a seguir. Um nome de domínio curinga. abrange todos os subdomínios de primeiro nível de um determinado domínio.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
    --dns-authorizations=AUTHORIZATION_NAME \
    --scope=all-regions

Substitua:

  • CERTIFICATE_NAME: um nome exclusivo do certificado.
  • DOMAIN_NAME: o domínio de destino do certificado. O o prefixo de ponto de asterisco (*.) significa um certificado com caractere curinga. O nome de domínio precisa ser totalmente qualificado, como myorg.example.com.
  • AUTHORIZATION_NAME: o nome da autorização de DNS criada para este certificado.

Terraform

Use um recurso google_certificate_manager_certificate.

resource "google_certificate_manager_certificate" "root_cert" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "The wildcard cert"
  managed {
    domains = [local.domain, "*.${local.domain}"]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id
    ]
  }
  labels = {
    "terraform" : true
  }
}

Verificar se o certificado está ativo

Use o comando a seguir para verificar se o próprio certificado está ativo antes de implantá-lo no balanceador de carga. Pode levar várias horas para que o estado do certificado mude para ACTIVE.

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Substitua CERTIFICATE_NAME pelo nome do destino. Certificado gerenciado pelo Google.

O comando retorna uma saída semelhante a esta:

expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  -   domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
  -   projects/my-project/locations/global/dnsAuthorizations/myAuth
  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'

Implantar o certificado em um balanceador de carga

Nesta seção, apresentamos as etapas necessárias para implantar o serviço gerenciado pelo Google para um balanceador de carga.

Antes de prosseguir com as tarefas nesta seção, você precisa concluir as tarefas listadas no Criar um certificado gerenciado pelo Google com autorização de DNS nesta seção.

Dependendo do tipo de balanceador de carga, é possível implantar certificados da seguinte maneira:

Implantar o certificado usando um mapa de certificados

Esta seção descreve as etapas para implantar um certificado usando um mapa de certificados.

Criar um CertificateMap

Crie um mapa de certificado que faça referência à entrada de mapa de certificado associada ao seu certificado:

gcloud

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

Substitua CERTIFICATE_MAP_NAME pelo nome do destino. mapa de certificados.

Terraform

Para criar um mapa de certificado, 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 uma entrada de mapa de certificado

Crie uma entrada de mapa de certificado. e associá-la ao seu certificate como além do mapa de certificados:

gcloud

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

Substitua:

  • CERTIFICATE_MAP_ENTRY_NAME: um nome exclusivo da entrada do mapa de certificados
  • CERTIFICATE_MAP_NAME: o nome do certificado mapeado para que esta entrada do mapa de certificado anexa
  • CERTIFICATE_NAME: o nome do certificado que você quer associar a essa entrada do mapa de certificados.
  • HOSTNAME: o nome do host que você quer associar a esta entrada do mapa de certificado.

Se você estiver criando certificados com um domínio curinga, especifique o nome do host com um caractere curinga, como *.example.com.

Terraform

Para criar uma entrada de mapa de certificado, 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
}

Verificar se a entrada do mapa de certificados está ativa

Use o comando a seguir para verificar se a entrada do mapa de certificados está ativa antes de anexar o mapa de certificado correspondente ao proxy de destino:

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

Substitua:

  • CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa de certificados de destino
  • CERTIFICATE_MAP_NAME: o nome do certificado mapeado para que esta entrada do mapa de certificado anexa

O comando retorna uma saída semelhante a esta:

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'

Anexar o mapa de certificado ao proxy de destino

Anexe o mapa de certificado configurado ao proxy de destino:

gcloud

  1. No Console do Google Cloud, acesse a página Proxies de destino.

    Ir para destino proxies

  2. Anote o nome do proxy de destino.

  3. Anexe o mapa de certificados ao proxy de destino:

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

    Substitua:

    • PROXY_NAME: o nome do proxy de destino.
    • CERTIFICATE_MAP_NAME: o nome do certificado. mapa fazendo referência à entrada do mapa do seu certificado e ao certificado.

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 meio de um mapa de certificados, o proxy usa os certificados referenciados pelo mapa de certificados e ignora os certificados TLS (SSL) anexados diretamente.

Anexar o certificado diretamente ao proxy de destino

Para anexar o certificado diretamente ao proxy, execute o seguinte comando:

gcloud compute target-https-proxies update PROXY_NAME \
    --url-map=URL_MAP \
    --global \
    --certificate-manager-certificates=CERTIFICATE_NAME

Substitua:

  • PROXY_NAME: um nome exclusivo do proxy.
  • URL_MAP: o nome do mapa de URL. Você criou o mapa de URLs quando você criou o balanceador de carga.
  • CERTIFICATE_NAME: o nome do certificado.

Limpar

Para reverter as mudanças feitas neste tutorial, siga estas etapas:

  1. Desanexe o mapa de certificados do proxy.

    Antes de desconectar o mapa de certificado, observe o seguinte:

    • Se houver certificados TLS (SSL) anexados diretamente ao proxy, remover o mapa de certificado faz com que o proxy retome o uso deles certificados TLS (SSL) anexados diretamente.
    • Se não houver certificados TLS (SSL) anexados diretamente ao proxy, o mapa de certificado não poderá ser removido do proxy. É necessário anexar pelo menos um certificado TLS (SSL) diretamente ao proxy antes de desconectar o mapa de certificado.

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

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

    Substitua PROXY_NAME pelo nome do proxy de destino.

  2. Exclua a entrada do mapa de certificado:

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

    Substitua:

    • CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa de certificados de destino.
    • CERTIFICATE_MAP_NAME: o nome do destino. mapa de certificados.
  3. Exclua o mapa de certificados:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    Substitua CERTIFICATE_MAP_NAME pelo nome do destino. mapa de certificados.

  4. Exclua o certificado gerenciado pelo Google:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    Substitua CERTIFICATE_NAME pelo nome do destino. certificado.

  5. Exclua a autorização de DNS:

    gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
    

    Substitua AUTHORIZATION_NAME pelo nome da autorização de DNS de destino.

A seguir