
Sichere und vertrauliche Online-Kommunikation ist heute unverzichtbar. SSL-Zertifikate sorgen für sichere Verbindungen, schützen sensible Daten und schaffen Vertrauen zwischen Nutzern und Websites.
Beim Einrichten von SSL-Zertifikaten in der Google Cloud Platform (GCP) für Load Balancer ist die Verifizierung der Domain-Inhaberschaft ein zentraler Faktor. Bislang galt die Load-Balancer-basierte Autorisierung als bevorzugte Methode. Dabei wird ein Google-Managed-SSL-Zertifikat auf einem Load Balancer eingebunden und die Domain per A-Record mit dessen IP-Adresse verknüpft.
Das Einrichten von Managed-SSL-Zertifikaten über die Load-Balancer-basierte Autorisierung kann zeitaufwändig und fehleranfällig sein. Erstens müssen sämtliche Konfigurationsschritte abgeschlossen sein, bevor das TLS- (SSL-)Zertifikat ausgestellt wird. Fehler oder vergessene Schritte führen zwangsläufig zu Verzögerungen. Zweitens kann die globale Verteilung von DNS-Records bis zu 48 Stunden dauern. Dadurch entsteht typischerweise ein Zeitfenster von 10–15 Minuten, in dem die Domain des SSL-Zertifikats nicht erreichbar ist. Dieser Ansatz eignet sich daher vor allem für neue Umgebungen ohne produktiven Traffic.
Um diese Hürden zu umgehen und sicherzustellen, dass Google-Managed-Zertifikate schon vor dem Load Balancer oder einer Migration aus einer anderen Cloud zu Google Cloud bereitstehen, bietet Domain Authorization eine Alternative. Dabei werden zusätzliche dedizierte DNS-Records angelegt, um die Domain-Inhaberschaft zu verifizieren. So lassen sich Zertifikate vorab ausstellen – noch bevor der Target Proxy bereit ist, Netzwerk-Traffic zu verarbeiten. Damit werden Zero-Downtime-Migrationen von Drittanbietern zu Google Cloud realistisch und der Übergang verläuft deutlich reibungsloser.
Die Unterschiede zwischen Load-Balancer-Autorisierung und Domain Authorization fasst die folgende Tabelle zusammen.

In diesem Artikel zeigen wir Ihnen, wie Sie Domain Authorization einrichten und damit neue Zertifikate im Certificate Manager erstellen.
Voraussetzungen
- Eine öffentliche DNS-Zone in Cloud DNS
Domain Authorization funktioniert auch mit anderen DNS-Anbietern und der .
- Im GCP-Projekt aktivierte Certificate Manager API.
- gcloud CLI.
Für diesen Artikel verwende ich die Public Zone chimbuc.dns.doit-playground.com in Cloud DNS.

DNS Authorization einrichten
- Die nötigen Umgebungsvariablen setzen.
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- Legen Sie eine DNS Authorization für Ihre Domain an. Da jede DNS Authorization nur einen einzigen Hostnamen abdeckt, brauchen Sie für jeden Hostnamen, den Sie mit dem Zielzertifikat nutzen möchten, eine eigene Authorization.
Erstellen Sie eine DNS Authorization für ein Wildcard-Zertifikat wie *.example.com, konfigurieren Sie sie für die übergeordnete Domain (also example.com).
gcloud certificate-manager dns-authorizations create $DOMAIN_AUTHORIZATION_NAME \ --domain="${DOMAIN_NAME}" \ --project $PROJECT_ID
DNS Authorization für example.chimbuc.dns.doit-playground.com
- Rufen Sie die Details des CNAME-Records ab, den Sie in Ihrer DNS-Konfiguration eintragen müssen.
gcloud certificate-manager dns-authorizations describe $DOMAIN_AUTHORIZATION_NAME \ --project $PROJECT_ID
Details der DNS Authorization für example.chimbuc.dns.doit-playground.com
- Tragen Sie den CNAME-Record in Ihre DNS-Konfiguration ein. Wenn Sie Ihr DNS über Google Cloud verwalten, folgen Sie den Schritten in diesem Abschnitt. Andernfalls werfen Sie einen Blick in die Dokumentation Ihrer Drittanbieter-DNS-Lösung.
#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
DNS-Konfiguration
Google-Managed-Zertifikat mit DNS Authorization erstellen
- Erstellen Sie das Zertifikat für die mit DNS Authorization konfigurierte Domain. Google-Managed-Zertifikate lassen sich ausschließlich an der globalen Location erstellen.
gcloud certificate-manager certificates create $CERTIFICATE_NAME \ --domains="${DOMAIN_NAME}" \ --dns-authorizations="${DOMAIN_AUTHORIZATION_NAME}" \ --project $PROJECT_ID

Rechnen Sie mit ein paar Minuten, bis das Zertifikat ausgestellt ist. Danach wechselt der Status auf "active". Bleibt er länger auf "Pending", klicken Sie auf den Zertifikatsnamen, um die Fehlerursachen einzusehen.
- Den Zertifikatsstatus prüfen.
gcloud certificate-manager certificates describe $CERTIFICATE_NAME --project $PROJECT_ID

Um das erzeugte Zertifikat auf einem Load Balancer auszurollen, brauchen wir eine Certificate Map, die auf einen oder mehrere Certificate Map Entries verweist und damit bestimmte Zertifikate bestimmten Hostnamen zuordnet. Mehr dazu unter How Certificate Manager Works.
- Eine Certificate Map erstellen.
gcloud certificate-manager maps create $CERTIFICATE_MAP_NAME --project $PROJECT_ID
Certificate Map
- Einen Certificate Map Entry für die Domain anlegen.
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
Rechnen Sie mit ein paar Minuten, bis der Certificate Map Entry bereitsteht und der Status auf "active" wechselt.
gcloud certificate-manager maps entries describe $CERTIFICATE_MAP_ENTRY_NAME \ --map="${CERTIFICATE_MAP_NAME}" \ --project $PROJECT_ID
Beispielanwendung bereitstellen
- Eine Managed Instance Group erstellen und Apache installieren.
#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- Eine Firewall-Regel anlegen, die Traffic von den Health-Check-Systemen von Google Cloud zulässt.
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
Beispielinstanz
Zertifikat auf einem Load Balancer ausrollen
- Die Load-Balancer-Ressourcen anlegen.
#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- Einen Target HTTPS Proxy anlegen, der Anfragen an die URL Map weiterleitet, und die Certificate Map an den Target Proxy hängen.
gcloud compute target-https-proxies create https-lb-proxy \ --url-map=web-app-url-map-https \ --certificate-map="${CERTIFICATE_MAP_NAME}" \ --project $PROJECT_ID
Das Zertifikat ist mit dem Target HTTPS Proxy verknüpft
- Eine globale Forwarding Rule erstellen, die eingehende Anfragen an den Proxy weiterleitet.
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
Konfiguration des externen Load Balancers
- Ein Record-Set in Cloud DNS für die Domain anlegen und den Endpoint aufrufen.

A-Record für example.chimbuc.dns.doit-playground.com

Fazit: Mit Domain Authorization in der Google Cloud Platform (GCP) stellen Sie SSL-Zertifikate deutlich schneller bereit als über die klassische Load-Balancer-basierte Autorisierung. Folgen Sie den hier beschriebenen Schritten, richten Sie Domain Authorization effizient ein, erstellen neue TLS-Zertifikate und stärken die Sicherheit Ihrer GCP-Umgebung. Das minimiert Ausfallzeiten und sorgt für einen reibungsloseren Übergang.