Implantar um certificado gerenciado pelo Google em várias regiões com autorização de DNS

Este tutorial mostra como usar o Gerenciador de certificados para implantar um certificado global gerenciado pelo Google com autorização de DNS em um balanceador de carga de aplicativo interno entre regiões.

Se você quiser fazer a implantação em balanceadores de carga externos globais ou regionais, consulte:

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

Antes de criar o certificado, crie uma zona DNS pública. Em seguida, crie uma autorização de DNS e adicione o registro CNAME à zona DNS de destino.

Criar uma autorização de DNS

Uma autorização de DNS abrange apenas um nome de domínio. É necessário criar uma autorização de DNS separada para cada nome de domínio que você quer usar com o certificado de destino.

Se você estiver criando uma autorização de DNS para um certificado curinga, como *.myorg.example.com, configure a autorização de DNS para o domínio principal, por exemplo, myorg.example.com.

Console

É possível criar uma autorização de DNS ou anexar uma autorização de DNS ao criar um certificado. Para mais informações, consulte Criar um certificado gerenciado pelo Google que faça referência à autorização DNS.

gcloud

É possível criar dois tipos de autorizações de DNS: FIXED_RECORD ou PER_PROJECT_RECORD. Para mais informações, consulte Autorização de DNS.

Autorização de DNS FIXED_RECORD

Para criar uma autorização de DNS FIXED_RECORD, use o seguinte comando gcloud certificate-manager dns-authorizations create:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --type=[FIXED_RECORD]

Substitua:

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

Depois de criar a autorização DNS FIXED_RECORD, verifique-a com o comando gcloud certificate-manager dns-authorizations describe:

gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

A resposta será semelhante a esta: Na saída, encontre a seção dnsResourceRecord. Localize o registro CNAME e adicione os detalhes dele (data, name e type) à sua 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'

Autorização de DNS PER_PROJECT_RECORD

Para criar uma autorização de DNS PER_PROJECT_RECORD, use o seguinte comando gcloud certificate-manager dns-authorizations create:

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

Substitua:

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

Depois de criar a autorização DNS PER_PROJECT_RECORD, verifique-a com o comando gcloud certificate-manager dns-authorizations describe:

gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

A resposta será semelhante a esta: Na saída, encontre a seção dnsResourceRecord. Localize o registro CNAME e adicione os detalhes dele (data, name e type) à sua 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_ujmmovf2vn55tgye.myorg.example.com
  type: CNAME
domain: myorg.example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

API

Para criar uma autorização de DNS, faça uma solicitação POST ao método dnsAuthorizations.create:

POST /v1/projects/PROJECT_ID/locations/global/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME"
{
  "domain": "DOMAIN_NAME",
  "type": "PER_PROJECT_RECORD" //optional
}

Substitua:

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

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 Certificate Manager.

    Acessar o Gerenciador de certificados

  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 Todas as regiões.

  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. O nome de domínio também pode ser um nome de domínio curinga, como *.example.com.

  10. Em Tipo de autorização, selecione Autorização de DNS.

    A página lista as autorizações de DNS dos nomes de domínio. Se um nome de domínio não tiver uma autorização de DNS associada, siga estas etapas para criar uma:

    1. Clique em Criar autorização de DNS ausente.
    2. No campo Nome da autorização DNS, especifique o nome da autorização DNS. O tipo de autorização de DNS padrão é FIXED_RECORD. Para gerenciar certificados de forma independente em vários projetos, marque a caixa de seleção Autorização por projeto.
    3. Clique em Criar autorização de DNS.
  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 gerenciado pelo Google entre regiões com autorização de DNS, use o comando certificate-manager certificates create com as flags dns-authorizations e --scope:

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

Substitua:

  • CERTIFICATE_NAME: o nome do certificado.
  • DOMAIN_NAME: o nome do domínio de destino. O nome de domínio precisa ser totalmente qualificado, como myorg.example.com, ou um domínio curinga, como *.myorg.example.com. O prefixo de ponto e asterisco (*.) significa um certificado curinga.
  • AUTHORIZATION_NAMES: uma lista separada por vírgulas dos nomes das autorizações de DNS.

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"],
  "dnsAuthorizations": [
   "projects/PROJECT_ID/locations/global/dnsAuthorizations/AUTHORIZATION_NAME",
  ],
  "scope": "ALL_REGIONS"
 }
}

Substitua:

  • PROJECT_ID: o ID do projeto Google Cloud .
  • CERTIFICATE_NAME: o nome do certificado.
  • DOMAIN_NAME: o nome do domínio de destino. O nome de domínio precisa ser totalmente qualificado, como myorg.example.com, ou um domínio curinga, como *.myorg.example.com. O prefixo de ponto de asterisco (*.) significa um certificado curinga.
  • AUTHORIZATION_NAMES: uma lista separada por vírgulas dos nomes das autorizações de DNS.

Adicionar o registro CNAME à configuração de DNS

