
Aujourd'hui, garantir la sécurité et la confidentialité des communications en ligne est une priorité absolue. Les certificats SSL sont essentiels pour établir des connexions sécurisées, protéger les données sensibles et instaurer la confiance entre les utilisateurs et les sites web.
Lors de la configuration de certificats SSL pour des load balancers sur Google Cloud Platform (GCP), la vérification de la propriété du domaine joue un rôle clé. Historiquement, l'autorisation via load balancer s'est imposée comme la méthode de référence. Elle consiste à associer un certificat SSL géré par Google à un load balancer, puis à relier le domaine à l'adresse IP du load balancer via un enregistrement A.
Mettre en place des certificats SSL managés via l'autorisation par load balancer peut s'avérer long et source d'erreurs. D'abord, toutes les étapes de configuration doivent être finalisées avant de provisionner le certificat TLS (SSL), ce qui peut entraîner des retards en cas d'erreur ou d'oubli. Ensuite, la propagation mondiale des enregistrements DNS peut prendre jusqu'à 48 heures. Il existe donc une fenêtre habituelle de 10 à 15 minutes pendant laquelle le domaine du certificat SSL reste inaccessible. Cette approche convient surtout à la mise en place de nouveaux environnements, sans trafic de production.
Pour lever ces difficultés et s'assurer que les certificats gérés par Google soient prêts avant la mise en service du load balancer ou la migration vers Google Cloud depuis un autre fournisseur, l'autorisation de domaine propose une alternative. Avec l'autorisation de domaine, des enregistrements DNS dédiés supplémentaires permettent de 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 le trafic réseau. Les migrations sans interruption depuis des solutions tierces vers Google Cloud deviennent ainsi possibles, pour une transition bien plus fluide.
Consultez le tableau ci-dessous pour comparer l'autorisation par load balancer et l'autorisation de domaine.

Cet article vous guide pas à pas pour mettre en place l'autorisation de domaine et créer de nouveaux certificats dans le certificate manager via cette méthode.
Prérequis
- Une zone DNS publique dans Cloud DNS
L'autorisation de domaine fonctionne également avec d'autres fournisseurs DNS et le .
- L'API Certificate manager activée dans le projet GCP.
- La CLI gcloud.
Pour cet article, j'utilise la zone publique chimbuc.dns.doit-playground.com dans Cloud DNS.

Configurer l'autorisation DNS
- Définissez les variables d'environnement nécessaires.
export PROJECT_ID="your-project-id"export REGION="your-region" # ex: us-central1export DOMAIN_NAME="domain-name-for-the-certificate" # ex: example.chimbuc.dns.doit-playground.comexport DOMAIN_AUTHORIZATION_NAME="dns-authorization-resource-name" # ex: dns-authorization-exampleexport 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-comexport CERTIFICATE_MAP_NAME="certificate-map-name" # ex: example-dns-authorization-cert-mapexport CERTIFICATE_MAP_ENTRY_NAME="certificate-map-entry" # ex: example-dns-authorization-cert-map-entry- Créez une autorisation DNS pour votre domaine. Chaque autorisation DNS ne couvrant qu'un seul nom d'hôte, vous devez en créer une pour chaque nom d'hôte à utiliser avec le certificat cible.
Si vous créez une autorisation DNS 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
Autorisation DNS pour example.chimbuc.dns.doit-playground.com
- Récupérez les détails de l'enregistrement CNAME à ajouter à votre configuration DNS.
gcloud certificate-manager dns-authorizations describe $DOMAIN_AUTHORIZATION_NAME \ --project $PROJECT_ID
Détails de l'autorisation DNS pour example.chimbuc.dns.doit-playground.com
- Ajoutez l'enregistrement CNAME à votre configuration DNS. Si vous gérez votre DNS avec Google Cloud, suivez les étapes de cette section. Sinon, consultez la documentation de votre solution DNS tierce.
#Initiate the DNS record transactiongcloud dns record-sets transaction start --zone="${CLOUD_DNS_ZONE_NAME}" \ --project $PROJECT_ID
#Add the CNAME record to the target DNS zonegcloud 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 changesgcloud dns record-sets transaction execute --zone="${CLOUD_DNS_ZONE_NAME}" \ --project $PROJECT_ID
Configuration DNS
Créer un certificat géré par Google avec l'autorisation DNS
- Créez le certificat pour le domaine configuré avec l'autorisation DNS. Les certificats géré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, son statut passe à actif. Si le statut reste 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 entrées de certificate map, lesquelles associent des certificats à des noms d'hôtes spécifiques. Voir How Certificate Manager Works pour plus de détails.
- Créez une certificate map.
gcloud certificate-manager maps create $CERTIFICATE_MAP_NAME --project $PROJECT_ID
Certificate Map
- Créez une entrée de certificate map 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
Entrée de Certificate Map
Comptez quelques minutes pour le provisionnement de l'entrée de certificate map, jusqu'au passage du statut à 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 pour autoriser 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 ipgcloud compute addresses create external-lb-ipv4 \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global \ --project $PROJECT_ID
#Create a health checkgcloud compute health-checks create http http-basic-check \ --port 80 \ --project $PROJECT_ID
#Create a backend servicegcloud 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 servicegcloud compute url-maps create web-app-url-map-https \ --default-service web-app-backend-service \ --project $PROJECT_ID- Créez un proxy HTTPS cible pour acheminer les requêtes vers la URL map, et associez la certificate map au proxy cible.
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 associé au proxy HTTPS cible
- Créez une règle de transfert globale 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 LB externe
- Créez un record set dans Cloud DNS pour le domaine, puis accédez à l'endpoint.

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

En résumé, l'autorisation de domaine sur Google Cloud Platform (GCP) accélère nettement le provisionnement des certificats SSL par rapport à la méthode traditionnelle d'autorisation par load balancer. En suivant les étapes détaillées dans cet article, vous pourrez configurer efficacement l'autorisation de domaine, créer de nouveaux certificats TLS et renforcer la sécurité de votre environnement GCP. Cette approche réduit les interruptions de service et garantit une transition plus fluide.