Este tutorial mostra como migrar certificados de terceiros para um Google Cloud equilibrador de carga através do Gestor de certificados.
Para migrar certificados de terceiros sem período de inatividade, crie o mesmo número de certificados geridos pela Google que tem de certificados de terceiros. Em seguida, consolide os certificados num único mapa de certificados e implemente o mapa de certificados num equilibrador de carga através do DNS. Por último, atualize os registos A e AAAA de DNS para apontarem para o endereço IP do balanceador de carga.
Para encontrar a lista de equilibradores de carga suportados, consulte o artigo Vista geral do Gestor de certificados.
Objetivos
Este tutorial mostra como concluir as seguintes tarefas:
- Crie certificados geridos pela Google com autorização de DNS.
- Crie um mapa de certificados para todos os certificados.
- Implemente certificados no balanceador de carga através do DNS.
- Atualize os registos A e AAAA de DNS para apontarem para o endereço IP do balanceador de carga.
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.
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init Proprietário do Gestor de certificados (
roles/certificatemanager.owner)Necessário para criar e gerir recursos do Gestor de certificados.
Administrador do balanceador de carga de computação (
roles/compute.loadBalancerAdmin) ou administrador de rede de computação (roles/compute.networkAdmin)Obrigatório para criar e gerir o proxy de destino HTTPS.
Administrador de DNS (
roles/dns.admin)Obrigatório se quiser usar o Cloud DNS como solução de DNS.
- Funções e autorizações para o Gestor de certificados.
- Funções e autorizações do IAM do Compute Engine para o Compute Engine.
- Funções e autorizações para o Cloud DNS.
AUTHORIZATION_NAME: o nome da autorização de DNS.DOMAIN_NAME: o nome do domínio de destino para o qual está a criar esta autorização de DNS. O nome do domínio tem de ser um nome do domínio totalmente qualificado, comomyorg.example.com.AUTHORIZATION_NAME: o nome da autorização de DNS.DOMAIN_NAME: o nome do domínio de destino para o qual está a criar esta autorização de DNS. O nome do domínio tem de ser um nome do domínio totalmente qualificado, comomyorg.example.com.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 está a criar esta autorização de DNS. O nome do domínio tem de ser um nome do domínio totalmente qualificado, comomyorg.example.com.Na Google Cloud consola, aceda à página Gestor de certificados.
No separador Certificados, clique em Adicionar certificado.
No campo Nome do certificado, introduza um nome exclusivo para o certificado.
Opcional: no campo Descrição, introduza uma descrição para o certificado. A descrição permite-lhe identificar o certificado.
Para Localização, selecione Global.
Para Âmbito, selecione Predefinição.
Para Tipo de certificado, selecione Criar certificado gerido pela Google.
Para Tipo de autoridade de certificação, selecione Público.
No campo Nomes de domínios, especifique uma lista de nomes de domínios do certificado separados por vírgulas. Cada nome do domínio tem de ser um nome do domínio totalmente qualificado, como
myorg.example.com. O nome do domínio também pode ser um nome de domínio com carateres universais, como*.example.com.Para Tipo de autorização, selecione Autorização de DNS.
A página apresenta as autorizações de DNS dos nomes de domínios. Se um nome de domínio não tiver uma autorização de DNS associada, siga estes passos para criar uma:
- Clique em Criar autorização de DNS em falta.
- No campo Nome da autorização de DNS, especifique o nome da autorização de DNS.
O tipo de autorização de DNS predefinido é
FIXED_RECORD. Para gerir certificados de forma independente em vários projetos, selecione a caixa de verificação Autorização por projeto. - Clique em Criar autorização de DNS.
No campo Etiquetas, especifique as etiquetas a associar ao certificado. Para adicionar uma etiqueta, clique em Adicionar etiqueta e especifique uma chave e um valor para a etiqueta.
Clique em Criar.
O novo certificado é apresentado na lista de certificados.
CERTIFICATE_NAME: o nome do certificado.DOMAIN_NAME: o nome do domínio de destino. O nome do domínio tem de ser um nome do domínio totalmente qualificado, comomyorg.example.com, ou um domínio de caráter universal, como*.myorg.example.com. O prefixo de ponto com asterisco(*.)significa um certificado de caráter universal.AUTHORIZATION_NAMES: uma lista de nomes das autorizações de DNS que criou para o certificado, separada por vírgulas.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 do domínio tem de ser um nome do domínio totalmente qualificado, comomyorg.example.com, ou um domínio de caráter universal, como*.myorg.example.com. O prefixo de ponto asterisco (*.) significa um certificado de caráter universal.AUTHORIZATION_NAMES: uma lista de nomes das autorizações de DNS delimitada por vírgulas.Na Google Cloud consola, aceda à página Zonas de DNS.
Clique no nome da zona DNS onde quer adicionar o registo.
Na página Detalhes da zona, clique em Adicionar padrão.
Na página Create record set, no campo DNS name, introduza o subdomínio da zona DNS.
Veja os exemplos seguintes:
Se o valor do campo
dnsResourceRecord.namefor_acme-challenge.myorg.example.com.e o texto esbatido no campo Nome de DNS for.example.com., introduza_acme-challenge.myorg.Se o valor do campo
dnsResourceRecord.namefor_acme-challenge.myorg.example.com.e o texto esbatido no campo Nome de DNS for.myorg.example.com., introduza_acme-challenge.Se o valor do campo
dnsResourceRecord.namefor_acme-challenge_ujmmovf2vn55tgye.myorg.example.com.e o texto esbatido no campo Nome de DNS for.myorg.example.com., introduza_acme-challenge_ujmmovf2vn55tgye.
No campo Tipo de registo de recursos, selecione CNAME.
No campo TTL, introduza um valor numérico positivo para o tempo de vida do registo de recursos, que é o tempo durante o qual pode ser armazenado em cache.
Na lista Unidade de TTL, selecione a unidade de tempo, por exemplo,
30 minutes.No campo Nome canónico, introduza o valor completo do campo
dnsResourceRecord.data, conforme apresentado no resultado do comandogcloud certificate-manager dns-authorizations describe.Para introduzir informações adicionais, clique em Adicionar item.
Clique em Criar.
Inicie a transação do registo DNS:
gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
Substitua
DNS_ZONE_NAMEpelo nome da zona DNS de destino.Adicione o registo 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 o seguinte:
CNAME_RECORD: o valor de dados completo do registo CNAME devolvido pelo comando da CLI do Google Cloud que criou a autorização de DNS correspondente.VALIDATION_SUBDOMAIN_NAME: o subdomínio do prefixo da zona DNS, como_acme-challenge. Pode copiar o nome do registo TXT do registo de autorização de DNS a partir do registo de comandosgcloud certificate-manager dns-authorizations describe, conforme descrito em Crie uma autorização de DNS.DOMAIN_NAME: o nome do domínio de destino.O nome do domínio tem de ser um nome do domínio totalmente qualificado, comomyorg.example.com. Também tem de incluir o ponto final após o nome do domínio de destino.DNS_ZONE_NAME: o nome da zona DNS de destino.
Para mais informações acerca da diferença entre as autorizações de DNS
FIXED_RECORDePER_PROJECT_RECORD, consulte os seguintes exemplos. 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"Execute a transação do registo de DNS para guardar as alterações:
gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
Substitua
DNS_ZONE_NAMEpelo nome da zona DNS de destino.Na Google Cloud consola, aceda à página Gestor de certificados.
No separador Certificados, verifique a coluna Estado do certificado.
CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa de certificados.CERTIFICATE_MAP_NAME: o nome do mapeamento de certificados ao qual a entrada de mapeamento de certificados está anexada.CERTIFICATE_NAME: o nome do certificado que quer associar à entrada do mapa de certificados.HOSTNAME: o nome do anfitrião que quer associar à entrada do mapa de certificados.Se quiser criar um certificado que abranja um domínio com caráter universal e um domínio raiz, especifique o nome do anfitrião com uma raiz e um caráter universal, como
example.come*.example.com. Além disso, tem de especificar duas entradas de mapeamento de certificados: uma paraexample.come outra para*.example.com.CERTIFICATE_MAP_ENTRY_NAME: o nome da entrada do mapa de certificados.CERTIFICATE_NAME: o nome do certificado que quer associar à entrada do mapa de certificados.PROXY_NAME: o nome do proxy de destino.CERTIFICATE_MAP_NAME: o nome do mapeamento de certificados que faz referência à entrada do mapeamento de certificados e ao certificado associado.URL_MAP: o nome do mapa de URLsDOMAIN_NAME: o nome do domínio de destinoIP_ADDRESS: o endereço IP do seu balanceador de carga
Funções necessárias
Certifique-se de que tem as seguintes funções para concluir as tarefas neste tutorial:
Para mais informações, consulte o seguinte:
Crie certificados geridos pela Google
Crie o mesmo número de certificados geridos pela Google com autorização DNS (recomendado) ou certificados autogestão que certificados de terceiros. Antes de criar os certificados, crie uma autorização de DNS e adicione o registo CNAME à zona DNS autorizada para o seu domínio.
Esta secção apresenta os passos e os comandos para criar certificados globais geridos pela Google. Para criar certificados geridos pela Google regionais ou entre regiões, consulte o artigo Crie um certificado gerido pela Google.
Crie uma autorização de DNS
Uma autorização de DNS abrange apenas um único nome de domínio. Tem de criar uma autorização de DNS separada para cada nome de domínio que quer usar com o certificado de destino.
Se estiver a criar uma autorização de DNS para um certificado de caráter universal, como *.myorg.example.com, configure a autorização de DNS para o domínio principal, por exemplo, myorg.example.com.
Consola
Pode criar uma autorização de DNS ou anexar uma autorização de DNS existente quando cria um certificado. Para mais informações, consulte o artigo Crie um certificado gerido pela Google que faça referência à autorização de DNS.
gcloud
Pode criar dois tipos de autorizações de DNS: FIXED_RECORD ou PER_PROJECT_RECORD. Para mais
informações, consulte o artigo Autorização de DNS.
Autorização de DNS FIXED_RECORD
Para criar uma FIXED_RECORD autorização de DNS, use o seguinte gcloud certificate-manager dns-authorizations create comando:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
--domain="DOMAIN_NAME" \
--type=[FIXED_RECORD]
Substitua o seguinte:
Depois de criar a autorização de DNS FIXED_RECORD, valide-a com o comando gcloud certificate-manager dns-authorizations describe:
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
O resultado é semelhante ao seguinte. No resultado, encontre a secção dnsResourceRecord. Localize o registo CNAME e adicione os detalhes do registo (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 PER_PROJECT_RECORD autorização de DNS, use o seguinte
gcloud certificate-manager dns-authorizations create comando:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
--domain="DOMAIN_NAME" \
--type=PER_PROJECT_RECORD
Substitua o seguinte:
Depois de criar a autorização de DNS PER_PROJECT_RECORD, valide-a com o comando gcloud certificate-manager dns-authorizations describe:
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
O resultado é semelhante ao seguinte. No resultado, encontre a secção dnsResourceRecord. Localize o registo CNAME e adicione os detalhes do registo (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'
Terraform
Para criar uma autorização de DNS, pode usar um recurso google_certificate_manager_dns_authorization.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
API
Para criar uma autorização de DNS, faça um pedido 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 o seguinte:
Crie um certificado gerido pela Google que faça referência à autorização de DNS
Para criar um certificado global gerido pela Google que faça referência à autorização de DNS que criou nos passos anteriores, faça o seguinte:
Consola
gcloud
Para criar um certificado global gerido pela 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 o seguinte:
Terraform
API
Crie o certificado fazendo um pedido POST ao método certificates.create da seguinte forma:
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 o seguinte:
Adicione o registo CNAME à configuração do DNS
Se estiver a usar uma solução DNS de terceiros para gerir o seu DNS, consulte a respetiva documentação para adicionar o registo CNAME à configuração do DNS. Se estiver a usar o Google Cloud para gerir o seu DNS, conclua os passos nesta secção.
Consola
Para criar um conjunto de registos, siga estes passos:
gcloud
Quando cria uma autorização de DNS, o comando da CLI gcloud devolve o registo CNAME correspondente. Para adicionar o registo CNAME à configuração do DNS na zona de DNS do domínio de destino, siga estes passos:
Terraform
Para adicionar o registo CNAME à configuração do DNS, pode usar um
google_dns_record_set recurso.
Valide o estado do certificado
Antes de implementar um certificado num equilibrador de carga, verifique se está ativo. O estado do certificado pode demorar vários minutos a mudar para ACTIVE.
Consola
gcloud
Para verificar o estado do certificado, execute o seguinte comando:
gcloud certificate-manager certificates describe CERTIFICATE_NAME
Substitua CERTIFICATE_NAME pelo nome do certificado gerido pela Google de destino.
O resultado é semelhante ao seguinte:
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 várias horas, verifique se adicionou corretamente o registo CNAME à configuração de DNS.
Para ver mais passos de resolução de problemas, consulte o artigo Resolva problemas do Gestor de certificados.
Implemente o certificado num balanceador de carga
Para implementar um certificado gerido pela Google global, siga os passos nesta secção e implemente o certificado através de um mapa de certificados.
Para implementar o certificado gerido pela Google num balanceador de carga de aplicações externo regional ou num balanceador de carga de aplicações interno regional, ou num balanceador de carga de aplicações interno entre regiões, anexe-o diretamente ao proxy de destino.
Crie um mapa de certificados
Crie um mapa de certificados que faça referência à entrada do mapa de certificados associada ao seu certificado:
gcloud
Para criar um mapeamento 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 certificados de destino.
Terraform
Para criar um mapa de certificados, pode usar um recurso google_certificate_manager_certificate_map.
Crie uma entrada de mapa de certificado
Crie uma entrada de mapa de certificados e associe-a ao seu certificado e mapa de certificados:
gcloud
Para criar uma entrada de mapeamento 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 o seguinte:
Terraform
Para criar uma entrada de mapeamento de certificados com um domínio raiz, use um recurso google_certificate_manager_certificate_map_entry.
Para criar uma entrada de mapeamento de certificados com um domínio de caráter universal, use um recurso google_certificate_manager_certificate_map_entry.
Verifique se a entrada do mapeamento de certificados está ativa
Verifique se a entrada do mapeamento de certificados está ativa antes de anexar o respetivo mapeamento de certificados ao proxy de destino.
Para validar a entrada do mapeamento 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 o seguinte:
O resultado é semelhante ao 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'
Associe o mapa de certificados ao proxy de destino
Pode anexar o mapa de certificados a um novo proxy de destino ou a um proxy de destino existente.
gcloud
Para anexar o mapeamento 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 o seguinte:
Para anexar o mapa de certificados a um proxy HTTPS de destino existente, use o comando gcloud compute target-https-proxies update. Se não souber o nome do proxy de destino existente, aceda à página Proxies de destino e anote o nome do proxy de destino.
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 seguinte comando para o validar:
gcloud compute target-https-proxies list
Terraform
Para anexar o mapa de certificados ao proxy de destino, pode usar um recurso google_compute_target_https_proxy.
Quando configura um proxy de destino, se anexar certificados TLS (SSL) diretamente e também através de um mapa de certificados, o proxy usa os certificados referenciados pelo mapa de certificados e ignora os certificados TLS (SSL) anexados diretamente.
Teste os certificados implementados
Para cada certificado implementado, teste a conetividade a cada domínio coberto pelo certificado no endereço IP do balanceador de carga através do seguinte comando:
openssl s_client -showcerts -servername DOMAIN_NAME -connect IP_ADDRESS:443
Substitua o seguinte:
Para mais informações sobre como testar a conetividade, consulte o artigo Teste com o OpenSSL
Atualize os registos de DNS
Mude o tráfego do seu serviço de terceiros para o Cloud Load Balancing. Consulte o artigo Atualize os registos A e AAAA do DNS para apontarem para o endereço IP do balanceador de carga.