Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Domain Authorization: Managed Certificates in GCP schneller bereitstellen

By Chimbu ChinnaduraiSep 24, 20246 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

Sicherheit und Datenschutz in der Online-Kommunikation sind heute wichtiger denn je. SSL-Zertifikate spielen dabei eine entscheidende Rolle: Sie bauen sichere Verbindungen auf, 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 der Nachweis des Domain-Eigentums ein zentraler Schritt. Üblicherweise kommt dafür die Load-Balancer-basierte Autorisierung zum Einsatz: Ein Google-Managed-SSL-Zertifikat wird auf einem Load Balancer eingebunden und die Domain per A-Record mit dessen IP-Adresse verknüpft.

Dieser Weg ist allerdings zeitaufwendig und fehleranfällig. Erstens müssen alle Konfigurationsschritte abgeschlossen sein, bevor das TLS- (SSL-)Zertifikat bereitgestellt werden kann – Fehler oder vergessene Schritte führen schnell zu Verzögerungen. Zweitens kann die globale Verteilung von DNS-Einträgen bis zu 48 Stunden dauern. Dadurch entsteht in der Regel 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.

Damit Google-Managed-Zertifikate bereits vor dem Load Balancer oder vor einer Migration zu Google Cloud bereitstehen, bietet Domain Authorization eine Alternative. Dabei werden zusätzliche dedizierte DNS-Einträge angelegt, um das Domain-Eigentum nachzuweisen. So lassen sich Zertifikate vorab bereitstellen – noch bevor der Target Proxy den Netzwerkverkehr verarbeiten kann. Damit werden Zero-Downtime-Migrationen von Drittanbieter-Lösungen zu Google Cloud möglich, und der Wechsel verläuft deutlich reibungsloser.

Die Unterschiede zwischen Load Balancer Authorization und Domain Authorization zeigt die folgende Tabelle.

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-Providern.

  • Aktivierte Certificate Manager API im GCP-Projekt.
  • gcloud CLI.

Für diesen Artikel verwende ich die öffentliche Zone chimbuc.dns.doit-playground.com in Cloud DNS.

**DNS Authorization einrichten**

  • Setzen Sie die erforderlichen Umgebungsvariablen.
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
  • Legen Sie eine DNS Authorization für Ihre Domain an. Da jede DNS Authorization nur einen einzigen Hostnamen abdeckt, brauchen Sie pro Hostname, den Sie mit dem Zielzertifikat nutzen möchten, eine eigene DNS Authorization.

Für ein Wildcard-Zertifikat wie *.example.com konfigurieren Sie die DNS Authorization für die übergeordnete Domain (z. B. 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

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

DNS-Authorization-Details für example.chimbuc.dns.doit-playground.com

  • Tragen Sie den CNAME-Eintrag in Ihre DNS-Konfiguration ein. Wenn Sie Ihr DNS über Google Cloud verwalten, folgen Sie den Schritten in diesem Abschnitt. Andernfalls schauen Sie in der Dokumentation Ihrer Drittanbieter-DNS-Lösung nach.
#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

DNS-Konfiguration

Google-Managed-Zertifikat mit DNS Authorization erstellen

  • Erstellen Sie das Zertifikat für die Domain, die per DNS Authorization konfiguriert ist. Google-Managed-Zertifikate lassen sich ausschließlich am Standort global anlegen.
gcloud certificate-manager certificates create $CERTIFICATE_NAME \
  --domains="${DOMAIN_NAME}" \
  --dns-authorizations="${DOMAIN_AUTHORIZATION_NAME}" \
  --project $PROJECT_ID

Die Bereitstellung des Zertifikats dauert einige Minuten. Sobald sie abgeschlossen ist, wechselt der Status auf "Active". Bleibt der Status länger auf "Pending", klicken Sie auf den Zertifikatsnamen, um die Fehlerursachen einzusehen.

  • Prüfen Sie den Status des Zertifikats.
gcloud certificate-manager certificates describe $CERTIFICATE_NAME --project $PROJECT_ID

Um das erstellte Zertifikat auf einem Load Balancer auszurollen, legen wir eine Certificate Map an, die auf eine oder mehrere Certificate-Map-Einträge verweist und Hostnamen gezielt bestimmten Zertifikaten zuordnet. Mehr Hintergründe finden Sie unter How Certificate Manager Works.

  • Legen Sie eine Certificate Map an.
gcloud certificate-manager maps create $CERTIFICATE_MAP_NAME --project $PROJECT_ID

Certificate Map

  • Legen Sie einen Certificate-Map-Eintrag für die Domain an.
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-Eintrag

Die Bereitstellung des Certificate-Map-Eintrags dauert einige Minuten, bis der Status auf "Active" wechselt.

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

Beispielanwendung bereitstellen

  • Legen Sie eine Managed Instance Group an und installieren Sie 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
  • Legen Sie eine Firewall-Regel an, 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 bereitstellen

  • Legen Sie die Load-Balancer-Ressourcen an.
#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
  • Legen Sie einen Target-HTTPS-Proxy an, der Anfragen an die URL Map weiterleitet, und hängen Sie die Certificate Map an den Target Proxy an.
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 an den Target-HTTPS-Proxy angehängt

  • Legen Sie eine globale Forwarding Rule an, 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 External LB

  • Legen Sie in Cloud DNS ein Record-Set für die Domain an und rufen Sie den Endpunkt auf.

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

**Fazit**

Domain Authorization in der Google Cloud Platform (GCP) beschleunigt die Bereitstellung von SSL-Zertifikaten deutlich gegenüber der klassischen Load-Balancer-basierten Autorisierung. Mit den hier beschriebenen Schritten richten Sie Domain Authorization effizient ein, erstellen neue TLS-Zertifikate und erhöhen die Sicherheit Ihrer GCP-Umgebung. Das Ergebnis: minimale Ausfallzeiten und ein deutlich reibungsloserer Übergang.