Neste tutorial, mostramos como usar o Certificate Manager para implantar um certificado global gerenciado pelo Google com autorização de DNS.
Os seguintes balanceadores de carga globais são compatíveis com 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 rede de proxy externo global
Se você quiser fazer a implantação em balanceadores de carga entre regiões ou regionais, consulte o seguinte:
Objetivos
Nesta seção, mostramos como concluir as seguintes tarefas:
- Crie um certificado gerenciado pelo Google emitido por uma autoridade de certificação confiável publicamente com autorização de DNS usando o Gerenciador de certificados.
- Implante o certificado em um balanceador de carga compatível usando um proxy HTTPS de destino.
Antes de começar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Crie uma zona DNS pública
Proprietário do Gerenciador de certificados (
roles/certificatemanager.owner
)Necessário para criar e gerenciar recursos do Gerenciador de certificados.
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.
- Funções e permissões para o Certificate Manager.
- Papéis e permissões do IAM do Compute Engine para o Compute Engine.
- Papéis e permissões do Cloud DNS.
Para criar um balanceador de carga de aplicativo externo global, consulte Configurar um balanceador de carga de aplicativo externo global com back-ends de grupos de instâncias de VM.
Para criar um balanceador de carga de aplicativo clássico, consulte Configurar um balanceador de carga de aplicativo clássico com um back-end de grupo gerenciado de instâncias.
Para criar um balanceador de carga de rede de proxy externo global (proxy SSL), consulte Configurar um balanceador de carga de rede de proxy externo global (proxy SSL) com back-ends de grupo de instâncias de VM.
Para criar um balanceador de carga de rede de proxy clássico (proxy SSL), consulte Configurar um balanceador de carga de rede de proxy clássico (proxy SSL) com back-ends de grupo de instâncias de VM.
Funções exigidas
Verifique se você tem os seguintes papéis para concluir as tarefas deste tutorial:
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 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 ou anexar uma autorização 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
Para criar uma autorização de DNS, use o comando certificate-manager
dns-authorizations create
:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME"
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, comomyorg.example.com
.
Os certificados globais gerenciados pelo Google usam FIXED_RECORD
como o tipo de autorização de DNS padrão. Para usar a autorização de DNS PER_PROJECT_RECORD
, execute o seguinte comando:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" \ --type="PER_PROJECT_RECORD"
Depois de criar a autorização de DNS, verifique-a com o
comando certificate-manager dns-authorizations describe
:
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME \
A resposta será semelhante a esta: Na saída, encontre a linha dnsResourceRecord
e extraia o registro CNAME
(data
, name
e type
) 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
.
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
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, comomyorg.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
No console Google Cloud , acesse a página Certificate Manager.
Na guia Certificados, clique em Adicionar certificado.
No campo Nome do certificado, insira um nome exclusivo para o certificado.
Opcional: no campo Descrição, insira uma descrição para o certificado. A descrição permite identificar o certificado.
Em Local, selecione Global.
Em Escopo, selecione Padrão.
Em Tipo de certificado, selecione Criar certificado gerenciado pelo Google.
Em Tipo de autoridade de certificação, selecione Pública.
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
.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:
- Clique em Criar autorização de DNS ausente.
- 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. - Clique em Criar autorização de DNS.
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.Clique em Criar.
O novo certificado aparece na lista.
gcloud
Para criar um certificado global gerenciado pelo Google com autorização de DNS, execute
o comando certificate-manager certificates create
com a
flag dns-authorizations
:
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="DOMAIN_NAME,*.DOMAIN_NAME" \ --dns-authorizations="AUTHORIZATION_NAMES"
Substitua:
CERTIFICATE_NAME
: o nome do certificado.DOMAIN_NAME
: o nome do domínio de destino. O nome de domínio precisa ser um nome de domínio totalmente qualificado, comomyorg.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 criadas para o certificado.
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"], "dnsAuthorizations": [ "projects/PROJECT_ID/locations/global/dnsAuthorizations/AUTHORIZATION_NAME", ], } }
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 um nome de domínio totalmente qualificado, comomyorg.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.
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:
No console Google Cloud , acesse a página Zonas de DNS.
Clique no nome da zona de DNS em que você quer adicionar o registro.
Na página Detalhes da zona, clique em Adicionar padrão.
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 comandogcloud 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
.
No campo Tipo de registro de recurso, selecione CNAME.
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.
Na lista Unidade TTL, selecione a unidade de tempo. Por exemplo,
30 minutes
.No campo Nome canônico, insira o valor completo do campo
dnsResourceRecord.data
, conforme exibido na saída do comandogcloud certificate-manager dns-authorizations describe
.Para inserir informações adicionais, clique em Adicionar item.
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:
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.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
. Copie o nome do registro de comandogcloud 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, comomyorg.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 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"
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
.
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
No console Google Cloud , acesse a página Certificate Manager.
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
depois de várias 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 um certificado global gerenciado pelo Google, use um mapa de certificados.
Criar um CertificateMap
Crie um mapa de certificados que faça referência à entrada de mapa de certificados associada 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
.
Criar uma entrada de mapa de certificado
Crie uma entrada de mapa de certificado e a associe ao seu certificado e mapa de certificado:
gcloud
Para criar uma entrada de mapa de certificado, 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 da entrada do mapa de certificados.CERTIFICATE_MAP_NAME
: o nome do mapa de certificados a que a entrada do mapa de certificados está anexada.CERTIFICATE_NAME
: o nome do certificado que você quer associar à entrada do mapa de certificados.HOSTNAME
: o nome do host que você quer associar à entrada do 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, especifique duas entradas de mapa de certificado: uma paraexample.com
e outra para*.example.com
.
Terraform
Para criar uma entrada de mapa de certificado com um domínio raiz, use um
recurso google_certificate_manager_certificate_map_entry
.
Para criar uma entrada de mapa de certificado com um domínio curinga, use um
recurso google_certificate_manager_certificate_map_entry
.
Verificar se a entrada do mapa de certificados está ativa
Verifique se a entrada do mapa de certificados está ativa antes de anexar o mapa de certificados correspondente ao proxy de destino.
Para verificar a entrada do 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 da entrada do mapa de certificados.CERTIFICATE_NAME
: o nome do certificado que você quer associar à entrada do mapa de certificados.
O resultado será assim:
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 certificado 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 certificado que faz referência à entrada do mapa de certificado 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.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua-os.
Exclua o balanceador de carga e os recursos dele.
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 do proxy. Antes de separar o mapa de certificados, observe o seguinte:
- Se houver certificados TLS (SSL) anexados diretamente ao proxy, a remoção do mapa de certificados fará com que o proxy retome o uso desses 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.Exclua a entrada 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 da entrada do mapa de certificados.CERTIFICATE_MAP_NAME
: o nome do mapa de certificados.
Exclua o mapa de certificados:
gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
Substitua
CERTIFICATE_MAP_NAME
pelo nome do mapa de certificado.Exclua o certificado gerenciado pelo Google:
Console
No console Google Cloud , acesse a página Certificate Manager.
Na guia Certificados, marque a caixa de seleção do certificado.
Clique em Excluir.
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.Exclua a autorização de DNS:
gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
Substitua
AUTHORIZATION_NAME
pelo nome da autorização de DNS.