In Spanner Omni wird TLS 1.3 verwendet, 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 erweiterte Sicherheitsfunktionen. Dabei stellen beide Parteien die Authentizität der jeweils anderen Partei fest, 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.
Achten Sie darauf, dass der Kubernetes-Cluster auf das Artifact Registry-Artefakt zugreifen kann, in dem der Spanner Omni-Container gehostet wird.
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
monitor_control.virtual_rdtsc = FALSEin die Konfigurationsdatei.vmxder virtuellen Maschine einfügen. So wird sichergestellt, dass TrueTime richtig funktioniert.Prüfen Sie, ob Ihre Umgebung die Systemanforderungen für Spanner Omni erfüllt.
Schritt 1: Zertifikate generieren
Sie müssen drei Zertifikatsätze erstellen:
API-Zertifikate: Diese tragen zum Schutz des Spanner Omni API-Servers bei.
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 zu bestätigen.
Diese Zertifikate werden von einer Zertifizierungsstelle ausgestellt. Spanner Omni bietet Tools zum Erstellen einer selbst signierten Zertifizierungsstelle und aller drei Zertifikatstypen.
Führen Sie die folgenden Schritte auf einem Ihrer Geräte 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 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, aber API-Zertifikate und Clientzertifikate müssen 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 und als CA für API-Zertifikate verwenden oder eine andere CA 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. Nutzer mit Zugriff auf den privaten Schlüssel können beliebige Zertifikate signieren, denen Clients vertrauen, die der selbstsignierten Zertifizierungsstelle vertrauen. Optional können Sie eine zusätzliche Zertifizierungsstelle erstellen oder eine extern vertrauenswürdige Zertifizierungsstelle für die API-Zertifikate verwenden. In diesem Dokument wird dieselbe Zertifizierungsstelle für alle Arten von Zertifikaten 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 dem Deployment 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. Damit können Sie 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. Wenn Sie mTLS nicht verwenden möchten, können Sie diesen Schritt überspringen.
Die Clientzertifikate müssen von derselben CA signiert werden, die auch das API-Zertifikat signiert. Außerdem müssen sie zur Autorisierung einen Nutzernamen 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 Zertifikatschlü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
Schritt 2: Zertifikate und Administratorpasswort in den Kubernetes-Cluster übertragen
Führen Sie die folgenden Befehle aus, um den Namespace zu erstellen und die Zertifikate und das Administratorpasswort in Ihren Kubernetes-Cluster zu übertragen:
Erstellen Sie den Namespace:
kubectl create namespace NAMESPACETLS-Zertifikate in ein Secret übertragen:
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 NAMESPACEErstellen Sie eine Passwortdatei mit dem Passwort für den Standardnutzer
adminmit eingeschränkten Berechtigungen (nur für den Inhaber lesbar, Berechtigungen 600):printf '%s' 'PASSWORD' > admin_password.txt chmod 600 admin_password.txtDas Passwort muss die folgenden Anforderungen erfüllen:
- Es muss zwischen 8 und 32 Zeichen lang sein.
- 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 Ihr Deployment mit TLS-Verschlüsselung:
1. Helm-Konfiguration vorbereiten
Erstellen Sie eine Helm-Diagrammkonfiguration und erstellen Sie die Bereitstellungskonfiguration für Ihre Umgebung.
Wenn Sie TLS aktivieren und das Administratorpasswort konfigurieren möchten, legen Sie die folgenden Werte in der Konfiguration Ihres Helm-Diagramms 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
Mit dem Befehl wird ein Bootstrap-Job ausgelöst. Sie können den Fortschritt anhand der Logs dieses Jobs verfolgen:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
Die Ausgabe gibt den Fortschritt an. Wenn der Vorgang abgeschlossen ist, wird die Meldung „Bereitstellung erfolgreich erstellt“ 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-Befehlszeile 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 in 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 bei entsprechender 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 Grafana verwenden, um diese Messwerte zu 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.