Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Managed Certificates in Google Cloud schneller bereitstellen – mit Domain Authorization

By Chimbu ChinnaduraiJul 28, 20236 min read

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

domain authorization provision managed certificates DoiT

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.

domain-authorization-doit

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.

domain-authorization-gcp

DNS Authorization einrichten

  • Die nötigen Umgebungsvariablen setzen.
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 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

provision-certificates

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

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

provision

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

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

gcp-managed-certificates

managed

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

google-managed-certificate

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

gcloud-compute-instance-groups-managed-create

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

gcp-load-balancer

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

create-https-proxy

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

certificate-map

Beispielinstanz

Zertifikat auf einem Load Balancer ausrollen

  • Die Load-Balancer-Ressourcen anlegen.
#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
  • 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

gcp-tls

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

gcp-security

Konfiguration des externen Load Balancers

  • Ein Record-Set in Cloud DNS für die Domain anlegen und den Endpoint aufrufen.

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

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

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

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.