SSL/TLS-Zertifikate konfigurieren

Auf dieser Seite wird beschrieben, wie Sie die SSL/TLS-Verschlüsselung für eine Instanz erzwingen, damit alle Verbindungen verschlüsselt sind. Sie können auch mehr dazu erfahren, wie Cloud SQL selbstverwaltete SSL/TLS-Zertifikate verwendet, um eine sichere Verbindung zu Cloud SQL-Instanzen herzustellen

Übersicht

Cloud SQL generiert automatisch ein Serverzertifikat, wenn Sie eine Instanz erstellen. Wir empfehlen, alle Verbindungen zur Verwendung von SSL/TLS zu zwingen.

SQL Server führt eine Zertifikatüberprüfung nur durch, wenn in der Clientanfrage explizit angegeben ist, dass eine verschlüsselte Verbindung erforderlich ist. In diesem Fall muss das Serverzertifikat auf dem Clientcomputer installiert sein. Andernfalls können die Clients ohne zusätzliche Änderungen an ihren Verbindungszeichenfolgen oder Zertifikaten eine Verbindung herstellen, auch wenn Sie die Instanz mit sslMode auf ENCRYPTED_ONLY konfigurieren.

Weitere Informationen finden Sie im Abschnitt Verschlüsselte Verbindungen zur Datenbankmodul aktivieren in der SQL Server-Dokumentation.

Wenn Sie für eine Instanz SSL erzwingen, muss die Instanz neu gestartet werden. Möglicherweise ist auch ein Neustart erforderlich, nachdem Sie die SSL/TLS-Zertifikate geändert haben. Falls ein Neustart erforderlich ist, startet Cloud SQL die Instanz automatisch neu. Der Neustart einer Instanz kann zu Ausfallzeiten führen.

SSL/TLS-Verschlüsselung erzwingen

Sie können die Einstellung SSL-Modus verwenden, um die SSL-Verschlüsselung zu erzwingen:

  • Lassen Sie sowohl Nicht-SSL-/Nicht-TLS- als auch SSL-/TLS-Verbindungen zu. Das ist die Standardeinstellung.

  • Erlaubt nur Verbindungen, die mit SSL/TLS verschlüsselt wurden.

Wenn Sie für Ihre Cloud SQL-Instanz Nicht-SSL/Nicht-TLS- und SSL/TLS-Verbindungen zulassen auswählen, werden SSL-/TLS-Verbindungen sowie unverschlüsselte und unsichere Verbindungen akzeptiert. Wenn Sie nicht für alle Verbindungen SSL/TLS benötigen, sind unverschlüsselte Verbindungen weiterhin zulässig. Es wird daher dringend empfohlen, SSL für alle Verbindungen zu erzwingen, wenn über öffentliche IP-Adressen auf Ihre Instanz zugegriffen wird.

Sie können SSL/TLS-Zertifikate verwenden, um eine direkte Verbindung zu Instanzen herzustellen, oder Sie können über den Cloud SQL Auth Proxy oder Cloud SQL-Connectors eine Verbindung herstellen. Wenn Sie eine Verbindung über Cloud SQL Auth Proxy oder Cloud SQL Connectors herstellen, werden die Verbindungen automatisch mit SSL/TLS verschlüsselt. Mit Cloud SQL Auth Proxy und Cloud SQL Connectors werden Client- und Server-Identitäten auch unabhängig von der Einstellung des SSL-Modus automatisch überprüft.

Das Erzwingen von SSL stellt sicher, dass alle Verbindungen verschlüsselt sind.

So aktivieren Sie die Erfordernis von SSL/TLS:

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Klicken Sie auf den Instanznamen, um die Seite Übersicht einer Instanz zu öffnen.
  3. Klicken Sie im SQL-Navigationsmenü auf Verbindungen.
  4. Wählen Sie den Tab Sicherheit aus.
  5. Folgende Optionen sind verfügbar:
    • Unverschlüsselten Netzwerktraffic zulassen (nicht empfohlen)
    • Nur SSL-Verbindungen zulassen. Diese Option lässt nur Verbindungen mit SSL/TLS-Verschlüsselung zu.

