Questo documento descrive come aggiungere la crittografia TLS a un deployment di Spanner Omni sulle macchine virtuali (VM). Un deployment con funzionalità di sicurezza di rete utilizza Transport Layer Security (TLS) 1.3 per criptare e autenticare la comunicazione all'interno del deployment e con i relativi client. Spanner Omni fornisce mutual TLS (mTLS) per una maggiore sicurezza, in cui entrambe le parti stabiliscono l'autenticità prima di scambiare dati. mTLS è facoltativo tra il client e il server, ma i server Spanner Omni comunicano tra loro tramite mTLS.
La versione di anteprima di Spanner Omni non supporta la crittografia TLS e smette di scrivere dati 90 giorni dopo la creazione di un deployment. Per l'accesso anticipato alla versione con funzionalità complete, contatta Google.
Prima di iniziare
Prima di iniziare, assicurati che il tuo ambiente soddisfi i seguenti requisiti:
Assicurati di avere l'accesso SSH a ogni macchina nel deployment. Questo accesso ti consente di scaricare ed eseguire il file binario di Spanner Omni.
La rete deve consentire la comunicazione TCP sulle porte da 15000 a 15025.
Ogni macchina deve disporre di spazio di archiviazione sufficiente per ospitare i dati gestiti dal deployment.
Consulta la pagina Requisiti di sistema per assicurarti che la tua configurazione soddisfi i requisiti.
Se esegui i file binari sulla piattaforma di virtualizzazione vSphere, disattiva la virtualizzazione TSC. Per farlo, aggiungi l'impostazione
monitor_control.virtual_rdtsc = FALSEal file di configurazione.vmxdella macchina virtuale.
Passaggio 1: crea un deployment senza crittografia TLS
Segui i passaggi descritti in Creare un deployment di VM Spanner Omni senza crittografia. Verifica che il deployment di VM senza crittografia e funzionalità di sicurezza funzioni correttamente. Questa pagina presuppone che tu abbia creato un deployment regionale con tre zone.
Passaggio 2: genera i certificati
Devi creare tre set di certificati:
| Tipo di certificato | Descrizione |
|---|---|
| Certificati API | I certificati API contribuiscono a proteggere il server API Spanner. |
| Certificati server | I certificati server contribuiscono a proteggere la comunicazione tra i server. |
| Certificati client | Gli utenti finali o le applicazioni utilizzano i certificati client 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 e tutti e tre i tipi di certificati. Esegui i passaggi seguenti su una delle tue macchine.
Puoi creare questi certificati sulla tua workstation utilizzando Spanner Omni CLI e poi trasferire i file dei certificati a ogni server Spanner Omni. Per ulteriori informazioni, consulta la Guida rapida all'utilizzo di Spanner Omni CLI.
Per generare i certificati, devi completare i seguenti passaggi:
Crea un'autorità di certificazione (CA)
Questa autorità è la CA radice per tutti i certificati client e server che generi nei passaggi seguenti.
spanner certificates create-ca --ca-certificate-directory=certs
La directory certs contiene il certificato CA. Crea una copia di questo certificato da utilizzare come CA per i certificati API.
cp certs/ca.crt certs/ca-api.crt
La directory $HOME/.spanner/private-keys contiene la chiave privata per la CA.
Esegui il backup e proteggi questa directory. Un utente con accesso alla chiave privata può firmare certificati arbitrari di cui si fidano i client che si fidano della CA autofirmata.
Sebbene tu possa utilizzare la stessa CA per tutti i certificati, è obbligatorio che i certificati API e i certificati client utilizzino la stessa CA. Facoltativamente, puoi creare una CA aggiuntiva (o utilizzare una CA attendibile esternamente) per i certificati API.
Assicurati di utilizzare la CA corretta nei passaggi seguenti durante la creazione dei certificati. Questo documento utilizza la stessa CA per tutti i tipi di certificati.
Genera certificati server
Genera due tipi di certificati server:
Certificato server Spanner: cripta la comunicazione tra i server Spanner Omni.
Certificato API: cripta la comunicazione dai sistemi che interagiscono con il deployment.
Questa configurazione offre una gestione più flessibile di questi certificati, ad esempio una rotazione dei certificati.
Crea il certificato server Spanner
I server Spanner Omni utilizzano i certificati server per criptare la comunicazione tra loro (comunicazione tra server).
Crea il certificato server eseguendo il comando seguente. Sostituisci SERVER_LIST con un elenco separato da virgole di nomi o suffissi dei server Spanner.
SERVER_NAMES=SERVER_LIST
spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Questo comando crea due file, server.crt e server.key, nella directory certs.
Crea il certificato API
I certificati API criptano la comunicazione dai sistemi che interagiscono con il deployment. L'utilizzo di certificati separati per l'API e la comunicazione tra server consente di gestire e ruotare ogni tipo in modo indipendente.
Crea il certificato API eseguendo il comando seguente. Sostituisci LB_DNS con il DNS del bilanciatore del carico.
SERVER_NAMES=LB_DNS
spanner certificates create-server --filename-prefix=api --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Questo comando crea altri due file, api.crt e api.key, nella directory certs. Se necessario, puoi utilizzare una CA attendibile esternamente per i certificati API.
Distribuisci i certificati a tutti i server
Copia la directory certs in tutti gli altri server del deployment per avviarli con le funzionalità di sicurezza di rete.
scp -r certs REMOTE_HOST:SPANNER_DIR/certs
Passaggio 3: genera i certificati client
Puoi utilizzare i certificati client per autenticare utenti e applicazioni in Spanner. I certificati client abilitano mTLS tra il client e il server.
I certificati client devono essere firmati dalla stessa CA del certificato API e devono contenere un nome utente per l'autorizzazione. Questo esempio utilizza l'utente admin, che è l'utente predefinito per ogni database. Per ulteriori informazioni su
utenti, ruoli e opzioni di autenticazione, consulta
Autenticazione e autorizzazione in Spanner Omni.
USERNAME=admin
spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Questo comando crea i file client.crt e client.key nella directory clientcerts. Invia questi file a qualsiasi macchina che si connette ai server del 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
spanner certificates create-client $USERNAME \
--output-directory clientcerts \
--ca-certificate-directory certs \
--generate-pkcs8-key
Passaggio 4: riavvia i server
Dopo aver generato i certificati e averli copiati in tutti i server del deployment, riavvia ogni server.
Deployment di un singolo server
Per i deployment di un singolo server, esegui il comando seguente per configurare il server con TLS:
nohup spanner start-single-server \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs &
Poi, esegui il comando seguente per avviare e configurare il server con i metodi di autenticazione supportati.
spanner deployment update --secure-mode=true \
--auth-methods=password,client-certificate --password-protocol=opaque
Per informazioni su come interagire con il deployment, consulta Passaggio 7: interagisci con il deployment.
Deployment con scalabilità orizzontale
Per i deployment con scalabilità orizzontale, avvia il server su ogni macchina. I valori di server-address e zone devono corrispondere ai valori nella configurazione del deployment. La rete deve risolvere server-address. I server utilizzano server-address per la comunicazione interna. Esegui il comando seguente per avviare il server radice:
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs &
Il comando seguente mostra un esempio con valori specifici:
nohup spanner start \
--root \
--server-address=rootserver1 \
--zone=us-central-1a \
--base-dir=./spanbasedir \
--certificate-directory=${HOME}/.spanner/certs &
Ora che i server sono in esecuzione su ogni macchina, puoi creare il deployment.
Passaggio 5: crea un deployment con crittografia TLS
Esegui il comando spanner deployment create da uno dei server radice per creare il deployment. Per abilitare la crittografia TLS, specifica la directory di base con il flag --base-dir. Assicurati di utilizzare lo stesso
BASE_DIR specificato quando hai avviato il server radice in
nel passaggio precedente.
spanner deployment create \
--config-file=deployment.yaml \
--base-dir=BASE_DIR
Per specificare la password predefinita per l'utente admin, imposta il flag
--admin-password-file sul percorso di un file con autorizzazioni 600 che
contiene una password valida. Una password valida deve avere una lunghezza compresa tra 8 e 32 caratteri e includere almeno uno dei seguenti:
- Un carattere maiuscolo
- Un carattere minuscolo
- Un numero
- Un carattere speciale (non uno dei precedenti)
Il file deployment.yaml deve includere i metodi di autenticazione selezionati e il protocollo della password:
deployment_settings:
security_settings:
authentication_methods:
- AUTHENTICATION_METHOD_PASSWORD
- AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE
Puoi specificare uno o più dei seguenti metodi di autenticazione:
AUTHENTICATION_METHOD_PASSWORD: autenticazione con passwordAUTHENTICATION_METHOD_CLIENT_CERTIFICATE: autenticazione con certificato client
Puoi specificare il seguente protocollo della password:
PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE: protocollo OPAQUE
La console di ogni macchina mostra messaggi che indicano che il deployment ora include la crittografia TLS. Tutti i server comunicano tra loro tramite un canale criptato.
Passaggio 6: (facoltativo) configura un bilanciatore del carico
Per gestire e distribuire il traffico client tra i server del deployment, configura un bilanciatore del carico. Assicurati che la configurazione del bilanciatore del carico per il controllo di integrità utilizzi HTTPS anziché HTTP. Utilizza i seguenti dettagli di configurazione:
| Parametro | Valore |
|---|---|
| Protocollo | TCP |
| IP backend | Gli indirizzi IP dei server. |
| Porta | 15000 (questa è la porta predefinita. Se hai utilizzato una porta diversa
porta nel --server-address flag, utilizza quella porta.) |
| URL del controllo di integrità | https://IP_ADDRESS:15012/healthz |
| Strategia di bilanciamento | roundrobin (distribuisce le richieste in sequenza tra i server) |
Passaggio 7: interagisci con il deployment
Puoi interagire con il deployment di Spanner Omni da qualsiasi VM utilizzando la CLI di Spanner Omni.
Devi includere il seguente flag in ogni comando per stabilire una connessione criptata:
--ca-certificate-file=certs/ca-api.crt
Se hai abilitato mTLS per i client, includi anche il seguente flag in ogni comando:
--client-certificate-directory=clientcerts
Per accedere e interagire con il deployment:
Accedi a Spanner Omni
spanner auth login admin \ --ca-certificate-file=certs/ca-api.crt \ --deployment-endpoint=ENDPOINTLa password predefinita è
admin.Successfully logged in as "admin"Crea un database
spanner --deployment-endpoint=ENDPOINT databases create mydb --ca-certificate-file=certs/ca-api.crtCreating database...done.Apri la shell SQL
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner>Crea una tabella e aggiungi dati
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)Verifica i dati
Elenca i database:
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 falseRecupera i dati dalla tabella:
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)
Passaggio 8: (facoltativo) scala il deployment
Puoi aggiungere server non radice a una zona per scalare la capacità della zona. Per farlo, genera il certificato server per i server non radice come spiegato in Passaggio 2: genera i certificati e avvia il server con il comando seguente:
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
Passaggi successivi
- Utilizza le librerie client e i driver JDBC per connettere l'applicazione al deployment.
- Gestisci utenti e ruoli.