Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Domain authorization : la voie rapide pour provisionner des certificats managés sur GCP

By Chimbu ChinnaduraiSep 24, 20246 min read

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

Dans le paysage numérique actuel, la sécurité et la confidentialité des communications en ligne sont une priorité absolue. Les certificats SSL jouent un rôle déterminant : ils établissent des connexions sécurisées, protègent les données sensibles et instaurent la confiance entre les utilisateurs et les sites web.

Lors de la mise en place de certificats SSL sur Google Cloud Platform (GCP) pour des load balancers, la vérification de la propriété du domaine est un point clé. Historiquement, l'autorisation via le load balancer s'est imposée comme la méthode privilégiée. Elle consiste à associer un certificat SSL managé par Google à un load balancer, puis à relier le domaine à l'adresse IP du load balancer via un enregistrement A.

La configuration de certificats SSL managés par autorisation via le load balancer peut s'avérer chronophage et source d'erreurs. D'abord, l'utilisateur doit terminer toutes les étapes de configuration avant de pouvoir provisionner le certificat TLS (SSL). Le moindre oubli ou la moindre erreur entraîne des retards. Ensuite, la propagation globale des enregistrements DNS peut prendre jusqu'à 48 heures, ce qui laisse une fenêtre typique de 10 à 15 minutes durant laquelle le domaine du certificat SSL est inaccessible. Cette approche convient donc surtout à la mise en place de nouveaux environnements ne recevant pas encore de trafic en production.

Pour lever ces obstacles et préparer les certificats managés par Google en amont du load balancer ou d'une migration vers Google Cloud depuis un autre fournisseur, Domain authorization propose une alternative. Elle repose sur des enregistrements DNS dédiés supplémentaires pour vérifier la propriété du domaine. Les certificats peuvent ainsi être provisionnés à l'avance, avant même que le proxy cible ne soit prêt à traiter du trafic réseau. Les migrations sans interruption de service depuis des solutions tierces vers Google Cloud deviennent alors possibles, pour une transition nettement plus fluide.

Reportez-vous au tableau ci-dessous pour visualiser les différences entre l'autorisation via le load balancer et Domain authorization.

Cet article vous explique comment configurer Domain authorization et créer de nouveaux certificats dans le certificate manager à l'aide de Domain authorization.

**Prérequis**

  • Une zone DNS publique dans Cloud DNS

Domain authorization fonctionne également avec d'autres fournisseurs DNS.

  • L'API Certificate Manager activée dans le projet GCP.
  • gcloud CLI.

Pour cet article, j'utilise la zone publique chimbuc.dns.doit-playground.com dans Cloud DNS.

**Configurer DNS authorization**

  • Définissez les variables d'environnement nécessaires.
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
  • Créez une DNS authorization pour votre domaine. Chaque DNS authorization ne couvrant qu'un seul nom d'hôte, vous devez en créer une par nom d'hôte à utiliser avec le certificat cible.

Si vous créez une DNS authorization pour un certificat wildcard tel que *.example.com, configurez-la sur le domaine parent (par exemple example.com).

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

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

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

Détails de la DNS authorization pour example.chimbuc.dns.doit-playground.com

  • Ajoutez l'enregistrement CNAME à votre configuration DNS. Si Google Cloud gère votre DNS, suivez les étapes ci-dessous. Sinon, consultez la documentation de votre solution DNS tierce.
#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

Configuration DNS

Créer un certificat managé par Google avec DNS authorization

  • Créez le certificat pour le domaine configuré avec DNS authorization. Les certificats managés par Google ne peuvent être créés que dans l'emplacement global.
gcloud certificate-manager certificates create $CERTIFICATE_NAME \
  --domains="${DOMAIN_NAME}" \
  --dns-authorizations="${DOMAIN_AUTHORIZATION_NAME}" \
  --project $PROJECT_ID

Comptez quelques minutes pour le provisionnement du certificat. Une fois l'opération terminée, le statut passe à actif. S'il reste sur Pending pendant une période prolongée, cliquez sur le nom du certificat pour consulter les motifs d'échec.

  • Vérifiez le statut du certificat.
gcloud certificate-manager certificates describe $CERTIFICATE_NAME --project $PROJECT_ID

Pour déployer le certificat généré sur un load balancer, il faut créer une certificate map qui référence une ou plusieurs certificate map entries associant des certificats spécifiques à des noms d'hôte spécifiques. Pour plus de détails, consultez How Certificate Manager Works.

  • Créez une certificate map.
gcloud certificate-manager maps create $CERTIFICATE_MAP_NAME --project $PROJECT_ID

Certificate Map

  • Créez une certificate map entry pour le domaine.
gcloud certificate-manager maps entries create $CERTIFICATE_MAP_ENTRY_NAME \
  --map="${CERTIFICATE_MAP_NAME}" \
  --certificates="${CERTIFICATE_NAME}" \
  --hostname="${DOMAIN_NAME}" \
  --project $PROJECT_ID

Certificate Map entry

Comptez quelques minutes pour le provisionnement de la certificate map entry, jusqu'à ce que son statut passe à actif.

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

Déployer un exemple d'application

  • Créez un managed instance group et installez 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
  • Créez une règle de pare-feu autorisant le trafic provenant des systèmes de health check de 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

instance d'exemple

Déployer le certificat sur un load balancer

  • Créez les ressources du 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
  • Créez un target HTTPS proxy pour acheminer les requêtes vers l'URL map et associez-y la certificate map.
gcloud compute target-https-proxies create https-lb-proxy \
  --url-map=web-app-url-map-https \
  --certificate-map="${CERTIFICATE_MAP_NAME}" \
  --project $PROJECT_ID

Le certificat est rattaché au target HTTPS proxy

  • Créez une global forwarding rule pour acheminer les requêtes entrantes vers le 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

Configuration du load balancer externe

  • Créez un record set dans Cloud DNS pour le domaine, puis accédez au endpoint.

Enregistrement A pour example.chimbuc.dns.doit-playground.com

**Conclusion**

En définitive, Domain authorization sur Google Cloud Platform (GCP) accélère sensiblement le provisionnement des certificats SSL par rapport à la méthode classique d'autorisation via le load balancer. En suivant les étapes détaillées dans cet article, vous configurez efficacement Domain authorization, créez de nouveaux certificats TLS et renforcez la sécurité de votre environnement GCP. Cette approche réduit les interruptions au minimum et garantit une transition plus fluide.