In diesem Dokument wird beschrieben, wie Sie einer Spanner Omni-Bereitstellung auf VMs TLS-Verschlüsselung hinzufügen. Bei einer Bereitstellung mit Netzwerksicherheitsfunktionen wird Transport Layer Security (TLS) 1.3 verwendet, um die Kommunikation innerhalb der Bereitstellung und mit ihren Clients zu verschlüsseln und zu authentifizieren. Spanner Omni bietet gegenseitiges TLS (mTLS) für erweiterte Sicherheitsfunktionen. Dabei stellen beide Parteien die Authentizität her, bevor sie Daten austauschen. mTLS ist zwischen dem Client und dem Server optional, aber Spanner Omni-Server kommunizieren miteinander über mTLS.
Die Vorschauversion von Spanner Omni unterstützt keine TLS-Verschlüsselung. Wenn Sie die Funktionen zum Erstellen von Bereitstellungen mit TLS-Verschlüsselung nutzen möchten, wenden Sie sich an Google, um Early Access zur Vollversion von Spanner Omni zu beantragen.
Hinweis
Prüfen Sie vorab, ob Ihre Umgebung die folgenden Anforderungen erfüllt:
Sie benötigen SSH-Zugriff auf jede Maschine im Deployment. Mit diesem Zugriff können Sie die Spanner Omni-Binärdatei herunterladen und ausführen.
Ihr Netzwerk muss die TCP-Kommunikation über die Ports 15000 bis 15025 zulassen.
Jede Maschine muss über ausreichend Speicherplatz verfügen, um die Daten zu hosten, die vom Deployment verarbeitet werden.
Sehen Sie sich die Seite Systemanforderungen an, um sicherzustellen, dass Ihre Einrichtung die Anforderungen erfüllt.
Wenn Sie die Binärdateien auf der vSphere-Virtualisierungsplattform ausführen, deaktivieren Sie die TSC-Virtualisierung. Fügen Sie dazu der
.vmx-Konfigurationsdatei der virtuellen Maschine die Einstellungmonitor_control.virtual_rdtsc = FALSEhinzu.
Schritt 1: Bereitstellung ohne TLS-Verschlüsselung erstellen
Folgen Sie der Anleitung unter Spanner Omni-VM-Bereitstellung ohne Verschlüsselung erstellen. Prüfen Sie, ob die VM-Bereitstellung ohne Verschlüsselungs- und Sicherheitsfunktionen ordnungsgemäß funktioniert. Auf dieser Seite wird davon ausgegangen, dass Sie ein regionales Deployment mit drei Zonen erstellt haben.
Schritt 2: Zertifikate generieren
Sie müssen drei Zertifikatsätze erstellen:
| Zertifikatstyp | Beschreibung |
|---|---|
| API-Zertifikate | API-Zertifikate tragen zum Schutz des Spanner API-Servers bei. |
| Serverzertifikate | Serverzertifikate schützen die Kommunikation zwischen Servern. |
| Clientzertifikate | Endnutzer oder Anwendungen verwenden Clientzertifikate, um ihre Identität und ihr Vertrauen gegenüber Spanner Omni-Servern zu bestätigen. |
Diese Zertifikate werden von einer Zertifizierungsstelle (Certificate Authority, CA) ausgestellt. Spanner Omni bietet Tools zum Erstellen einer Zertifizierungsstelle und aller drei Arten von Zertifikaten. Führen Sie die folgenden Schritte auf einem Ihrer Computer aus.
Sie können diese Zertifikate auf Ihrer Workstation mit der Spanner Omni-Befehlszeile erstellen und die Zertifikatsdateien dann auf jeden Spanner Omni-Server übertragen. Weitere Informationen finden Sie unter Schnellstart mit der Spanner Omni CLI.
So generieren Sie Zertifikate:
- Zertifizierungsstelle (Certificate Authority, CA) erstellen
- Serverzertifikate generieren
- Clientzertifikate generieren
Zertifizierungsstelle (Certificate Authority, CA) erstellen
Diese Zertifizierungsstelle ist die Root-Zertifizierungsstelle für alle Client- und Serverzertifikate, die Sie in den folgenden Schritten generieren.
spanner certificates create-ca --ca-certificate-directory=certs
Das Verzeichnis certs enthält das CA-Zertifikat. Erstellen Sie eine Kopie dieses Zertifikats, die Sie als CA für API-Zertifikate verwenden können.
cp certs/ca.crt certs/ca-api.crt
Das Verzeichnis $HOME/.spanner/private-keys enthält den privaten Schlüssel für die Zertifizierungsstelle.
Sichern Sie dieses Verzeichnis und schützen Sie es. Ein Nutzer mit Zugriff auf den privaten Schlüssel kann beliebige Zertifikate signieren, denen Clients vertrauen, die der selbst signierten CA vertrauen.
Sie können zwar dieselbe Zertifizierungsstelle für alle Zertifikate verwenden, aber API-Zertifikate und Clientzertifikate müssen dieselbe Zertifizierungsstelle verwenden. Optional können Sie eine zusätzliche Zertifizierungsstelle erstellen oder eine extern vertrauenswürdige Zertifizierungsstelle für die API-Zertifikate verwenden.
Achten Sie darauf, dass Sie beim Erstellen von Zertifikaten in den folgenden Schritten die richtige Zertifizierungsstelle verwenden. In diesem Dokument wird für alle Zertifikattypen dieselbe Zertifizierungsstelle verwendet.
Serverzertifikate generieren
Sie generieren zwei Arten von Serverzertifikaten:
Spanner-Serverzertifikat: Verschlüsselt die Kommunikation zwischen Spanner Omni-Servern.
API-Zertifikat: Verschlüsselt die Kommunikation von Systemen, die mit dem Deployment interagieren.
Diese Einrichtung ermöglicht eine flexiblere Verwaltung dieser Zertifikate, z. B. eine Zertifikatsrotation.
Spanner-Serverzertifikat erstellen
Spanner Omni-Server verwenden Serverzertifikate, um die Kommunikation miteinander (Server-zu-Server-Kommunikation) zu verschlüsseln.
Erstellen Sie das Serverzertifikat mit dem folgenden Befehl. Ersetzen Sie SERVER_LIST durch eine durch Kommas getrennte Liste mit Namen von Spanner-Servern oder ‑Suffixen.
SERVER_NAMES=SERVER_LIST
spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Mit diesem Befehl werden im Verzeichnis certs zwei Dateien erstellt: server.crt und server.key.
API-Zertifikat erstellen
API-Zertifikate verschlüsseln die Kommunikation von Systemen, die mit der Bereitstellung interagieren. Wenn Sie separate Zertifikate für die API und die Kommunikation zwischen Servern verwenden, können Sie jeden Typ unabhängig verwalten und rotieren.
Erstellen Sie das API-Zertifikat mit dem folgenden Befehl. Ersetzen Sie LB_DNS durch den DNS des Load-Balancers.
SERVER_NAMES=LB_DNS
spanner certificates create-server --filename-prefix=api --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Mit diesem Befehl werden zwei weitere Dateien, api.crt und api.key, im Verzeichnis certs erstellt. Bei Bedarf können Sie eine extern vertrauenswürdige Zertifizierungsstelle für die API-Zertifikate verwenden.
Zertifikate auf alle Server verteilen
Kopieren Sie das Verzeichnis certs auf alle anderen Server in der Bereitstellung, um sie mit Netzwerksicherheitsfunktionen zu starten.
scp -r certs REMOTE_HOST:SPANNER_DIR/certs
Schritt 3: Clientzertifikate generieren
Sie können Clientzertifikate verwenden, um Nutzer und Anwendungen in Spanner zu authentifizieren. Clientzertifikate ermöglichen mTLS zwischen dem Client und dem Server.
Clientzertifikate müssen von derselben Zertifizierungsstelle wie das API-Zertifikat signiert sein und einen Nutzernamen für die Autorisierung enthalten. In diesem Beispiel wird der Nutzer admin verwendet, der der Standardnutzer für jede Datenbank ist. Weitere Informationen zu Nutzern, Rollen und Authentifizierungsoptionen finden Sie unter Authentifizierung und Autorisierung in Spanner Omni.
USERNAME=admin
spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Mit diesem Befehl werden die Dateien client.crt und client.key im Verzeichnis clientcerts erstellt. Senden Sie diese Dateien an jeden Computer, der eine Verbindung zu den Servern der Bereitstellung herstellt.
Wenn Sie die Clientzertifikate mit der Java-Clientbibliothek verwenden möchten, müssen Sie den Zertifikatschlüssel im PKCS#8-Format generieren. Verwenden Sie den folgenden Befehl:
USERNAME=admin
spanner certificates create-client $USERNAME \
--output-directory clientcerts \
--ca-certificate-directory certs \
--generate-pkcs8-key
Schritt 4: Server neu starten
Nachdem Sie die Zertifikate generiert und auf alle Server in Ihrer Bereitstellung kopiert haben, starten Sie jeden Server neu.
Bereitstellung auf einem einzelnen Server
Führen Sie bei Bereitstellungen auf einem einzelnen Server den folgenden Befehl aus:
nohup spanner start-single-server \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
Der Server wird gestartet. Informationen zur Interaktion mit dem Deployment finden Sie unter Schritt 7: Mit dem Deployment interagieren.
Horizontale Bereitstellung
Starten Sie bei Scale-out-Bereitstellungen den Server auf jedem Computer. Die Werte für server_address und zone müssen mit denen in der Bereitstellungskonfiguration übereinstimmen.
Das Netzwerk muss server_address auflösen. Server verwenden diese für die interne Kommunikation. Führen Sie den folgenden Befehl aus, um den Root-Server zu starten:
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
Im folgenden Befehl sehen Sie ein Beispiel mit bestimmten Werten:
nohup spanner start \
--root \
--server-address=rootserver1 \
--zone=us-central-1a \
--base-dir=./spanbasedir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
Um mTLS für Clients zu aktivieren, verwenden Sie das Flag --enable-client-certificate-authentication=true beim Starten des Servers.
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false \
--enable-client-certificate-authentication=true &
Nachdem die Server auf jedem Computer ausgeführt werden, können Sie das Deployment erstellen.
Schritt 5: Bereitstellung mit TLS-Verschlüsselung erstellen
Führen Sie den Befehl spanner deployment create auf einem der Root-Server aus:
spanner deployment create --config-file=deployment.yaml
In der Konsole für jede Maschine werden Meldungen angezeigt, die darauf hinweisen, dass die Bereitstellung jetzt TLS-Verschlüsselung umfasst. Alle Server kommunizieren über einen verschlüsselten Kanal miteinander.
Schritt 6 (optional): Load-Balancer konfigurieren
Richten Sie einen Load-Balancer ein, um den Clienttraffic auf die Server in Ihrer Bereitstellung zu verteilen. Achten Sie darauf, dass in der Load-Balancer-Konfiguration für die Systemdiagnose HTTPS anstelle von HTTP verwendet wird. Verwenden Sie die folgenden Konfigurationsdetails:
| Parameter | Wert |
|---|---|
| Protokoll | TCP |
| Backend-IP | Die IP-Adressen Ihrer Server. |
| Port | 15000 (Dies ist der Standardport. Wenn Sie im Flag --server-address einen anderen Port verwendet haben, verwenden Sie diesen Port.) |
| URL der Systemdiagnose | https://IP_ADDRESS:15012/healthz |
| Balancing-Strategie | roundrobin (verteilt Anfragen sequenziell auf Server) |
Schritt 7: Mit der Bereitstellung interagieren
Sie können von jeder VM aus über die Spanner Omni-Befehlszeile mit Ihrer Spanner Omni-Bereitstellung interagieren.
Sie müssen das folgende Flag in jeden Befehl einfügen, um eine verschlüsselte Verbindung herzustellen:
--ca-certificate-file=certs/ca-api.crt
Wenn Sie mTLS für Clients aktiviert haben, fügen Sie jedem Befehl auch das folgende Flag hinzu:
--client-certificate-directory=clientcerts
So melden Sie sich an und interagieren mit Ihrem Deployment:
In Spanner Omni anmelden
spanner auth login admin \ --ca-certificate-file=certs/ca-api.crt \ --deployment-endpoint=ENDPOINTDas Standardpasswort ist
admin.Successfully logged in as "admin"Datenbank erstellen
spanner --deployment-endpoint=ENDPOINT databases create mydb --ca-certificate-file=certs/ca-api.crtCreating database...done.SQL-Shell öffnen
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner>Tabelle erstellen und Daten hinzufügen
spanner> create table names (nameId INT64 NOT NULL, name String(100)) Primary Key (nameId); Query OK, 0 rows affected (4.62 sec) spanner> insert names (nameId, name) values (1, "Jack"); Query OK, 1 rows affected (0.18 sec)Daten überprüfen
Listen Sie die Datenbanken auf:
spanner databases list --ca-certificate-file=certs/ca-api.crtNAME STATE VERSION_RETENTION_PERIOD EARLIEST_VERSION_TIME KMS_KEY_NAME ENABLE_DROP_PROTECTION mydb READY 1h 2025-02-07T12:25:30Z falseSo rufen Sie die Daten aus der Tabelle ab:
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner> show tables; +----------------+ | Tables_in_mydb | +----------------+ | names | +----------------+ 1 rows in set (0.14 sec) spanner> select * from names; +--------+--------+ | nameId | name | +--------+--------+ | 1 | Jack | +--------+--------+ 1 rows in set (18.69 msecs)
Schritt 8 (optional): Bereitstellung skalieren
Sie können einer Zone Nicht-Root-Server hinzufügen, um die Kapazität der Zone zu erhöhen. Generieren Sie dazu das Serverzertifikat für die Nicht-Root-Server, wie in Schritt 2: Zertifikate generieren beschrieben, und starten Sie den Server mit dem folgenden Befehl:
spanner start \
--server-address=NON_ROOT_MACHINE \
--join-servers=ROOT_SERVER1,ROOT_SERVER2,ROOT_SERVER3 \
--zone=us-central1-a \
--base-dir=./spandir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false
Nächste Schritte
- Verwenden Sie Clientbibliotheken und JDBC-Treiber, um Ihre Anwendung mit der Bereitstellung zu verbinden.
- Nutzer und Rollen verwalten