Bereitstellung mit TLS-Verschlüsselung auf VMs erstellen

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 erweiterte Sicherheitsfunktionen, 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.

Die Vorschauversion von Spanner Omni unterstützt keine TLS-Verschlüsselung und beendet das Schreiben von Daten 90 Tage nach der Erstellung einer Bereitstellung. Wenn Sie Vorabzugriff auf die Version mit allen Funktionen erhalten möchten, wenden Sie sich an Google.

Hinweis

Bevor Sie beginnen, müssen die folgenden Anforderungen erfüllt sein:

  • Sie benötigen SSH-Zugriff auf jeden Computer in der Bereitstellung. 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.

  • Jeder Computer muss ausreichend Speicherplatz haben, um die Daten zu hosten, die von der Bereitstellung verarbeitet werden.

  • Auf der Seite Systemanforderungen können Sie prüfen, 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 = FALSE der .vmx-Konfigurationsdatei der 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üsselung 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 Zertifikatsätze erstellen:

Zertifikatstyp Beschreibung
API-Zertifikate API-Zertifikate tragen zum Schutz des Spanner API-Servers bei.
Serverzertifikate Serverzertifikate tragen zum Schutz der Kommunikation zwischen Servern bei.
Clientzertifikate Endnutzer oder Anwendungen verwenden Clientzertifikate, um ihre Identität und Vertrauenswürdigkeit gegenüber Spanner Omni-Servern zu bestätigen.

Diese Zertifikate werden von einer Zertifizierungsstelle (Certification 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 im Schnellstart zur Verwendung der Spanner Omni CLI.

So generieren Sie Zertifikate:

Zertifizierungsstelle 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, 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 und schützen Sie es. Ein Nutzer mit Zugriff auf den privaten Schlüssel kann beliebige Zertifikate signieren, die von Clients als vertrauenswürdig eingestuft werden, die der selbst signierten Zertifizierungsstelle 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 in den folgenden Schritten die richtige Zertifizierungsstelle verwenden, wenn Sie Zertifikate erstellen. 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 bietet eine flexiblere Verwaltung dieser Zertifikate, z. B. eine Zertifikatsrotation.

Spanner-Serverzertifikat erstellen

Spanner Omni-Server verwenden Serverzertifikate, um die Kommunikation miteinander zu verschlüsseln (Kommunikation zwischen Servern).

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 die DNS-Adresse 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 im Verzeichnis certs zwei weitere Dateien erstellt: api.crt und api.key. 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 im Verzeichnis clientcerts die Dateien client.crt und client.key erstellt. Senden Sie diese Dateien an jeden Computer, der eine Verbindung zu 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, um Ihren Server mit TLS zu konfigurieren:

nohup spanner start-single-server \
    --base-dir=BASE_DIR \
    --certificate-directory=${HOME}/.spanner/certs &

Führen Sie als Nächstes den folgenden Befehl aus, um den Server mit Ihren unterstützten Authentifizierungsmethoden zu starten und zu konfigurieren.

spanner deployment update --secure-mode=true \
    --auth-methods=password,client-certificate --password-protocol=opaque

Informationen zur Interaktion mit Ihrer Bereitstellung finden Sie unter Schritt 7: Mit der Bereitstellung interagieren.

Bereitstellung mit Hochskalierung

Starten Sie bei Bereitstellungen mit Hochskalierung 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 jedem Computer ausgeführt werden, können Sie die Bereitstellung erstellen.

Schritt 5: Bereitstellung mit TLS-Verschlüsselung erstellen

Führen Sie den Befehl spanner deployment create auf einem der Root-Server aus, um die Bereitstellung zu erstellen. Geben Sie das Basisverzeichnis mit dem Flag --base-dir an, um die TLS-Verschlüsselung zu aktivieren. Verwenden Sie dieselbe BASE_DIR, die Sie beim Starten des Root-Servers in dem vorherigen Schritt angegeben haben.

spanner deployment create \
    --config-file=deployment.yaml \
    --base-dir=BASE_DIR

Wenn Sie das Standardpasswort für den admin Nutzer angeben möchten, legen Sie das --admin-password-file Flag auf den Pfad zu einer Datei mit den Berechtigungen 600 fest, die ein gültiges Passwort enthält. Ein gültiges Passwort muss zwischen 8 und 32 Zeichen lang sein und mindestens eines der folgenden Zeichen enthalten:

  • Ein Großbuchstabe
  • Ein Kleinbuchstabe
  • Eine Ziffer
  • Ein Sonderzeichen (keines der oben genannten)

Die Datei deployment.yaml muss die ausgewählten Authentifizierungsmethoden und Ihr Passwortprotokoll enthalten:

deployment_settings:
  security_settings:
    authentication_methods:
      - AUTHENTICATION_METHOD_PASSWORD
      - AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
    password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE

Sie können eine oder mehrere der folgenden Authentifizierungsmethoden angeben:

  • AUTHENTICATION_METHOD_PASSWORD: Passwortauthentifizierung
  • AUTHENTICATION_METHOD_CLIENT_CERTIFICATE: Clientzertifikatsauthentifizierung

Sie können das folgende Passwortprotokoll angeben:

  • PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE: OPAQUE-Protokoll

In der Konsole für jeden Computer 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 Client-Traffic zu verwalten und 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
Lastverteilungsstrategie roundrobin (verteilt Anfragen sequenziell auf die Server)

Schritt 7: Mit der Bereitstellung interagieren

Sie können mit der Spanner Omni CLI von jeder VM aus mit Ihrer Spanner Omni-Bereitstellung interagieren .

Sie müssen jedes Mal das folgende Flag in den 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 außerdem jedes Mal das folgende Flag in den Befehl ein:

  • --client-certificate-directory=clientcerts

So melden Sie sich an und interagieren mit Ihrer Bereitstellung:

  1. In Spanner Omni anmelden

    spanner auth login admin \
        --ca-certificate-file=certs/ca-api.crt \
        --deployment-endpoint=ENDPOINT
    

    Das Standardpasswort ist admin.

    Successfully logged in as "admin"
    
  2. Datenbank erstellen

    spanner --deployment-endpoint=ENDPOINT databases create mydb --ca-certificate-file=certs/ca-api.crt
    
    Creating database...done.
    
  3. SQL-Shell öffnen

    spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crt
    
    Connected.
    spanner>
    
  4. 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)
    
  5. Daten überprüfen

    Datenbanken auflisten:

    spanner databases list --ca-certificate-file=certs/ca-api.crt
    
    NAME  STATE  VERSION_RETENTION_PERIOD  EARLIEST_VERSION_TIME  KMS_KEY_NAME  ENABLE_DROP_PROTECTION
    mydb  READY  1h                        2025-02-07T12:25:30Z                 false
    

    Daten aus der Tabelle abrufen:

    spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crt
    
    Connected.
    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 unter 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

Nächste Schritte