Globales, von Google verwaltetes Zertifikat mit DNS-Autorisierung bereitstellen


In dieser Anleitung wird der Prozess zur Zertifikatsbereitstellung anhand eines von Google verwalteten Zertifikats erläutert. Dabei wird beispielsweise die DNS-Autorisierung verwendet.

Die folgenden Load-Balancer unterstützen von Google verwaltete Zertifikate mit DNS-Autorisierung:

  • Globaler externer Application Load Balancer
  • Klassischer Application Load Balancer
  • Regionsübergreifender interner Application Load Balancer
  • Globaler externer Proxy-Network Load Balancer

Einen Vergleich der unterstützten Arten der Domainautorisierung finden Sie unter Domainautorisierungen.

Wenn Sie ein vorhandenes Zertifikat zum Zertifikatmanager migrieren möchten, führen Sie stattdessen die Schritte unter Zertifikate zum Zertifikatmanager migrieren aus.

Lernziele

In diesem Anleitung werden die folgenden Aufgaben erläutert:

  • Mit dem Zertifikatmanager können Sie ein von Google verwaltetes Zertifikat erstellen, das von einer öffentlich vertrauenswürdigen Zertifizierungsstelle mit DNS-Autorisierung ausgestellt wurde.
  • Stellen Sie das Zertifikat mithilfe eines Ziel-HTTPS-Proxys für einen unterstützten Load-Balancer bereit.

Weitere Informationen zum Bereitstellen von Zertifikaten finden Sie unter Bereitstellungsübersicht.

Hinweise

  1. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  2. Zum Bereitstellen des Zertifikats ist mindestens Version 465.0.0 der gcloud CLI erforderlich. Führen Sie den folgenden Befehl aus, um die Version der gcloud CLI zu prüfen:

    gcloud --version
    
  3. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu aktualisieren.

    gcloud components update
    
  4. Für die Ausführung der Aufgaben in dieser Anleitung benötigen Sie die folgenden Rollen:

    • Certificate Manager-Inhaber: Erforderlich zum Erstellen und Verwalten von Zertifikatsmanager-Ressourcen.
    • Compute Load Balancer Admin oder Compute Network Admin:Erforderlich zum Erstellen und Verwalten des HTTPS-Zielproxys.
    • DNS-Administrator:Erforderlich, wenn Sie Cloud DNS als DNS-Lösung verwenden möchten.

    Hier finden Sie weitere Informationen:

Von Google verwaltetes Zertifikat mit DNS-Autorisierung erstellen

Führen Sie die Schritte in diesem Abschnitt aus, um eine DNS-Autorisierung und ein von Google verwaltetes Zertifikat zu erstellen, das auf diese DNS-Autorisierung verweist.

DNS-Autorisierung erstellen

Erstellen Sie die DNS-Autorisierung wie in diesem Abschnitt beschrieben. Wenn Sie eine DNS-Autorisierung für ein Platzhalterzertifikat wie *.myorg.example.com erstellen, konfigurieren Sie die DNS-Autorisierung für die übergeordnete Domain, z. B. myorg.example.com.

gcloud

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
   --domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

Führen Sie den folgenden Befehl aus, um die DNS-Autorisierung pro Projekt (Vorschau) zu verwenden:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
   --domain="DOMAIN_NAME" \
   --type="PER_PROJECT_RECORD"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

Ersetzen Sie Folgendes:

  • AUTHORIZATION_NAME: der Name der DNS-Autorisierung.
  • DOMAIN_NAME: der Name der Domain, für die Sie diese DNS-Autorisierung erstellen. Der Domainname muss ein voll qualifizierter Domainname sein, z. B. myorg.example.com.

Der Befehl gibt eine Ausgabe wie die folgende zurück. Verwenden Sie den CNAME-Eintrag aus der Ausgabe, um ihn Ihrer DNS-Konfiguration hinzuzufügen.

createTime: '2022-01-14T13:35:00.258409106Z'
dnsResourceRecord:
data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog.
name: _acme-challenge.myorg.example.com.
type: CNAME
domain: myorg.example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

Terraform

Zum Erstellen einer DNS-Autorisierung können Sie eine google_certificate_manager_dns_authorization-Ressource verwenden.

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "${local.name}-dnsauth-${random_id.tf_prefix.hex}"
  description = "The default dns auth"
  domain      = local.domain
  labels = {
    "terraform" : true
  }
}

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

DNS-Konfiguration den CNAME-Eintrag hinzufügen

Wenn Sie Ihr DNS mit Google Cloud verwalten, führen Sie die Schritte in diesem Abschnitt aus. Lesen Sie andernfalls in der Dokumentation zu Ihrer DNS-Lösung eines Drittanbieters nach.

