Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Domain authorization: il modo più rapido per emettere certificati gestiti su Google Cloud

By Chimbu ChinnaduraiJul 28, 20236 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

domain authorization provision managed certificates DoiT

Nel contesto digitale di oggi, sicurezza e privacy delle comunicazioni online sono priorità assolute. I certificati SSL hanno un ruolo cruciale: instaurano connessioni sicure, proteggono i dati sensibili e rafforzano la fiducia tra utenti e siti web.

Quando si configurano i certificati SSL su Google Cloud Platform (GCP) per i load balancer, la verifica della proprietà del dominio è un passaggio decisivo. Il metodo tradizionalmente più diffuso è l'autorizzazione basata sul load balancer: prevede l'installazione di un certificato SSL gestito da Google sul load balancer e l'associazione del dominio all'IP del load balancer tramite un record A.

Configurare i certificati SSL gestiti tramite l'autorizzazione basata sul load balancer può però richiedere tempo ed esporre a errori. Innanzitutto, è necessario completare tutti i passaggi di configurazione prima di poter emettere il certificato TLS (SSL): un errore o una dimenticanza si traducono in ritardi. In secondo luogo, la propagazione globale dei record DNS può richiedere fino a 48 ore, con una finestra tipica di 10–15 minuti in cui il dominio del certificato SSL risulta irraggiungibile. Per questo motivo, l'approccio è indicato soprattutto per la configurazione di nuovi ambienti privi di traffico di produzione.

Per superare questi limiti e avere i certificati gestiti da Google pronti prima di attivare il load balancer o di migrare a Google Cloud da un altro vendor, la Domain authorization rappresenta una valida alternativa. Si basa sulla configurazione di record DNS dedicati aggiuntivi per verificare la proprietà del dominio: in questo modo è possibile emettere i certificati in anticipo, anche prima che il proxy di destinazione sia pronto a gestire il traffico di rete. Il risultato sono migrazioni a zero downtime da soluzioni di terze parti a Google Cloud, con una transizione decisamente più fluida.

Nella tabella seguente sono riportate le differenze tra Load balancer authorization e Domain authorization.

domain-authorization-doit

In questo articolo vediamo come configurare la domain authorization e creare nuovi certificati nel certificate manager sfruttando la domain authorization.

Prerequisiti

  • Una zona DNS pubblica in Cloud DNS

La domain authorization è compatibile anche con altri provider DNS e con .

  • API del certificate manager abilitata nel progetto GCP.
  • gcloud CLI.

Per questo articolo utilizzo la zona pubblica chimbuc.dns.doit-playground.com in Cloud DNS.

domain-authorization-gcp

Configurare la DNS authorization

  • Impostare le variabili di ambiente necessarie.
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
  • Creare una DNS authorization per il proprio dominio. Poiché ogni DNS authorization copre un solo hostname, occorre crearne una per ciascun hostname che si intende usare con il certificato di destinazione.

Se la DNS authorization è destinata a un certificato wildcard, ad esempio *.example.com , configurarla sul dominio principale (in questo caso example.com ).

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

provision-certificates

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

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

provision

Dettagli della DNS authorization per example.chimbuc.dns.doit-playground.com

  • Aggiungere il record CNAME alla configurazione DNS. Se per la gestione del DNS si utilizza Google Cloud, seguire i passaggi indicati di seguito; in caso contrario, fare riferimento alla documentazione della soluzione DNS di terze parti.
#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

Configurazione DNS

Creare un certificato gestito da Google con DNS authorization

  • Creare il certificato per il dominio configurato con la DNS authorization. I certificati gestiti da Google si possono creare solo nella location globale.
gcloud certificate-manager certificates create $CERTIFICATE_NAME \
--domains="${DOMAIN_NAME}" \
--dns-authorizations="${DOMAIN_AUTHORIZATION_NAME}" \
--project $PROJECT_ID

gcp-managed-certificates

managed

L'emissione del certificato richiede qualche minuto. Al termine, lo stato passa ad active. Se rimane in stato Pending a lungo, fare clic sul nome del certificato per consultare le cause dell'errore.

  • Verificare lo stato del certificato.
gcloud certificate-manager certificates describe $CERTIFICATE_NAME --project $PROJECT_ID

google-managed-certificate

Per distribuire il certificato su un load balancer occorre creare una certificate map che faccia riferimento a una o più certificate map entry, le quali associano certificati specifici a hostname specifici. Per maggiori dettagli si rimanda a How Certificate Manager Works.

  • Creare una certificate map.
gcloud certificate-manager maps create $CERTIFICATE_MAP_NAME --project $PROJECT_ID

gcloud-compute-instance-groups-managed-create

Certificate Map

  • Creare una certificate map entry per il dominio.
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

Attendere qualche minuto perché la certificate map entry venga creata e lo stato passi ad active.

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

create-https-proxy

Distribuire un'applicazione di esempio

  • Creare un managed instance group e installare 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
  • Creare una regola firewall per consentire il traffico dai sistemi di health check di 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

istanza di esempio

Distribuire il certificato su un load balancer

  • Creare le risorse del 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
  • Creare un target HTTPS proxy per instradare le richieste verso la URL map e collegare la certificate map al 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

Il certificato è collegato al target HTTPS proxy

  • Creare una global forwarding rule per instradare le richieste in entrata al 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

Configurazione del LB esterno

  • Creare un record set in Cloud DNS per il dominio e accedere all'endpoint.

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

Record A per example.chimbuc.dns.doit-playground.com

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

In sintesi, ricorrere alla domain authorization su Google Cloud Platform (GCP) accelera in modo significativo l'emissione dei certificati SSL rispetto al metodo tradizionale basato sul load balancer. Seguendo i passaggi descritti in questo articolo, potrà configurare la domain authorization in modo efficiente, creare nuovi certificati TLS e rafforzare la sicurezza del proprio ambiente GCP, riducendo al minimo il downtime e ottenendo una transizione più fluida.