In diesem Dokument wird beschrieben, wie Sie einer Spanner Omni-Bereitstellung auf virtuellen Maschinen (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 mehr Sicherheit, wobei beide Parteien die Authentizität feststellen, bevor sie Daten austauschen. mTLS ist zwischen dem Client und dem Server optional, aber Spanner Omni-Server kommunizieren über mTLS miteinander.
Hinweis
Bevor Sie beginnen, sollten Sie prüfen, ob Ihre Umgebung die folgenden Anforderungen erfüllt:
Achten Sie darauf, dass Sie SSH-Zugriff auf alle Maschinen in der Bereitstellung haben. Mit diesem Zugriff können Sie die Spanner Omni-Binärdatei herunterladen und ausführen.
Ihr Netzwerk muss TCP-Kommunikation über die Ports 15000 bis 15030 zulassen.
Jede Maschine muss über ausreichend Speicherplatz verfügen, um die von der Bereitstellung verarbeiteten Daten zu hosten.
Prüfen Sie auf der Seite Systemanforderungen, ob 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 die Einstellung
monitor_control.virtual_rdtsc = FALSEder Konfigurationsdatei.vmxder virtuellen Maschine hinzu.
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 Ihre VM-Bereitstellung ohne Verschlüsselungs- und Sicherheitsfunktionen ordnungsgemäß funktioniert. Auf dieser Seite wird davon ausgegangen, dass Sie eine regionale Bereitstellung mit drei Zonen erstellt haben.
Schritt 2: Zertifikate generieren
Sie müssen drei Sätze von Zertifikaten 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 nachzuweisen. |
Diese Zertifikate werden von einer Zertifizierungsstelle (Certificate Authority, CA) ausgestellt. Spanner Omni bietet Tools zum Erstellen einer Zertifizierungsstelle und aller drei Zertifikatstypen. Führen Sie die folgenden Schritte auf einem Ihrer Computer aus.
Sie können diese Zertifikate auf Ihrer Workstation mit der Spanner Omni CLI erstellen und die Zertifikatsdateien dann auf jeden Spanner Omni-Server übertragen. Weitere Informationen finden Sie in der Kurzanleitung: Spanner Omni CLI verwenden.
So generieren Sie Zertifikate:
Zertifizierungsstelle erstellen
Diese Zertifizierungsstelle ist die Stammzertifizierungsstelle 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, um es als Zertifizierungsstelle für API-Zertifikate zu verwenden.
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. Ein Nutzer mit Zugriff auf den privaten Schlüssel kann beliebige Zertifikate signieren, denen Clients vertrauen, die der selbst signierten Zertifizierungsstelle vertrauen.
Sie können zwar dieselbe Zertifizierungsstelle für alle Zertifikate verwenden, es ist jedoch zwingend erforderlich, dass API-Zertifikate und Clientzertifikate dieselbe Zertifizierungsstelle verwenden. Optional können Sie eine zusätzliche Zertifizierungsstelle für die API-Zertifikate erstellen oder eine extern vertrauenswürdige Zertifizierungsstelle verwenden.
Achten Sie darauf, dass Sie in den folgenden Schritten beim Erstellen von Zertifikaten die richtige Zertifizierungsstelle verwenden. In diesem Dokument wird für alle Zertifikatstypen 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 der Bereitstellung 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 untereinander (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 von 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, indem Sie Folgendes ausführen. 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 allen Servern 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 alle Computer, die eine Verbindung zu Servern der Bereitstellung herstellen.
Wenn Sie die Clientzertifikate mit der Java-Clientbibliothek verwenden möchten, müssen Sie den Zertifikatsschlü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: Wrapper-Schlüsselsatz generieren
Spanner Omni verwendet ein KEK-Wrapper-Schlüsselset (Key Encryption Key), um interne Schlüssel wie Tokenverschlüsselungs- und Signaturschlüssel zu verschlüsseln.
Spanner Omni-Server lesen diesen Schlüsselsatz aus BASE_DIR/kms/wrapper_key.
Führen Sie den folgenden Befehl aus, um mit spanner keys create-keyset eine neue Wrapper-Schlüsselsatzdatei zu generieren:
spanner keys create-keyset --output-file=kms/wrapper_key
Standardmäßig generiert spanner keys create-keyset einen AES256_GCM-Schlüssel. Wenn Sie einen anderen Schlüsseltyp generieren möchten, verwenden Sie das Flag --key-template mit einem der folgenden Schlüsseltypwerte: AES256_GCM, AES128_GCM, AES256_GCM_RAW, CHACHA20_POLY1305 oder XCHACHA20_POLY1305.
Wrapper-Schlüsselsatz an alle Server verteilen
Kopieren Sie das Verzeichnis kms in das Basisverzeichnis auf allen Servern in der Bereitstellung, bevor Sie sie starten:
scp -r kms REMOTE_HOST:BASE_DIR/kms
Schritt 5: Server starten
So starten Sie die Server in Ihrer Bereitstellung:
- Prüfen Sie, ob Sie die Zertifikate und den Wrapper-Schlüsselsatz generiert und auf alle Server in Ihrer Bereitstellung kopiert haben.
- Erstellen Sie auf jedem Server ein Basisverzeichnis zum Speichern von Daten, Metadaten und Logs. Wenn ein Server neu gestartet werden muss, geben Sie dasselbe Basisverzeichnis an, um die Kontinuität zu gewährleisten.
- Starten Sie jeden Server gemäß der Anleitung für Ihren Bereitstellungstyp in den folgenden Abschnitten.
Bereitstellung auf einem einzelnen Server
Wenn Sie eine Einzelserverbereitstellung mit Verschlüsselung starten möchten, erstellen Sie eine Passwortdatei für den ersten admin-Nutzer und starten Sie den Server mit den unterstützten Authentifizierungsmethoden und Zertifikaten.
Erstellen Sie die Passwortdatei mit den Berechtigungen 600, damit sie nur vom Inhaber gelesen werden kann:
printf '%s' 'PASSWORD' > admin_password.txt chmod 600 admin_password.txtDas Passwort muss die folgenden Anforderungen erfüllen:
- Zwischen 8 und 32 Zeichen lang.
- Mindestens ein Großbuchstabe
- Mindestens ein Kleinbuchstabe.
- Mindestens eine Zahl
- Mindestens ein Sonderzeichen.
Starten Sie den einzelnen Server mit konfigurierter TLS und Authentifizierung:
nohup spanner start-single-server \ --base-dir=BASE_DIR \ --certificate-directory=${HOME}/.spanner/certs \ --auth-methods=password,client-certificate \ --password-protocol=opaque \ --initial-admin-password-file=admin_password.txt &Beim ersten Start legt
spanner start-single-serverdie unterstützten Authentifizierungsmethoden und das Passwortprotokoll fest und erstellt den erstenadmin-Nutzer mit der Rolleroles/spanner.adminunter Verwendung der angegebenen Passwortdatei.
Informationen zur Interaktion mit Ihrer Bereitstellung finden Sie unter Schritt 8: Mit der Bereitstellung interagieren.
Horizontale Bereitstellung
Starten Sie bei horizontal skalierbaren Bereitstellungen den Server auf jedem Computer. Die Werte für server-address und zone müssen mit den Werten in der Bereitstellungskonfiguration übereinstimmen. Das Netzwerk muss server-address auflösen. Server verwenden server-address 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 &
Der folgende Befehl zeigt ein Beispiel mit bestimmten Werten:
nohup spanner start \
--root \
--server-address=rootserver1 \
--zone=us-central-1a \
--base-dir=./spanbasedir \
--certificate-directory=${HOME}/.spanner/certs &
Da die Server jetzt auf jeder Maschine ausgeführt werden, können Sie das Deployment erstellen.
Schritt 6: Bereitstellung mit TLS-Verschlüsselung erstellen
So erstellen Sie das Deployment:
Erstellen Sie eine Passwortdatei mit dem Passwort für den Standardnutzer
admin, wobei die Berechtigungen auf 600 festgelegt sind (nur vom Inhaber lesbar):printf '%s' 'PASSWORD' > admin_password.txt chmod 600 admin_password.txtDas Passwort muss die folgenden Anforderungen erfüllen:
- Zwischen 8 und 32 Zeichen lang.
- Mindestens ein Großbuchstabe
- Mindestens ein Kleinbuchstabe.
- Mindestens eine Zahl
- Mindestens ein Sonderzeichen.
Achten Sie darauf, dass
deployment.yamldie ausgewählten Authentifizierungsmethoden und das Passwortprotokoll enthält:deployment_settings: security_settings: authentication_methods: - AUTHENTICATION_METHOD_PASSWORD - AUTHENTICATION_METHOD_CLIENT_CERTIFICATE password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUESie können eine oder mehrere der folgenden Authentifizierungsmethoden angeben:
AUTHENTICATION_METHOD_PASSWORD: PasswortauthentifizierungAUTHENTICATION_METHOD_CLIENT_CERTIFICATE: Clientzertifikatsauthentifizierung
Sie können das folgende Passwortprotokoll angeben:
PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE: OPAQUE-Protokoll
Führen Sie den Befehl
spanner deployment createauf einem der Root-Server aus, um das Deployment zu erstellen. Geben Sie das Basisverzeichnis mit dem Flag--base-diran (verwenden Sie dabei denselben BASE_DIR, der beim Starten des Root-Servers angegeben wurde) und geben Sie die Datei mit dem Administratorpasswort mit dem Flag--admin-password-filean:spanner deployment create \ --config-file=deployment.yaml \ --base-dir=BASE_DIR \ --admin-password-file=admin_password.txt
In der Konsole für jede Maschine werden Meldungen angezeigt, die darauf hinweisen, dass die Bereitstellung jetzt TLS-Verschlüsselung enthält. Alle Server kommunizieren über einen verschlüsselten Kanal miteinander.
Schritt 7 (optional): Load Balancer konfigurieren
Richten Sie einen Load Balancer ein, um den Client-Traffic auf die Server in Ihrer Bereitstellung zu verteilen und zu verwalten. Achten Sie darauf, dass die Load-Balancer-Konfiguration für die Systemdiagnose HTTPS anstelle von HTTP verwendet. 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 8: Mit der Bereitstellung interagieren
Sie können über die Spanner Omni-Befehlszeile von jeder VM aus 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=ENDPOINTGeben Sie nach Aufforderung das in
admin_password.txtkonfigurierte Passwort ein.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 falseRufen 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 9: (Optional) Bereitstellung skalieren
Sie können einer Zone Nicht-Root-Server hinzufügen, um ihre Kapazität zu skalieren. So fügen Sie einen Nicht-Root-Server hinzu:
Generieren Sie ein Serverzertifikat für den Nicht-Root-Server und kopieren Sie die Zertifikate dorthin. Weitere Informationen finden Sie unter Schritt 2: Zertifikate generieren.
Kopieren Sie den Wrapper-Schlüsselsatz auf den Nicht-Root-Server. Weitere Informationen finden Sie unter Schritt 4: Wrapper-Schlüsselsatz generieren.
Starten Sie den Nicht-Root-Server:
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
Nächste Schritte
- Verwenden Sie Clientbibliotheken und JDBC-Treiber, um Ihre Anwendung mit der Bereitstellung zu verbinden.
- Nutzer und Rollen verwalten