Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Domain authorization: o jeito mais rápido de provisionar certificados gerenciados no Google Cloud

By Chimbu ChinnaduraiJul 28, 20236 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

domain authorization provision managed certificates DoiT

No cenário digital de hoje, garantir a segurança e a privacidade da comunicação online é essencial. Os certificados SSL têm papel decisivo para estabelecer conexões seguras, proteger dados sensíveis e gerar confiança entre usuários e sites.

Ao configurar certificados SSL no Google Cloud Platform (GCP) para load balancers, a verificação de propriedade do domínio é um fator-chave. Tradicionalmente, a autorização baseada em load balancer foi o método preferido. Ela consiste em vincular um certificado SSL gerenciado pelo Google a um load balancer e associar o domínio ao IP do load balancer por meio de um registro A.

Configurar certificados SSL gerenciados via autorização baseada em load balancer pode ser demorado e suscetível a erros. Primeiro, é preciso concluir todas as etapas de configuração antes de provisionar o certificado TLS (SSL). Isso pode gerar atrasos caso você cometa algum erro ou esqueça uma etapa. Em segundo lugar, a propagação global dos registros DNS pode levar até 48 horas. Ou seja, costuma haver uma janela de 10 a 15 minutos em que o domínio do certificado SSL fica inacessível. Por isso, essa abordagem é mais indicada para configurar novos ambientes que ainda não recebem tráfego de produção.

Para superar esses desafios e garantir que os certificados gerenciados pelo Google estejam prontos antes do load balancer — ou antes de migrar para o Google Cloud vindo de outro provedor —, a Domain authorization oferece uma alternativa. Com a Domain authorization, você configura registros DNS dedicados adicionais para verificar a propriedade do domínio. Assim, é possível provisionar os certificados com antecedência, mesmo antes que o proxy de destino esteja totalmente preparado para receber tráfego de rede. Como resultado, migrações sem downtime de soluções de terceiros para o Google Cloud se tornam viáveis, com uma transição muito mais tranquila.

Consulte a tabela abaixo para conferir as diferenças entre a autorização por load balancer e a Domain authorization.

domain-authorization-doit

Este artigo mostra como configurar a domain authorization e criar novos certificados no certificate manager usando domain authorization.

Pré-requisitos

  • Uma zona DNS pública no Cloud DNS

A domain authorization também funciona com outros provedores de DNS e a .

  • API do Certificate manager habilitada no projeto GCP.
  • gcloud CLI.

Neste artigo, estou usando a zona pública chimbuc.dns.doit-playground.com no Cloud DNS.

domain-authorization-gcp

Configure a DNS authorization

  • Defina as variáveis de ambiente necessárias.
export PROJECT_ID="your-project-id"
export REGION="your-region" # ex: us-central1
export DOMAIN_NAME="domain-name-for-the-certificate" # ex: example.chimbuc.dns.doit-playground.com
export DOMAIN_AUTHORIZATION_NAME="dns-authorization-resource-name" # ex: dns-authorization-example
export CLOUD_DNS_ZONE_NAME="your-cloud-dns-zone" # ex: chimbuc.dns.doit-playground.com.
export CERTIFICATE_NAME="certificate-manager-cert-name" # ex: example-chimbuc-dns-doit-playground-com
export CERTIFICATE_MAP_NAME="certificate-map-name" # ex: example-dns-authorization-cert-map
export CERTIFICATE_MAP_ENTRY_NAME="certificate-map-entry" # ex: example-dns-authorization-cert-map-entry
  • Crie uma DNS authorization para o seu domínio. Como cada DNS authorization cobre apenas um hostname, você precisa criar uma DNS authorization para cada hostname que pretende usar com o certificado de destino.

Se estiver criando uma DNS authorization para um certificado curinga, como *.example.com , configure a DNS authorization para o domínio pai (por exemplo, example.com ).

gcloud certificate-manager dns-authorizations create $DOMAIN_AUTHORIZATION_NAME \
--domain="${DOMAIN_NAME}" \
--project $PROJECT_ID

provision-certificates

DNS authorization para example.chimbuc.dns.doit-playground.com

gcloud certificate-manager dns-authorizations describe $DOMAIN_AUTHORIZATION_NAME \
--project $PROJECT_ID

provision

Detalhes da DNS authorization para example.chimbuc.dns.doit-playground.com

  • Adicione o registro CNAME à sua configuração de DNS. Se você usa o Google Cloud para gerenciar seu DNS, siga as etapas desta seção. Caso contrário, consulte a documentação da sua solução de DNS de terceiros.
#Initiate the DNS record transaction
gcloud dns record-sets transaction start --zone="${CLOUD_DNS_ZONE_NAME}" \
--project $PROJECT_ID
#Add the CNAME record to the target DNS zone
gcloud dns record-sets transaction add CNAME_RECORD_DATA \
--name="_acme-challenge.${DOMAIN_NAME}." \
--ttl="30" \
--type="CNAME" \
--zone="${CLOUD_DNS_ZONE_NAME}" \
--project $PROJECT_ID
#Execute the DNS record transaction to save your changes
gcloud dns record-sets transaction execute --zone="${CLOUD_DNS_ZONE_NAME}" \
--project $PROJECT_ID

managed-certificates

Configuração de DNS

