Auf dieser Seite wird beschrieben, wie Sie eine Instanz für die Verwendung von SSL/TLS konfigurieren. 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 (server-ca.pem
), wenn Sie eine Instanz erstellen. Wir empfehlen, alle Verbindungen zur Verwendung von SSL/TLS zu zwingen.
Sie müssen eine Instanz neu starten, nachdem Sie SSL für die Instanz erzwungen haben. Sie müssen die Instanz jedoch nicht neu starten, nachdem Sie die SSL/TLS-Zertifikate geändert haben. Falls ein Neustart erforderlich ist, erfolgt dieser automatisch während des SSL-Aktualisierungsereignisses.
SSL/TLS-Verschlüsselung erzwingen
Wenn Sie bei der Konfiguration Ihrer Cloud SQL-Instanz festlegen, dass SSL-/TLS-Verbindungen akzeptiert werden sollen, werden SSL-/TLS-Verbindungen für die Instanz aktiviert. Es werden aber auch weiterhin alle nicht verschlüsselten unsicheren Verbindungen akzeptiert. Sie müssen die SSL-/TLS-Verschlüsselung für alle Verbindungen zur Bedingung machen, sonst können auch Clients ohne gültiges Zertifikat Verbindungen herstellen. Es wird daher dringend empfohlen, SSL für alle Verbindungen zu erzwingen, wenn über öffentliche IP-Adressen auf Ihre Instanz zugegriffen wird.Wenn die Option SSL/TLS anfordern aktiviert ist, können Sie entweder den Cloud SQL Auth-Proxy oder SSL/TLS-Zertifikate verwenden, um eine Verbindung zu Ihrer Cloud SQL-Instanz herzustellen. Für die Verwendung des Cloud SQL Auth-Proxys sind keine SSL/TLS-Zertifikate erforderlich, da die Verbindung unabhängig von der Einstellung verschlüsselt ist.
So aktivieren Sie die Erfordernis von SSL/TLS:
Console
-
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
- Klicken Sie auf den Instanznamen, um die Seite Übersicht einer Instanz zu öffnen.
- Klicken Sie im SQL-Navigationsmenü auf Verbindungen.
- Wählen Sie den Tab Sicherheit aus.
- Klicken Sie auf Nur SSL-Verbindungen zulassen.
gcloud
gcloud sql instances patch INSTANCE_NAME --require-ssl
Terraform
Verwenden Sie zum Erzwingen der SSL/TLS-Verschlüsselung eine Terraform-Ressource:
Änderungen anwenden
Führen Sie die folgenden Schritte aus, um Ihre Terraform-Konfiguration in einem Google Cloud-Projekt anzuwenden:
- Rufen Sie Cloud Shell auf.
-
Legen Sie das Google Cloud-Projekt fest, auf das Sie die Terraform-Konfiguration anwenden möchten:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
-
Erstellen Sie ein Verzeichnis und öffnen Sie eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung
.tf
haben, z. B.main.tf
:mkdir DIRECTORY && cd DIRECTORY && nano main.tf
- Kopieren Sie das Beispiel in
main.tf
. - Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen, indem Sie
Ctrl-x
und danny
drücken. -
Initialisieren Sie Terraform:
terraform init
-
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.
-
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.
- Ö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:
- Um den Löschschutz zu deaktivieren, setzen Sie in der Terraform-Konfigurationsdatei das Argument
deletion_protection
auffalse
.deletion_protection = "false"
- 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
-
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
-
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- project-id: die Projekt-ID
- 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": {"requireSsl": "true"} } }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort erhalten:
REST v1beta4
-
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- project-id: die Projekt-ID
- 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": {"requireSsl": "true"} } }
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. Wenn das Ablaufdatum des Zertifikats nach zehn Jahren jedoch erreicht und überschritten wird, ist das Zertifikat ungültig und kann von den Clients nicht mehr verwendet werden, um eine sichere Verbindung zu Ihrer Instanz herzustellen. 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. Außerdem haben Sie die Möglichkeit, manuell ein neues Zertifikat zu erstellen.
Console
-
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
- Klicken Sie auf den Instanznamen, um die Seite Übersicht einer Instanz zu öffnen.
- Klicken Sie im SQL-Navigationsmenü auf Verbindungen.
- Wählen Sie den Tab Sicherheit aus.
- Scrollen Sie nach unten zum Abschnitt Serverzertifikate verwalten.
In der Tabelle sehen Sie das Ablaufdatum Ihres Serverzertifikats.
gcloud
- Rufen Sie Informationen zum Dienstzertifikat ab:
gcloud beta sql ssl server-ca-certs list \ --instance=INSTANCE_NAME
- Erstellen Sie ein Serverzertifikat:
gcloud beta sql ssl server-ca-certs create \ --instance=INSTANCE_NAME
- Laden Sie die Zertifikatsinformationen in eine lokale PEM-Datei herunter:
gcloud beta sql ssl server-ca-certs list \ --format="value(cert)" \ --instance=INSTANCE_NAME > \ FILE_PATH/FILE_NAME.pem
- 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:
- 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 }
- Führen Sie den folgenden Befehl aus, um die Datei
server-ca.pem
zu erstellen:terraform output db_latest_ca_cert > server-ca.pem
Clientzertifikate
Neues Clientzertifikat erstellen
Sie können für jede Instanz bis zu zehn Clientzertifikate erstellen. Zum Erstellen von Clientzertifikaten benötigen Sie die IAM-Rolle Cloud SQL Admin
.
Beachten Sie bei Clientzertifikaten Folgendes:
- Wenn Sie den privaten Schlüssel für ein Zertifikat verlieren, müssen Sie einen neuen Schlüssel erstellen. Der private Schlüssel kann nicht wiederhergestellt werden.
- Das Clientzertifikat hat standardmäßig ein Ablaufdatum von 10 Jahren.
- Sie werden nicht benachrichtigt, wenn die Clientzertifikate bald ablaufen.
Console
-
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
- Klicken Sie auf den Instanznamen, um die Seite Übersicht einer Instanz zu öffnen.
- Klicken Sie im SQL-Navigationsmenü auf Verbindungen.
- Wählen Sie den Tab Sicherheit aus.
- Klicken Sie auf Clientzertifikat erstellen.
- Geben Sie im Dialogfeld Clientzertifikat erstellen einen eindeutigen Namen ein.
- Klicken Sie auf Erstellen.
- Klicken Sie im ersten Abschnitt des Dialogfelds Neues SSL-Zertifikat erstellt auf client-key.pem herunterladen, um den privaten Schlüssel in eine Datei mit dem Namen
client-key.pem
herunterzuladen. - Klicken Sie im zweiten Abschnitt auf client-cert.pem herunterladen, um das Clientzertifikat in eine Datei mit dem Namen
client-cert.pem
herunterzuladen. - Klicken Sie im dritten Abschnitt auf server-ca.pem herunterladen, um das Serverzertifikat in eine Datei mit dem Namen
server-ca.pem
herunterzuladen. - Klicken Sie auf Schließen.
gcloud
Erstellen Sie mit dem Befehl
ssl client-certs create
ein Clientzertifikat:gcloud sql ssl client-certs create CERT_NAME client-key.pem \ --instance=INSTANCE_NAME
Rufen Sie den öffentlichen Schlüssel für das gerade erstellte Zertifikat ab und kopieren Sie ihn mit dem Befehl
ssl client-certs describe
in die Dateiclient-cert.pem
:gcloud sql ssl client-certs describe CERT_NAME \ --instance=INSTANCE_NAME \ --format="value(cert)" > client-cert.pem
Kopieren Sie das Serverzertifikat mit dem Befehl
instances describe
in die Dateiserver-ca.pem
:gcloud sql instances describe INSTANCE_NAME \ --format="value(serverCaCert.cert)" > server-ca.pem
Terraform
Verwenden Sie zum Erstellen eines Clientzertifikats eine Terraform-Ressource:
REST Version 1
Erstellen Sie ein SSL-/TLS-Zertifikat. Sein Name darf für diese Instanz nur einmal vorkommen:
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- project-id: die Projekt-ID
- instance-id: die Instanz-ID
- client-cert-name: der Name des Clientzertifikats
HTTP-Methode und URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts
JSON-Text anfordern:
{ "commonName" : "client-cert-name" }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort erhalten:
- Gehen Sie so vor, um den gesamten Zertifikatsinhalt innerhalb der Anführungszeichen (jedoch ohne die Anführungszeichen selbst) aus der Antwort in lokale Dateien zu kopieren:
- Kopieren Sie
serverCaCert.cert
inserver-ca.pem
. - Kopieren Sie
clientCert.cert
inclient-cert.pem
. - Kopieren Sie
certPrivateKey
inclient-key.pem
.
- Kopieren Sie
REST v1beta4
Erstellen Sie ein SSL-/TLS-Zertifikat. Sein Name darf für diese Instanz nur einmal vorkommen:
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
- project-id: die Projekt-ID
- instance-id: die Instanz-ID
- client-cert-name: der Name des Clientzertifikats
HTTP-Methode und URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts
JSON-Text anfordern:
{ "commonName" : "client-cert-name" }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort erhalten:
- Gehen Sie so vor, um den gesamten Zertifikatsinhalt innerhalb der Anführungszeichen (jedoch ohne die Anführungszeichen selbst) aus der Antwort in lokale Dateien zu kopieren:
- Kopieren Sie
serverCaCert.cert
inserver-ca.pem
. - Kopieren Sie
clientCert.cert
inclient-cert.pem
. - Kopieren Sie
certPrivateKey
inclient-key.pem
.
- Kopieren Sie
Sie verfügen nun über die folgenden Elemente:
- Ein Serverzertifikat, das als
server-ca.pem
gespeichert ist. - Ein Public-Key-Zertifikat des Clients, das als
client-cert.pem
gespeichert ist. - Einen privaten Schlüssel für den Client, der als
client-key.pem
gespeichert ist.
sslrootcert
, sslcert
und sslkey
im psql-Verbindungsstring. Ein Beispiel für den Verbindungsaufbau mit dem psql-Client und SSL/TLS finden Sie unter Mit dem psql-Client verbinden.
Nächste Schritte
- SSL/TLS auf Ihrer Cloud SQL-Instanz verwalten
- Weitere Informationen zur Verschlüsselung in Google Cloud.
- SSL-/TLS-Zertifikate zur Verbindung mit Ihrer Cloud SQL-Instanz
- SSL/TLS mit PostgreSQL verwenden