Bevor Sie die Schritte in diesem Abschnitt ausführen, müssen Sie eine öffentliche DNS-Zone erstellt haben.

Wenn Sie eine DNS-Autorisierung erstellen, gibt der gcloud CLI-Befehl den entsprechenden CNAME-Eintrag zurück. Sie müssen diesen CNAME-Eintrag folgendermaßen Ihrer DNS-Konfiguration in der DNS-Zone der Zieldomain hinzufügen:

gcloud

  1. Starten Sie die Transaktion des DNS-Eintrags:
  gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"

Ersetzen Sie DNS_ZONE_NAME durch den Namen der DNS-Zielzone.

  1. Fügen Sie den CNAME-Eintrag zur Ziel-DNS-Zone hinzu:
  gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"

Ersetzen Sie Folgendes:

  • CNAME_RECORD: der vollständige Datenwert des CNAME-Eintrags, der vom Befehl der Google Cloud CLI zurückgegeben wurde, mit dem die entsprechende DNS-Autorisierung erstellt wurde.
  • DOMAIN_NAME: der Name der Zieldomain Der Domainname muss ein voll qualifizierter Domainname wie myorg.example.com sein. Außerdem müssen Sie nach dem Zieldomainnamen den Punkt einfügen.
  • DNS_ZONE_NAME: der Name der DNS-Zielzone.

Sehen Sie sich folgendes Beispiel an:

  gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \
      --name="_acme-challenge.myorg.example.com." \
      --ttl="30" \
      --type="CNAME" \
      --zone="myorg-example-com"
  
  1. Führen Sie die DNS-Eintragstransaktion aus, um Ihre Änderungen zu speichern:
  gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
  

Ersetzen Sie DNS_ZONE_NAME durch den Namen der DNS-Zielzone.

Terraform

Mit einer google_dns_record_set-Ressource können Sie Ihrer DNS-Konfiguration den CNAME-Eintrag hinzufügen.

resource "google_dns_record_set" "cname" {
  name         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].name
  managed_zone = google_dns_managed_zone.default.name
  type         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].type
  ttl          = 300
  rrdatas      = [google_certificate_manager_dns_authorization.default.dns_resource_record[0].data]
}

Ein von Google verwaltetes Zertifikat erstellen, das auf die DNS-Autorisierung verweist

So erstellen Sie ein von Google verwaltetes Zertifikat, das auf die DNS-Autorisierung verweist, die Sie in den vorherigen Schritten erstellt haben:

gcloud

Für einen globalen externen Application Load Balancer, einen klassischen Application Load Balancer oder einen globalen externen Proxy-Network Load Balancer:

Führen Sie dazu diesen Befehl aus:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
   --domains=DOMAIN_NAME \
   --dns-authorizations=AUTHORIZATION_NAME

Ersetzen Sie Folgendes:

  • CERTIFICATE_NAME: Ein eindeutiger Name des Zertifikats.
  • DOMAIN_NAME: die Zieldomain des Zertifikats. Der Domainname muss ein voll qualifizierter Domainname sein, z. B. myorg.example.com.
  • AUTHORIZATION_NAME: der Name der DNS-Autorisierung, die Sie für dieses Zertifikat erstellt haben.

Verwenden Sie den folgenden Befehl, um ein von Google verwaltetes Zertifikat mit einem Platzhalter-Domainnamen zu erstellen. Ein Zertifikat für den Domainnamen mit Platzhaltern deckt alle Subdomains der ersten Ebene einer bestimmten Domain ab.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
   --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
   --dns-authorizations=AUTHORIZATION_NAME

Ersetzen Sie Folgendes:

  • CERTIFICATE_NAME: Ein eindeutiger Name des Zertifikats.
  • DOMAIN_NAME: die Zieldomain des Zertifikats. Das Präfix mit den Sternchen (*.) kennzeichnet ein Platzhalterzertifikat. Der Domainname muss ein voll qualifizierter Domainname wie myorg.example.com sein.
  • AUTHORIZATION_NAME: der Name der DNS-Autorisierung, die Sie für dieses Zertifikat erstellt haben.

Für einen regionsübergreifenden internen Application Load Balancer:

Führen Sie dazu diesen Befehl aus:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME \
    --dns-authorizations=AUTHORIZATION_NAME \
    --scope=all-regions

Ersetzen Sie Folgendes:

  • CERTIFICATE_NAME: Ein eindeutiger Name des Zertifikats.
  • DOMAIN_NAME: die Zieldomain des Zertifikats. Der Domainname muss ein voll qualifizierter Domainname sein, z. B. myorg.example.com.
  • AUTHORIZATION_NAME: der Name der DNS-Autorisierung, die Sie für dieses Zertifikat erstellt haben.