gcloud

   gcloud sql instances patch INSTANCE_NAME \
   --ssl-mode=SSL_ENFORCEMENT_MODE
  

Ersetzen Sie SSL_ENFORCEMENT_MODE durch eine der folgenden Optionen:

  • ALLOW_UNENCRYPTED_AND_ENCRYPTED: Lässt Nicht-SSL-/Nicht-TLS- und SSL/TLS-Verbindungen zu. Dies ist der Standardwert.
  • ENCRYPTED_ONLY: Erlaubt nur Verbindungen, die mit SSL/TLS verschlüsselt wurden.

Terraform

Verwenden Sie zum Erzwingen der SSL/TLS-Verschlüsselung eine Terraform-Ressource:

resource "google_sql_database_instance" "sqlserver_instance" {
  name             = "sqlserver-instance"
  region           = "asia-northeast1"
  database_version = "SQLSERVER_2019_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      ssl_mode = "ENCRYPTED_ONLY"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Änderungen anwenden

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

Änderungen löschen

So löschen Sie das Projekt:

  1. Um den Löschschutz zu deaktivieren, setzen Sie in der Terraform-Konfigurationsdatei das Argument deletion_protection auf false.
    deletion_protection =  "false"
  2. Wenden Sie die aktualisierte Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply
  1. Entfernen Sie Ressourcen, die zuvor mit Ihrer Terraform-Konfiguration angewendet wurden, indem Sie den folgenden Befehl ausführen und yes an der Eingabeaufforderung eingeben:

    terraform destroy

REST Version 1

  1. Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: die Projekt-ID
    • SSL_ENFORCEMENT_MODE: Verwenden Sie eine der folgenden Optionen:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: Lässt Nicht-SSL-/Nicht-TLS- und SSL/TLS-Verbindungen zu.
      • ENCRYPTED_ONLY: Erlaubt nur Verbindungen, die mit SSL/TLS verschlüsselt wurden.
    • INSTANCE_ID: die Instanz-ID

    HTTP-Methode und URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

    JSON-Text anfordern:

    
    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten in etwa folgende JSON-Antwort erhalten:

REST v1beta4

  1. Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: die Projekt-ID
    • SSL_ENFORCEMENT_MODE: Verwenden Sie eine der folgenden Optionen:
      • ALLOW_UNENCRYPTED_AND_ENCRYPTED: Lässt Nicht-SSL-/Nicht-TLS- und SSL/TLS-Verbindungen zu.
      • ENCRYPTED_ONLY: Erlaubt nur Verbindungen, die mit SSL/TLS verschlüsselt wurden.
    • INSTANCE_ID: die Instanz-ID

    HTTP-Methode und URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

    JSON-Text anfordern:

    {
      "settings": {
        "ipConfiguration": {"sslMode": "SSL_ENFORCEMENT_MODE"}
      }
    }
    

    Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

    Sie sollten in etwa folgende JSON-Antwort erhalten:

Serverzertifikate

Cloud SQL generiert automatisch ein Serverzertifikat, wenn Sie eine Instanz erstellen. Solange das Serverzertifikat gültig ist, müssen Sie keine Schritte zum Verwalten Ihres Serverzertifikats ausführen. In Cloud SQL können Sie zwischen zwei verschiedenen Zertifizierungsstellenhierarchien wählen. Die von Ihnen ausgewählte CA-Hierarchie wird zum Server-CA-Modus der Instanz. Wenn Sie die Zertifizierungsstelle pro Instanz als Server-CA-Modus für Ihre Instanz verwenden, haben die Serverzertifikate ein Ablaufdatum von 10 Jahren. Wenn Sie die gemeinsame Zertifizierungsstelle als Server-CA-Modus Ihrer Instanz verwenden (Vorabversion), hat das Serverzertifikat ein Ablaufdatum von einem Jahr. Nach dem Ablaufdatum ist das Serverzertifikat ungültig und Clients können mit diesem Zertifikat keine sichere Verbindung mehr zu Ihrer Instanz herstellen. Wenn ein Client so konfiguriert ist, dass die Zertifizierungsstelle oder der Hostname im Serverzertifikat überprüft wird, schlägt die Verbindung dieses Clients zu Cloud SQL-Instanzen mit abgelaufenen Serverzertifikaten fehl. Um Unterbrechungen von Clientverbindungen zu vermeiden, sollten Sie das Serverzertifikat vor Ablauf rotieren. Sie werden benachrichtigt, wenn das Serverzertifikat bald abläuft. Die Benachrichtigungen werden an den folgenden Tagen vor dem Ablaufdatum gesendet: 90, 30, 10, 2 und 1.

Sie können Informationen zu Ihrem Serverzertifikat abrufen, z. B. wann es erstellt wurde und wann es abläuft. Vor dem Ablaufdatum können Sie manuell eine neue Karte erstellen.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Klicken Sie auf den Instanznamen, um die Seite Übersicht einer Instanz zu öffnen.
  3. Klicken Sie im SQL-Navigationsmenü auf Verbindungen.
  4. Wählen Sie den Tab Sicherheit aus.
  5. Gehen Sie zum Abschnitt Serverzertifikate verwalten.

    In der Tabelle sehen Sie das Ablaufdatum Ihres Serverzertifikats.

gcloud

Für Instanzen, die selbst signierte Serverzertifikate verwenden (CA pro Instanz):

  1. Verwenden Sie den Befehl sql ssl server-ca-certs list, um Informationen zum Serverzertifikat abzurufen:
    gcloud sql ssl server-ca-certs list \
    --instance=INSTANCE_NAME
  2. Verwenden Sie den Befehl sql ssl server-ca-certs create, um ein Serverzertifikat zu erstellen:
    gcloud sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
  3. Laden Sie die Zertifikatsinformationen in eine lokale PEM-Datei herunter:
    gcloud sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
  4. Aktualisieren Sie alle Ihre Clients so, dass die neuen Informationen verwendet werden. Kopieren Sie hierzu die heruntergeladene Datei auf Ihre Client-Hostcomputer und ersetzen Sie die vorhandenen server-ca.pem-Dateien.

Für Instanzen, die von einer freigegebenen Zertifizierungsstelle ausgestellte Serverzertifikate verwenden (Vorabversion):

  1. Informationen zum Serverzertifikat erhalten Sie mit dem Befehl beta sql ssl server-certs list:
    gcloud beta sql ssl server-certs list \
       --instance=INSTANCE_NAME
  2. Verwenden Sie den Befehl beta sql ssl server-certs create, um ein Serverzertifikat zu erstellen:
    gcloud beta sql ssl server-certs create \
       --instance=INSTANCE_NAME
  3. Laden Sie die Zertifikatsinformationen in eine lokale PEM-Datei herunter:
    gcloud beta sql ssl server-certs list \
       --format="value(ca_cert.cert)" \
       --instance=INSTANCE_NAME > \
       FILE_PATH/FILE_NAME.pem
  4. Aktualisieren Sie alle Ihre Clients so, dass die neuen Informationen verwendet werden. Kopieren Sie hierzu die heruntergeladene Datei auf Ihre Client-Hostcomputer und ersetzen Sie die vorhandenen server-ca.pem-Dateien.

Terraform

Verwenden Sie zum Bereitstellen von Informationen zum Serverzertifikat als Ausgabe eine Terraform-Datenquelle:

  1. Fügen Sie Ihrer Terraform-Konfigurationsdatei Folgendes hinzu:
       data "google_sql_ca_certs" "ca_certs" {
         instance = google_sql_database_instance.default.name
       }
    
       locals {
         furthest_expiration_time = reverse(sort([for k, v in data.google_sql_ca_certs.ca_certs.certs : v.expiration_time]))[0]
         latest_ca_cert           = [for v in data.google_sql_ca_certs.ca_certs.certs : v.cert if v.expiration_time == local.furthest_expiration_time]
       }
    
       output "db_latest_ca_cert" {
         description = "Latest CA certificate used by the primary database server"
         value       = local.latest_ca_cert
         sensitive   = true
       }
       
  2. Führen Sie den folgenden Befehl aus, um die Datei server-ca.pem zu erstellen:
       terraform output db_latest_ca_cert > server-ca.pem
       

Verschlüsselte Verbindungen verwenden

Hier erhalten Sie weitere Informationen darüber, wie SQL Server verschlüsselte Verbindungen verwendet.

Bestätigung der Serveridentität

Die Überprüfung der Serveridentität hängt von der Konfiguration der Zertifizierungsstellenhierarchie des Servers Ihrer Cloud SQL-Instanz ab.

Wenn Ihre Instanz für die Verwendung der pro Instanz konfiguriert ist, wird durch die Überprüfung der Zertifizierungsstelle auch die Serveridentität überprüft, da jede Instanz eine eindeutige Zertifizierungsstelle hat.

Wenn Ihre Instanz für die Verwendung der freigegebenen Zertifizierungsstelle konfiguriert ist (Vorabversion), ist für die Überprüfung der Serveridentität die Überprüfung des Hostnamens und der Zertifizierungsstelle erforderlich, da Server-Zertifizierungsstellen für alle Instanzen gemeinsam verwendet werden.

Wenn Sie eine CA pro Instanz haben, können Sie die DNS-Namenbasierte Serveridentitätsbestätigung nur für Private Service Connect-Instanzen ausführen.

Wenn Sie eine freigegebene Zertifizierungsstelle (Vorabversion) haben, können Sie die DNS-Namenbasierte Serveridentitätsbestätigung für alle Arten von Instanzen ausführen, nämlich Private Service Connect, privaten Dienstzugriff und öffentliche IP-Instanzen.

Welche CA-Hierarchie für eine Cloud SQL-Instanz konfiguriert ist, sehen Sie in den Instanzdetails.

Weitere Informationen finden Sie unter Instanzinformationen aufrufen oder im folgenden Abschnitt Serveridentitätsbestätigung aktivieren.

Bestätigung der Serveridentität aktivieren

Wenn Sie freigegebene Zertifizierungsstellen als Server-Zertifizierungsstellenmodus Ihrer Cloud SQL-Instanz (Vorabversion) auswählen, empfehlen wir Ihnen, auch die Serveridentitätsbestätigung zu aktivieren. Instanzen, bei denen die gemeinsame Zertifizierungsstelle als Server-CA-Modus verwendet wird, enthalten den DNS-Namen der Instanz im Feld „Subject Alternative Name“ (SAN) des Serverzertifikats. Sie können diesen DNS-Namen mithilfe der Instanz-Lookup API abrufen und die Antwort als Hostnamen für die Überprüfung der Serveridentität verwenden. Sie müssen die DNS-Auflösung für den DNS-Namen einrichten.

So aktivieren Sie die Bestätigung der Serveridentität:

  1. Rufen Sie den DNS-Namen ab.

    1. Verwenden Sie den Befehl gcloud sql instances describe, um zusammenfassende Informationen zu einer Cloud SQL-Instanz einschließlich des DNS-Namens der Instanz aufzurufen:

      gcloud sql instances describe INSTANCE_NAME \
        --project=PROJECT_ID

      Ersetzen Sie die folgenden Werte:

      • INSTANCE_NAME: Der Name der Cloud SQL-Instanz.
      • PROJECT_ID: die ID oder Projektnummer des Google Cloud-Projekts, das die Instanz enthält
    2. Prüfen Sie in der Antwort, ob der DNS-Name angezeigt wird. Dieser Name hat das folgende Muster:

      INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.
      

      Beispiel:

      1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.

  2. Erstellen Sie den DNS-Eintrag in einer DNS-Zone. Wenn Sie eine private Verbindung herstellen, erstellen Sie den DNS-Eintrag in einer privaten DNS-Zone im entsprechenden VPC-Netzwerk (Virtual Private Cloud).

  3. Wenn Sie eine Verbindung zur Cloud SQL for SQL Server-Instanz herstellen, konfigurieren Sie den DNS-Namen oder die IP-Adresse als Hostnamen. Aktivieren Sie dann die Überprüfung der Serveridentität, indem Sie das Flag -N für sqlcmd angeben oder die Option Verbindung verschlüsseln/Verschlüsselung in SSMS auswählen.

    Andere SQL Server-Treiber haben ähnliche Flags oder Konfigurationen.

Nächste Schritte