Spanner Omni utilizza TLS 1.3 per criptare i dati che transitano tra il client e il server e tra i server Spanner Omni. Spanner Omni fornisce mTLS per una maggiore sicurezza, in cui entrambe le parti stabiliscono l'autenticità reciproca prima di scambiare dati. Se utilizzi la crittografia, i server devono comunicare tramite mTLS. Puoi scegliere se il client e il server utilizzano anche mTLS.
La versione di anteprima di Spanner Omni non supporta la crittografia TLS. Per ottenere le funzionalità che consentono di creare deployment con la crittografia TLS, contatta Google per richiedere l'accesso anticipato alla versione completa di Spanner Omni.
Prima di iniziare
Assicurati di soddisfare i seguenti requisiti:
Crea un cluster Kubernetes. La configurazione supporta Google Kubernetes Engine (GKE) e Amazon Elastic Kubernetes Service (Amazon EKS). Potresti dover personalizzare la configurazione per utilizzarla in altri ambienti.
Assicurati che il cluster Kubernetes possa accedere all'artefatto di Artifact Registry che ospita il container Spanner Omni.
Installa e configura lo
kubectlstrumento a riga di comando e Helm.Se configuri l'ambiente Kubernetes sulle macchine della piattaforma di virtualizzazione vSphere, disattiva la virtualizzazione del contatore di timestamp (TSC) aggiungendo
monitor_control.virtual_rdtsc = FALSEal file di configurazione.vmxdella macchina virtuale. In questo modo, TrueTime funziona correttamente.Verifica che il tuo ambiente soddisfi i requisiti di sistema di Spanner Omni .
Passaggio 1: genera i certificati
Devi creare tre set di certificati:
Certificati API: aiutano a proteggere il server API Spanner Omni.
Certificati server: aiutano a proteggere la comunicazione tra server.
Certificati client: gli utenti finali o le applicazioni li utilizzano per stabilire la propria identità e attendibilità con i server Spanner Omni.
Questi certificati vengono emessi da un'autorità di certificazione (CA). Spanner Omni fornisce strumenti per creare una CA autofirmata e tutti e tre i tipi di certificati.
Esegui i passaggi seguenti su una delle tue macchine. I passaggi presuppongono che lo spazio dei nomi sia spanner-ns. Modifica questo valore con lo spazio dei nomi che intendi utilizzare nel deployment.
Puoi creare questi certificati sulla tua workstation utilizzando la CLI Spanner Omni.
1. Crea un'autorità di certificazione (CA)
Tutti i certificati vengono emessi da un'autorità di certificazione (CA). La tua organizzazione potrebbe avere una CA centrale oppure puoi utilizzare una CA pubblica. Anche se puoi utilizzare la stessa CA per tutti i certificati, i certificati API e i certificati client devono utilizzare la stessa CA.
Spanner Omni ti consente di creare una CA privata.
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certs
Il comando create-ca genera il certificato CA nella directory certs.
Puoi copiare questo certificato per utilizzarlo come CA per i certificati API oppure creare una CA diversa. Assicurati di utilizzare la CA corretta quando crei i certificati.
cp certs/ca.crt certs/ca-api.crt
La directory $HOME/.spanner/private-keys contiene la chiave privata per la CA.
È fondamentale eseguire il backup e proteggere questa directory. Gli utenti con accesso alla chiave privata possono firmare certificati arbitrari che i client che si fidano della CA autofirmata considerano attendibili. Facoltativamente, puoi creare una CA aggiuntiva (o utilizzare una CA attendibile esternamente) per i certificati API. Questo documento utilizza la stessa CA per tutti i tipi di certificati.
2. Genera i certificati server
Devi generare due tipi di certificati server:
Certificato API: utilizza questo certificato per criptare la comunicazione dai sistemi che interagiscono con il deployment.
Certificato server Spanner: i server Spanner Omni utilizzano questo certificato per criptare la comunicazione tra loro.
Questa configurazione offre flessibilità nella gestione di questi certificati. Ad esempio, ti consente di utilizzare la rotazione dei certificati.
Crea il certificato server Spanner
Per creare il certificato server, esegui questo comando:
# 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
Questo comando crea server.crt e server.key nella directory certs.
Crea il certificato API
Per creare il certificato API, esegui questo comando:
OMNI_ENDPOINT=spanner.NAMESPACE
./google/spanner/bin/spanner certificates create-server --filename-prefix=api --hostnames=${OMNI_ENDPOINT} --ca-certificate-directory certs --output-directory certs
Questo comando crea api.crt e api.key nella directory certs. Se necessario, utilizza una CA attendibile esternamente per i certificati API.
3. Genera i certificati client
Puoi utilizzare i certificati client per autenticare utenti e applicazioni. I certificati client abilitano mTLS tra il client e il server. Puoi saltare questo passaggio se non prevedi di utilizzare mTLS.
La stessa CA che firma il certificato API deve firmare i certificati client, che devono contenere anche un nome utente per l'autorizzazione. Per questo esempio, utilizza l'utente admin, che è l'utente predefinito per ogni nuovo database. Per saperne di più, consulta
Autenticazione e autorizzazione in Spanner Omni.
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Questo comando crea client.crt e client.key nella directory clientcerts. Invia questi file a qualsiasi macchina che si connette al deployment.
Se prevedi di utilizzare i certificati client con la libreria client Java, devi generare la chiave del certificato in formato PKCS#8. Utilizza il seguente comando:
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs --generate-pkcs8-key
Passaggio 2: esegui il push dei certificati nel cluster Kubernetes
Esegui questi comandi per eseguire il push dei certificati nel cluster Kubernetes:
kubectl create namespace NAMESPACE
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
Passaggio 3: crea il deployment con la crittografia TLS
Segui questi passaggi per creare il deployment con la crittografia TLS.
1. Prepara la configurazione di Helm
Consulta Creare una configurazione del grafico Helm e crea la configurazione del deployment per il tuo ambiente.
Per abilitare TLS, imposta i seguenti valori nella configurazione del grafico Helm:
# Enables TLS
global:
insecureMode: false
# Enables client certificate authentication (mTLS)
deployment:
enableClientCertificateAuthentication: true
2. Crea il deployment
Esegui il comando seguente per creare il deployment:
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 \
--namespace NAMESPACE \
--set monitoring.enabled=true
Il comando attiva un job di bootstrap. Puoi monitorare l'avanzamento guardando i log di questo job:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
L'output indica l'avanzamento. Al termine, viene visualizzato un messaggio che indica che il deployment è stato creato correttamente.
3. Controlla lo stato dei pod
Esegui questo comando per verificare lo stato del pod:
kubectl get pods --watch --namespace NAMESPACE
Tutti i pod sono nello stato READY.
4. Aggiorna il certificato e il deployment con i dettagli del bilanciatore del carico
Questo passaggio è obbligatorio se vuoi che i client si connettano dall'esterno del cluster Kubernetes.
# 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 --filename_prefix=api --hostnames=${OMNI_ENDPOINT} --ca_certificate_directory certs --output_directory certs --overwrite
# Update the secrets in Kubernetes
kubectl patch secret tls-certs -n NAMESPACE -p "{\"data\":{\"api.crt\":\"$(base64 -w 0 certs/api.crt)\"}}"
Passaggio 4: interagisci con Spanner Omni
Puoi interagire con il deployment di Spanner Omni da qualsiasi VM utilizzando la CLI Spanner Omni.
Se hai abilitato mTLS per i client, utilizza i seguenti flag con ogni comando:
--client-certificate-directory=CLIENT_CERTIFICATE_DIRECTORY--ca-certificate-file=API_CA_CERT_FILE_PATH
1. Accedi a Spanner Omni
Esegui questo comando per accedere:
./google/spanner/bin/spanner auth login admin --ca-certificate-file=certs/ca-api.crt \
--client-certificate_directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
La password predefinita è admin.
Successfully logged in as "admin"
2. Crea un database
Esegui questo comando per creare un database:
./google/spanner/bin/spanner --deployment-endpoint=DEPLOYMENT_ENDPOINT databases create DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
3. Apri la shell SQL
Esegui questo comando per aprire la shell:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --deployment-endpoint=DEPLOYMENT_ENDPOINT --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
4. Crea una tabella e aggiungi dati
Esegui questi comandi SQL:
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. Verifica il deployment
Per elencare i database, esegui questo comando:
./google/spanner/bin/spanner databases list --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
L'output è simile al seguente:
| NAME | STATO | VERSION_RETENTION_PERIOD | EARLIEST_VERSION_TIME | ENABLE_DROP_PROTECTION |
|---|---|---|---|---|
| DATABASE_NAME | PRONTO | 1 ora | 2025-02-07T12:25:30Z | falso |
Per eseguire query sui dati, esegui questo comando:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Esegui questi comandi SQL:
SHOW TABLES;
SELECT * FROM names;
In alternativa, puoi seguire le istruzioni riportate in Utilizzare PGAdapter con
Spanner Omni per configurare PGAdapter e
interagire utilizzando strumenti come psql.
Passaggio 5: monitora il deployment
Se hai installato Spanner Omni con monitoring.enabled=true, Prometheus estrae le metriche. Puoi utilizzare Grafana per visualizzare queste metriche.
1. Recupera i dettagli del servizio
Esegui questi comandi per recuperare i dettagli del servizio:
# 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
Passaggi successivi
- Utilizza le librerie client e i driver JDBC per connettere l'applicazione al deployment.
- Gestisci utenti e ruoli.