Se você estiver usando uma solução de DNS de terceiros para gerenciar seu DNS, consulte a documentação dela para adicionar o registro CNAME à configuração de DNS. Se você estiver usando Google Cloud para gerenciar seu DNS, siga as etapas desta seção.

Console

Para criar um conjunto de registros, siga estas etapas:

  1. No console do Google Cloud , acesse a página Zonas de DNS.

    Acessar a página Zonas do Cloud DNS

  2. Clique no nome da zona de DNS em que você quer adicionar o registro.

  3. Na página Detalhes da zona, clique em Adicionar padrão.

  4. Na página Criar conjunto de registros, no campo Nome do DNS, insira o subdomínio da zona DNS.

    Ao inserir o nome do subdomínio, verifique se ele, incluindo o texto esmaecido mostrado no campo Nome DNS, corresponde ao valor completo do campo dnsResourceRecord.name, conforme mostrado na saída do comando gcloud certificate-manager dns-authorizations describe.

    Veja os exemplos a seguir:

    • Se o valor do campo dnsResourceRecord.name for _acme-challenge.myorg.example.com. e o texto esmaecido no campo Nome do DNS for .example.com., insira _acme-challenge.myorg.

    • Se o valor do campo dnsResourceRecord.name for _acme-challenge.myorg.example.com. e o texto esmaecido no campo Nome do DNS for .myorg.example.com., insira _acme-challenge.

    • Se o valor do campo dnsResourceRecord.name for _acme-challenge_ujmmovf2vn55tgye.myorg.example.com. e o texto esmaecido no campo Nome do DNS for .myorg.example.com., insira _acme-challenge_ujmmovf2vn55tgye.

  5. No campo Tipo de registro de recurso, selecione CNAME.

  6. No campo TTL, insira um valor numérico positivo para o time to live (TTL) do registro de recursos, que é o tempo que ele pode ser armazenado em cache.

  7. Na lista Unidade TTL, selecione a unidade de tempo. Por exemplo, 30 minutes.

  8. No campo Nome canônico, insira o valor completo do campo dnsResourceRecord.data, conforme mostrado na saída do comando gcloud certificate-manager dns-authorizations describe.

  9. Para inserir informações adicionais, clique em Adicionar item.

  10. Clique em Criar.

gcloud

Ao criar uma autorização de DNS, o comando da CLI gcloud retorna o registro CNAME correspondente. Para adicionar o registro CNAME à sua configuração DNS na zona DNS do domínio de destino, siga estas etapas:

  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="VALIDATION_SUBDOMAIN_NAME.DOMAIN_NAME." \
        --ttl="30" \
        --type="CNAME" \
        --zone="DNS_ZONE_NAME"
    

    Substitua:

    • CNAME_RECORD: o valor de dados completo do registro CNAME retornado pelo comando da Google Cloud CLI que criou a autorização de DNS correspondente.
    • VALIDATION_SUBDOMAIN_NAME: o subdomínio de prefixo da zona DNS, como _acme-challenge. Você pode copiar o nome do registro de comando gcloud certificate-manager dns-authorizations describe, conforme descrito em Criar uma autorização de DNS.
    • DOMAIN_NAME: o nome do domínio de destino.O nome de domínio precisa ser totalmente qualificado, como myorg.example.com. Você também precisa incluir o ponto final após o nome de domínio de destino.
    • DNS_ZONE_NAME: o nome da zona de DNS de destino.

    Para mais informações sobre a diferença entre as autorizações de DNS FIXED_RECORD e PER_PROJECT_RECORD, consulte os exemplos a seguir. A única diferença entre os dois exemplos é o valor da flag --name.

    Autorização de DNS FIXED_RECORD

    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"
    

    Autorização de DNS PER_PROJECT_RECORD

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

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

    Substitua DNS_ZONE_NAME pelo nome da zona de DNS de destino.

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]
}

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 Gerenciador de certificados

  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á assim:

createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  - domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
    - projects/myProject/locations/global/dnsAuthorizations/myCert
  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 após algumas horas, verifique se você adicionou corretamente o registro CNAME à sua configuração de DNS.

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

Implantar o certificado em um balanceador de carga

Para implantar o certificado global gerenciado pelo Google, anexe-o diretamente ao proxy de destino.

Anexe o certificado diretamente ao proxy de destino

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

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

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

Substitua:

  • PROXY_NAME: o nome do proxy de destino.
  • URL_MAP: o nome do mapa de URL. Você criou o mapa de URL ao criar o balanceador de carga.
  • CERTIFICATE_NAME: o nome do certificado.

Para anexar o certificado 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, acesse a página Proxies de destino e anote o nome do proxy.

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

Depois de criar ou atualizar o proxy de destino, execute o comando a seguir para verificar se ele está funcionando:

gcloud compute target-https-proxies list

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.

    Consulte Limpar uma configuração de balanceamento de carga

  2. Exclua o certificado gerenciado pelo Google:

    Console

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

      Acessar o Gerenciador de certificados

    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.

  3. 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.