Crie um certificado gerenciado pelo Google com DNS authorization

  • Crie o certificado para o domínio configurado com DNS authorization. Só é possível criar certificados gerenciados pelo Google na localização global.
gcloud certificate-manager certificates create $CERTIFICATE_NAME \
--domains="${DOMAIN_NAME}" \
--dns-authorizations="${DOMAIN_AUTHORIZATION_NAME}" \
--project $PROJECT_ID

gcp-managed-certificates

managed

Aguarde alguns minutos até que o certificado seja provisionado. Quando concluído, o status muda para active. Se o status ficar como Pending por muito tempo, clique no nome do certificado para ver os motivos da falha.

  • Verifique o status do certificado.
gcloud certificate-manager certificates describe $CERTIFICATE_NAME --project $PROJECT_ID

google-managed-certificate

Para implantar o certificado gerado em um load balancer, é preciso criar um certificate map que faça referência a uma ou mais certificate map entries, que atribuem certificados específicos a hostnames específicos. Veja How Certificate Manager Works para mais detalhes.

  • Crie um certificate map.
gcloud certificate-manager maps create $CERTIFICATE_MAP_NAME --project $PROJECT_ID

gcloud-compute-instance-groups-managed-create

Certificate Map

  • Crie uma certificate map entry para o domínio.
gcloud certificate-manager maps entries create $CERTIFICATE_MAP_ENTRY_NAME \
--map="${CERTIFICATE_MAP_NAME}" \
--certificates="${CERTIFICATE_NAME}" \
--hostname="${DOMAIN_NAME}" \
--project $PROJECT_ID

gcp-load-balancer

Certificate Map entry

Aguarde alguns minutos até que a certificate map entry seja provisionada e o status mude para active.

gcloud certificate-manager maps entries describe $CERTIFICATE_MAP_ENTRY_NAME \
--map="${CERTIFICATE_MAP_NAME}" \
--project $PROJECT_ID

create-https-proxy

Implante uma aplicação de exemplo

  • Crie um managed instance group e instale o Apache.
#Create an instance template.
gcloud compute instance-templates create web-app-instance-template \
--region=$REGION \
--project $PROJECT_ID \
--network=default \
--subnet=default \
--tags=allow-health-check \
--image-family=debian-10 \
--image-project=debian-cloud \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://metadata.google.internal/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
systemctl restart apache2'
#Create the managed instance group based on the template.
gcloud compute instance-groups managed create web-app-instance-group \
--template=web-app-instance-template \
--size=1 \
--zone="${REGION}"-b \
--project $PROJECT_ID
#Add a named port to the instance group
gcloud compute instance-groups set-named-ports web-app-instance-group \
--named-ports http:80 \
--zone "${REGION}"-b \
--project $PROJECT_ID
  • Crie uma regra de firewall para permitir o tráfego dos sistemas de health check do Google Cloud.
gcloud compute firewall-rules create fw-allow-health-check \
--network=default \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--target-tags=allow-health-check \
--rules=tcp:80 \
--project $PROJECT_ID

certificate-map

instância de exemplo

Implante o certificado em um load balancer

  • Crie os recursos do load balancer.
#Reserve an external ip
gcloud compute addresses create external-lb-ipv4 \
--ip-version=IPV4 \
--network-tier=PREMIUM \
--global \
--project $PROJECT_ID
#Create a health check
gcloud compute health-checks create http http-basic-check \
--port 80 \
--project $PROJECT_ID
#Create a backend service
gcloud compute backend-services create web-app-backend-service \
--load-balancing-scheme=EXTERNAL \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global \
--project $PROJECT_ID
#Add the instance group as the backend to the backend service.
gcloud compute backend-services add-backend web-app-backend-service \
--instance-group=web-app-instance-group \
--instance-group-zone="${REGION}"-b \
--global \
--project $PROJECT_ID
#create a URL map to route the incoming requests to the default backend service
gcloud compute url-maps create web-app-url-map-https \
--default-service web-app-backend-service \
--project $PROJECT_ID
  • Crie um target HTTPS proxy para encaminhar as requisições ao URL map e anexe o certificate map ao target proxy.
gcloud compute target-https-proxies create https-lb-proxy \
--url-map=web-app-url-map-https \
--certificate-map="${CERTIFICATE_MAP_NAME}" \
--project $PROJECT_ID

gcp-tls

O certificado fica anexado ao target HTTPS proxy

  • Crie uma global forwarding rule para encaminhar as requisições recebidas ao proxy.
gcloud compute forwarding-rules create web-app-https-fw-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=external-lb-ipv4 \
--global \
--target-https-proxy=https-lb-proxy \
--ports=443 \
--project $PROJECT_ID

gcp-security

Configuração do LB externo

  • Crie um record set no Cloud DNS para o domínio e acesse o endpoint.

setting-up-ssl-certificates-in-google-cloud-platform

Registro A para example.chimbuc.dns.doit-playground.com

setting-up-managed-ssl-certificates-through-load-balancer-based-authorization

Em resumo, usar a domain authorization no Google Cloud Platform (GCP) acelera bastante o provisionamento de certificados SSL em comparação com o método tradicional baseado em load balancer. Seguindo o passo a passo deste artigo, você consegue configurar a domain authorization com eficiência, criar novos certificados TLS e reforçar a segurança do seu ambiente GCP. É uma abordagem que reduz o downtime e garante uma transição mais tranquila.