Verwenden Sie den folgenden Befehl, um ein von Google verwaltetes Zertifikat mit einem Platzhalter-Domainnamen zu erstellen. Ein Zertifikat für den Domainnamen mit Platzhaltern deckt alle Subdomains der ersten Ebene einer bestimmten Domain ab.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
    --dns-authorizations=AUTHORIZATION_NAME \
    --scope=all-regions

Ersetzen Sie Folgendes:

  • CERTIFICATE_NAME: Ein eindeutiger Name des Zertifikats.
  • DOMAIN_NAME: die Zieldomain des Zertifikats. Das Präfix mit den Sternchen (*.) kennzeichnet ein Platzhalterzertifikat. Der Domainname muss ein voll qualifizierter Domainname wie myorg.example.com sein.
  • AUTHORIZATION_NAME: der Name der DNS-Autorisierung, die Sie für dieses Zertifikat erstellt haben.

Terraform

Verwenden Sie eine google_certificate_manager_certificate-Ressource.

resource "google_certificate_manager_certificate" "root_cert" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "The wildcard cert"
  managed {
    domains = [local.domain, "*.${local.domain}"]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id
    ]
  }
  labels = {
    "terraform" : true
  }
}

Prüfen, ob das Zertifikat aktiv ist

Prüfen Sie mit dem folgenden Befehl, ob das Zertifikat selbst aktiv ist, bevor Sie es auf dem Load-Balancer bereitstellen. Es kann mehrere Stunden dauern, bis sich der Zertifikatstatus in ACTIVE ändert.

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Ersetzen Sie CERTIFICATE_NAME durch den Namen des von Google verwalteten Zielzertifikats.

Die Ausgabe des Befehls sieht in etwa so aus:

certificatePem: myPEM
createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  -   domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
  -   projects/my-project/locations/global/dnsAuthorizations/myAuth
  domains:
  -   myorg.example.com
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
scope: myScope
sanDnsnames:
-   myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

Zertifikat für einen Load-Balancer bereitstellen

In diesem Abschnitt werden Sie durch die Schritte zum Bereitstellen des von Google verwalteten Zertifikats für einen Load-Balancer geführt.

Bevor Sie mit den Aufgaben in diesem Abschnitt fortfahren, müssen Sie die im Abschnitt Von Google verwaltetes Zertifikat mit DNS-Autorisierung erstellen aufgeführten Aufgaben ausgeführt haben.

Je nach Load-Balancer-Typ können Sie Zertifikate so bereitstellen:

Zertifikat mithilfe einer Zertifikatszuordnung bereitstellen

In diesem Abschnitt werden die Schritte zum Bereitstellen eines Zertifikats mithilfe einer Zertifikatszuordnung beschrieben.

Zertifikatzuordnung erstellen

Erstellen Sie eine Zertifikatzuordnung, die auf den Zertifikatzuordnungseintrag verweist, der mit Ihrem Zertifikat verknüpft ist:

gcloud

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

Ersetzen Sie CERTIFICATE_MAP_NAME durch den Namen der Zielzertifikatzuordnung.

Terraform

Zum Erstellen einer Zertifikatszuordnung können Sie eine google_certificate_manager_certificate_map-Ressource verwenden.

resource "google_certificate_manager_certificate_map" "certificate_map" {
  name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

Eintrag für Zertifikatszuordnung erstellen

Erstellen Sie einen Eintrag für die Zertifikatszuordnung und verknüpfen Sie ihn mit Ihrem Zertifikat sowie Ihrer Zertifikatszuordnung:

gcloud

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
   --map="CERTIFICATE_MAP_NAME" \
   --certificates="CERTIFICATE_NAME" \
   --hostname="HOSTNAME"

Ersetzen Sie Folgendes:

  • CERTIFICATE_MAP_ENTRY_NAME: ein eindeutiger Name des Zertifikatszuordnungseintrags
  • CERTIFICATE_MAP_NAME: der Name der Zertifikatszuordnung, an die dieser Zertifikatszuordnungseintrag angehängt wird
  • CERTIFICATE_NAME: der Name des Zertifikats, das mit diesem Zertifikatzuordnungseintrag verknüpft werden soll
  • HOSTNAME: der Hostname, den Sie mit diesem Zertifikatzuordnungseintrag verknüpfen möchten

Terraform

Zum Erstellen eines Zertifikatszuordnungseintrags können Sie eine google_certificate_manager_certificate_map_entry-Ressource verwenden.

resource "google_certificate_manager_certificate_map_entry" "first_entry" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = local.domain
}

Prüfen, ob der Eintrag für die Zertifikatszuordnung aktiv ist

Prüfen Sie mit dem folgenden Befehl, ob der Eintrag der Zertifikatszuordnung aktiv ist, bevor Sie die entsprechende Zertifikatszuordnung an den Zielproxy anhängen:

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

