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


Este tutorial orienta você no 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 DNS autorização:

  • 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 obter uma comparação dos tipos compatíveis de autorização de domínio, consulte Domínio autorizações.

Se você quiser migrar um certificado atual 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. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  2. A CLI gcloud versão 465.0.0 ou mais recente é 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 comando a seguir.

    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. do Gerenciador de certificados.
    • Administrador do balanceador de carga do Compute ou Administrador de rede do Compute:necessário para criar e gerenciar proxy de destino HTTPS.
    • Administrador de DNS: obrigatório se você quiser usar o Cloud DNS como seu 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 de 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

Para usar a autorização de DNS por projeto (Pré-lançamento), faça o seguinte: execute o seguinte comando:

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 que você está criando essa autorização de DNS. O nome de domínio deve ser um domínio nome de domínio, como myorg.example.com.

O comando retorna uma resposta semelhante a esta. Usar o registro CNAME da saída para o adicionar à configuração do 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.

Quando você cria uma autorização de DNS, o comando da CLI gcloud retorna 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 do DNS de destino. zona.

  1. 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 DNS de destino.

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"
  
  1. 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 do DNS, você pode usar 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 de DNS criado 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 exibida, 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. Descrição ajuda a identificar um certificado específico posteriormente.

  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 deve ser um domínio nome de domínio, 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 DNS associada, faça o seguinte:

    1. Clique em Criar autorização DNS ausente para exibir a opção Caixa de diálogo de autorização.
    2. No campo DNS Authorization Name, 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. Você pode 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.

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 o prefixo de ponto de asterisco (*.) significa um certificado com caractere 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. que você criou 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 deve ser um nome de domínio totalmente qualificado, como myorg.example.com:
  • AUTHORIZATION_NAME: o nome da autorização de DNS. que você criou 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 algumas horas para que o estado do certificado seja alterado 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

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

Criar um CertificateMap

Criar um mapa de certificados que faz referência à entrada do mapa do certificado que está associado 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, você pode usar uma 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 à sua 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 do entrada do mapa de certificado
  • 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 usar. para associar a esta entrada do mapa de certificado
  • HOSTNAME: o nome do host que você quer associar com esta entrada de mapa de certificado

Terraform

Para criar uma entrada de mapa de certificado, você pode usar uma 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 certificado 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 do destino. entrada do mapa de certificado
  • 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 certificado 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, você pode usar um Recurso google_compute_target_https_proxy.

Se houver certificados TLS (SSL) anexados diretamente à proxy, o proxy dá preferência aos certificados referenciados pelo mapa de certificados pelos 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 alterações feitas neste tutorial, faça o seguinte etapas:

  1. Remover o mapa de certificado do proxy.

    Antes de desanexar 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 pode ser removido do proxy. Primeiro, você precisa anexe pelo menos um certificado TLS (SSL) diretamente ao proxy antes é possível desanexar o mapa de certificado.

    Para desanexar 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 do destino. entrada do mapa de certificado.
    • CERTIFICATE_MAP_NAME: o nome do destino. mapa de certificados.
  3. Exclua o mapa de certificado:

    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 do destino. Autorização de DNS.

A seguir