Spanner Omni verwendet TLS 1.3, um Daten zu verschlüsseln, die zwischen dem Client und dem Server sowie zwischen Spanner Omni-Servern übertragen werden. Spanner Omni bietet mTLS für mehr Sicherheit, wobei beide Parteien die Authentizität der jeweils anderen Partei überprüfen, bevor Daten ausgetauscht werden. Wenn Sie die Verschlüsselung verwenden, müssen Ihre Server über mTLS kommunizieren. Sie können auswählen, ob Ihr Client und Ihr Server auch mTLS verwenden.
Hinweis
Folgende Anforderungen müssen erfüllt sein:
Kubernetes-Cluster erstellen Die Konfiguration unterstützt Google Kubernetes Engine (GKE) und Amazon Elastic Kubernetes Service (Amazon EKS). Möglicherweise müssen Sie die Konfiguration anpassen, damit sie in anderen Umgebungen funktioniert.
Sorgen Sie dafür, dass der Kubernetes-Cluster auf das Artifact Registry-Artefakt zugreifen kann, das den Spanner Omni-Container hostet.
Installieren und konfigurieren Sie das
kubectl-Befehlszeilentool und Helm.Wenn Sie die Kubernetes-Umgebung auf Maschinen der vSphere-Virtualisierungsplattform einrichten, deaktivieren Sie die TSC-Virtualisierung (Time Stamp Counter), indem Sie der
.vmx-Konfigurationsdatei der virtuellen Maschinemonitor_control.virtual_rdtsc = FALSEhinzufügen. So wird sichergestellt, dass TrueTime korrekt funktioniert.Prüfen Sie, ob Ihre Umgebung die Systemanforderungen für Spanner Omni erfüllt.
Schritt 1: Zertifikate generieren
Sie müssen drei Zertifikatssätze erstellen:
API-Zertifikate: Diese helfen, den Spanner Omni API-Server zu schützen.
Serverzertifikate: Diese schützen die Kommunikation zwischen Servern.
Clientzertifikate: Endnutzer oder Anwendungen verwenden diese, 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 selbst signierten Zertifizierungsstelle und aller drei Zertifikatstypen.
Führen Sie die folgenden Schritte auf einem Ihrer Computer aus. Bei den Schritten wird davon ausgegangen, dass der Namespace spanner-ns ist. Ändern Sie dies in den Namespace, den Sie in Ihrem Deployment verwenden möchten.
Sie können diese Zertifikate auf Ihrer Workstation mit der Spanner Omni CLI erstellen.
1. Zertifizierungsstelle erstellen
Alle Zertifikate werden von einer Zertifizierungsstelle (Certificate Authority, CA) ausgestellt. Ihre Organisation hat möglicherweise eine zentrale Zertifizierungsstelle oder Sie können eine öffentliche Zertifizierungsstelle verwenden. Sie können zwar dieselbe Zertifizierungsstelle für alle Zertifikate verwenden, API-Zertifikate und Clientzertifikate müssen jedoch dieselbe Zertifizierungsstelle verwenden.
Mit Spanner Omni können Sie eine private Zertifizierungsstelle erstellen.
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certs
Mit dem Befehl create-ca wird das CA-Zertifikat im Verzeichnis certs generiert.
Sie können dieses Zertifikat entweder kopieren, um es als Zertifizierungsstelle für API-Zertifikate zu verwenden, oder eine andere Zertifizierungsstelle erstellen. Achten Sie darauf, dass Sie beim Erstellen von Zertifikaten die richtige Zertifizierungsstelle 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.
Es ist wichtig, dieses Verzeichnis zu sichern und zu schützen. Nutzer mit Zugriff auf den privaten Schlüssel können beliebige Zertifikate signieren, denen Clients vertrauen, die der selbst signierten Zertifizierungsstelle vertrauen. Optional können Sie eine zusätzliche Zertifizierungsstelle erstellen (oder eine extern vertrauenswürdige Zertifizierungsstelle verwenden) für die API-Zertifikate. In diesem Dokument wird für alle Zertifikatstypen dieselbe Zertifizierungsstelle verwendet.
2. Serverzertifikate generieren
Sie müssen zwei Arten von Serverzertifikaten generieren:
API-Zertifikat: Verwenden Sie dieses Zertifikat, um die Kommunikation von Systemen zu verschlüsseln, die mit der Bereitstellung interagieren.
Spanner-Serverzertifikat: Spanner Omni-Server verwenden dieses Zertifikat, um die Kommunikation untereinander zu verschlüsseln.
Diese Konfiguration bietet Flexibilität bei der Verwaltung dieser Zertifikate. Sie können damit beispielsweise die Zertifikatsrotation verwenden.
Spanner-Serverzertifikat erstellen
Führen Sie den folgenden Befehl aus, um das Serverzertifikat zu erstellen:
# Comma-separate names of the Spanner servers; wildcards are supported.
SERVER_NAMES=*.pod.NAMESPACE
./google/spanner/bin/spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Mit diesem Befehl werden server.crt und server.key im Verzeichnis certs erstellt.
API-Zertifikat erstellen
Führen Sie den folgenden Befehl aus, um das API-Zertifikat zu erstellen:
OMNI_ENDPOINT=spanner.NAMESPACE
./google/spanner/bin/spanner certificates create-server --filename-prefix=api --hostnames=${OMNI_ENDPOINT} --ca-certificate-directory certs --output-directory certs
Mit diesem Befehl werden api.crt und api.key im Verzeichnis certs erstellt. Verwenden Sie bei Bedarf eine extern vertrauenswürdige Zertifizierungsstelle für die API-Zertifikate.
3. Clientzertifikate generieren
Sie können Clientzertifikate verwenden, um Nutzer und Anwendungen zu authentifizieren. Clientzertifikate ermöglichen mTLS zwischen dem Client und dem Server. Sie können diesen Schritt überspringen, wenn Sie mTLS nicht verwenden möchten.
Die Clientzertifikate müssen von derselben Zertifizierungsstelle signiert werden, die auch das API-Zertifikat signiert. Außerdem müssen sie einen Nutzernamen für die Autorisierung enthalten. Verwenden Sie für dieses Beispiel den Nutzer admin, der der Standardnutzer für jede neue Datenbank ist. Weitere Informationen finden Sie unter Authentifizierung und Autorisierung in Spanner Omni.
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Mit diesem Befehl werden client.crt und client.key im Verzeichnis clientcerts erstellt. Senden Sie diese Dateien an alle Computer, die eine Verbindung zum Deployment herstellen.
Wenn Sie 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
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs --generate-pkcs8-key
4. Wrapper-Schlüsselsatz generieren
Spanner Omni verwendet ein KEK-Wrapper-Schlüsselset (Key Encryption Key), das in jedem Server-Pod unter /spanner/kms/wrapper_key bereitgestellt wird, um interne Schlüssel wie Tokenverschlüsselungs- und Signaturschlüssel zu verschlüsseln.
Führen Sie den folgenden Befehl aus, um mit spanner keys create-keyset eine neue Wrapper-Schlüsselsatzdatei zu generieren:
./google/spanner/bin/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.
Schritt 2: Zertifikate, Wrapper-Schlüsselsatz und Administratorpasswort an den Kubernetes-Cluster übertragen
Führen Sie die folgenden Befehle aus, um den Namespace zu erstellen und die Zertifikate, das Wrapper-Schlüsselset und das Administratorpasswort per Push in Ihren Kubernetes-Cluster zu übertragen:
Erstellen Sie den Namespace:
kubectl create namespace NAMESPACEÜbertragen Sie die TLS-Zertifikate per Push in ein Secret:
kubectl create secret generic tls-certs \ --from-file=ca.crt="certs/ca.crt" \ --from-file=ca-api.crt="certs/ca-api.crt" \ --from-file=server.crt="certs/server.crt" \ --from-file=server.key="certs/server.key" \ --from-file=api.crt="certs/api.crt" \ --from-file=api.key="certs/api.key" \ -n NAMESPACEÜbertragen Sie das Wrapper-Schlüsselset an ein Secret (
wrapper-key), das in jedem Server-Pod unter/spanner/kmsbereitgestellt wird:kubectl create secret generic wrapper-key \ --from-file=wrapper_key="kms/wrapper_key" \ -n NAMESPACEErstellen Sie eine Passwortdatei mit dem Passwort für den Standardnutzer
adminmit eingeschränkten Berechtigungen (nur vom Inhaber lesbar, Berechtigungen 600):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.
Erstellen Sie ein Secret für das Administratorpasswort:
kubectl create secret generic spanner-admin-password \ --from-file=password=admin_password.txt \ -n NAMESPACE
Schritt 3: Bereitstellung mit TLS-Verschlüsselung erstellen
So erstellen Sie ein Deployment mit TLS-Verschlüsselung:
1. Helm-Konfiguration vorbereiten
Weitere Informationen finden Sie unter Helm-Diagrammkonfiguration erstellen. Erstellen Sie die Bereitstellungskonfiguration für Ihre Umgebung.
Wenn Sie TLS aktivieren und das Administratorpasswort konfigurieren möchten, legen Sie in der Helm-Diagrammkonfiguration die folgenden Werte fest:
# Enables TLS
global:
insecureMode: false
# Enables client certificate authentication (mTLS)
deployment:
enableClientCertificateAuthentication: true
# Name of the secret containing the administrator password
adminPasswordSecret: spanner-admin-password
2. Bereitstellung erstellen
Führen Sie den folgenden Befehl aus, um das Deployment zu erstellen:
kubectl create ns monitoring
helm upgrade --install spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni \
--version VERSION \
--set global.platform=gke \
--set global.insecureMode=false \
--set deployment.enableClientCertificateAuthentication=true \
--set deployment.adminPasswordSecret=spanner-admin-password \
--namespace NAMESPACE \
--set monitoring.enabled=true
Der Befehl löst einen Bootstrap-Job aus. Sie können den Fortschritt anhand der Logs dieses Jobs verfolgen:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
Die Ausgabe zeigt den Fortschritt an. Wenn der Vorgang abgeschlossen ist, wird die Meldung „Deployment created successfully“ angezeigt.
3. Status der Pods prüfen
Führen Sie den folgenden Befehl aus, um den Pod-Status zu prüfen:
kubectl get pods --watch --namespace NAMESPACE
Alle Pods haben den Status READY.
4. Zertifikat und Bereitstellung mit Load-Balancer-Details aktualisieren
Dieser Schritt ist erforderlich, wenn Clients von außerhalb des Kubernetes-Clusters eine Verbindung herstellen sollen.
# Get the service details
kubectl get service spanner -n NAMESPACE
# The EXTERNAL-IP:PORT is the API or deployment endpoint for your deployment.
# Update the API certificate with these details.
OMNI_ENDPOINT=EXTERNAL_IP,spanner.NAMESPACE.svc
./google/spanner/bin/spanner certificates update \
--certificate-file=certs/api.crt \
--certificate-key-file=certs/api.key \
--hostnames=${OMNI_ENDPOINT} \
--ca-certificate-directory=certs
# Update the secrets in Kubernetes
kubectl patch secret tls-certs -n NAMESPACE -p "{\"data\":{\"api.crt\":\"$(base64 -w 0 certs/api.crt)\"}}"
Schritt 4: Mit Spanner Omni interagieren
Sie können von jeder VM aus über die Spanner Omni CLI mit Ihrer Spanner Omni-Bereitstellung interagieren.
Wenn Sie mTLS für Clients aktiviert haben, verwenden Sie die folgenden Flags mit jedem Befehl:
--client-certificate-directory=CLIENT_CERTIFICATE_DIRECTORY--ca-certificate-file=API_CA_CERT_FILE_PATH
1. In Spanner Omni anmelden (optional)
Melden Sie sich bei Spanner Omni an (dieser Schritt ist optional, wenn Sie Clientzertifikate verwenden):
./google/spanner/bin/spanner auth login admin \
--ca-certificate-file=certs/ca-api.crt \
--deployment-endpoint=DEPLOYMENT_ENDPOINT
Geben Sie nach Aufforderung das in admin_password.txt konfigurierte Passwort ein.
Successfully logged in as "admin"
2. Datenbank erstellen
Führen Sie den folgenden Befehl aus, um eine Datenbank zu erstellen:
./google/spanner/bin/spanner --deployment-endpoint=DEPLOYMENT_ENDPOINT databases create DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
3. SQL Shell öffnen
Führen Sie den folgenden Befehl aus, um die Shell zu öffnen:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --deployment-endpoint=DEPLOYMENT_ENDPOINT --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
4. Tabelle erstellen und Daten hinzufügen
Führen Sie die folgenden SQL-Befehle aus:
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. Deployment prüfen
Führen Sie den folgenden Befehl aus, um die Datenbanken aufzulisten:
./google/spanner/bin/spanner databases list --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Die Ausgabe sieht dann ungefähr so aus:
| NAME | STATUS | VERSION_RETENTION_PERIOD | EARLIEST_VERSION_TIME | ENABLE_DROP_PROTECTION |
|---|---|---|---|---|
| DATABASE_NAME | BEREIT | 1 Std. | 2025-02-07T12:25:30Z | falsch |
Führen Sie den folgenden Befehl aus, um die Daten abzufragen:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Führen Sie die folgenden SQL-Befehle aus:
SHOW TABLES;
SELECT * FROM names;
Alternativ können Sie der Anleitung unter PGAdapter mit Spanner Omni verwenden folgen, um PGAdapter zu konfigurieren und mit Tools wie psql zu interagieren.
Schritt 5: Bereitstellung überwachen
Wenn Sie Spanner Omni mit monitoring.enabled=true installiert haben, werden Messwerte von Prometheus erfasst. Sie können diese Messwerte mit Grafana visualisieren.
1. Dienstdetails abrufen
Führen Sie die folgenden Befehle aus, um die Dienstdetails abzurufen:
# Prometheus service details. Default port is 9090.
kubectl get service prometheus-service -n monitoring
# Grafana service details. Default port is 3000.
kubectl get service grafana -n monitoring
Nächste Schritte
- Verwenden Sie Clientbibliotheken und JDBC-Treiber, um Ihre Anwendung mit der Bereitstellung zu verbinden.
- Nutzer und Rollen verwalten