Ersetzen Sie Folgendes:

  • CERTIFICATE_MAP_ENTRY_NAME: der Name des Eintrags für die Zielzertifikatzuordnung
  • CERTIFICATE_MAP_NAME: der Name der Zertifikatszuordnung, an die dieser Zertifikatszuordnungseintrag angehängt wird

Die Ausgabe des Befehls sieht in etwa so aus:

createTime: '2021-09-06T10:01:56.229472109Z'
name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
state: ACTIVE
updateTime: '2021-09-06T10:01:58.277031787Z'

Zertifikatszuordnung an den Zielproxy anhängen

Hängen Sie die konfigurierte Zertifikatszuordnung an den Zielproxy an:

gcloud

  1. Rufen Sie in der Google Cloud Console die Seite Zielproxys auf.

    Zu „Zielproxys“

  2. Notieren Sie sich den Namen des Zielproxys.

  3. Hängen Sie die Zertifikatszuordnung an den Zielproxy an:

  gcloud compute target-https-proxies update PROXY_NAME \
      --certificate-map="CERTIFICATE_MAP_NAME" \
      --global
  

Ersetzen Sie Folgendes:

  • PROXY_NAME: der Name des Zielproxys.
  • CERTIFICATE_MAP_NAME: der Name der Zertifikatszuordnung, die auf Ihren Zertifikatszuordnungseintrag und das zugehörige Zertifikat verweist.

Terraform

Zum Anhängen der Zertifikatszuordnung an den Zielproxy können Sie eine google_compute_target_https_proxy-Ressource verwenden.

Wenn bereits TLS (SSL)-Zertifikate direkt an den Proxy angehängt sind, bevorzugt der Proxy die Zertifikate, auf die in der Zertifikatszuordnung verwiesen wird, gegenüber den direkt angehängten TLS (SSL)-Zertifikaten.

Hängen Sie das Zertifikat direkt an den Zielproxy an

Führen Sie den folgenden Befehl aus, um das Zertifikat direkt an den Proxy anzuhängen:

gcloud compute target-https-proxies update PROXY_NAME \
    --url-map=URL_MAP \
    --global \
    --certificate-manager-certificates=CERTIFICATE_NAME

Ersetzen Sie Folgendes:

  • PROXY_NAME: Ein eindeutiger Name des Proxys.
  • URL_MAP ist der Name der URL-Zuordnung. Sie haben die URL-Zuordnung beim Erstellen des Load-Balancers erstellt.
  • CERTIFICATE_NAME: der Name des Zertifikats.

Bereinigen

Mit den folgenden Schritten können Sie die in dieser Anleitung vorgenommenen Änderungen rückgängig machen:

  1. Trennen Sie die Zertifikatszuordnung vom Proxy.

    Beachten Sie Folgendes, bevor Sie die Zertifikatszuordnung trennen:

    • Wenn TLS (SSL)-Zertifikate direkt an den Proxy angehängt wurden, führt das Trennen der Zertifikatszuordnung dazu, dass der Proxy wieder die direkt angehängten TLS (SSL)-Zertifikate verwendet.
    • Wenn keine TLS (SSL)-Zertifikate direkt an den Proxy angehängt wurden, kann die Zertifikatszuordnung nicht vom Proxy getrennt werden. Sie müssen zuerst mindestens ein TLS-Zertifikat (SSL) direkt an den Proxy anhängen, bevor Sie die Zertifikatszuordnung trennen können.

    Führen Sie den folgenden Befehl aus, um die Zertifikatszuordnung zu trennen:

    gcloud compute target-https-proxies update PROXY_NAME \
       --clear-certificate-map
    

    Ersetzen Sie PROXY_NAME durch den Namen des Zielproxys.

  2. Löschen Sie den Zertifikatszuordnungseintrag aus der Zertifikatszuordnung:

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
       --map="CERTIFICATE_MAP_NAME"
    

    Ersetzen Sie Folgendes:

    • CERTIFICATE_MAP_ENTRY_NAME: der Name des Zielzertifikatzuordnungseintrags.
    • CERTIFICATE_MAP_NAME: der Name der Zielzertifikatzuordnung.
  3. Löschen Sie die Zertifikatszuordnung:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    Ersetzen Sie CERTIFICATE_MAP_NAME durch den Namen der Zielzertifikatzuordnung.

  4. Löschen Sie das von Google verwaltete Zertifikat:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    Ersetzen Sie CERTIFICATE_NAME durch den Namen des Zielzertifikats.

  5. Löschen Sie die DNS-Autorisierung:

    gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
    

    Ersetzen Sie AUTHORIZATION_NAME durch den Namen der Ziel-DNS-Autorisierung.

Nächste Schritte