Apache Beam è un modello unificato open source per definire pipeline di elaborazione parallela dei dati, sia in batch sia in streaming. Questo documento descrive come utilizzare il connettore SpannerIO all'interno di una pipeline Apache Beam per leggere o scrivere in database Spanner Omni.
Prima di iniziare
Per connettere SpannerIO a Spanner Omni, assicurati di soddisfare i seguenti requisiti:
Inizializza un database all'interno dell'ambiente Spanner Omni.
Se utilizzi la crittografia, assicurati di utilizzare una versione compatibile di Apache Beam:
- Per la crittografia TLS, versione 2.69.0 o successive.
- Per la crittografia TLS reciproca (mTLS), versione 2.75.0 o successive.
Configura le credenziali di autenticazione per il tuo ambiente.
Configura SpannerIO per la connessione a Spanner Omni
Per connettere SpannerIO a Spanner Omni, configura SpannerConfig
con i dettagli del database e i parametri di connessione.
Per configurare la connessione, scegli una delle seguenti modalità di connessione:
- Connessione tramite comunicazione in testo normale
- Connettersi utilizzando la crittografia TLS
- Connettiti utilizzando la crittografia mTLS
Connettersi utilizzando la comunicazione in testo normale
Per stabilire una connessione in testo normale, specifica l'endpoint Spanner Omni, attiva il supporto host sperimentale con il metodo withExperimentalHost() e configura la pipeline con il metodo withUsingPlainTextChannel().
L'esempio seguente mostra come configurare una connessione in testo normale:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the Spanner Omni endpoint
.withExperimentalHost("http://ENDPOINT")
// Use a plain-text connection
.withUsingPlainTextChannel(true);
Sostituisci quanto segue:
DATABASE_ID: l'ID del tuo database Spanner Omni, ad esempiotest-db.ENDPOINT: l'endpoint dell'istanza Spanner Omni, ad esempiolocalhost:15000.
Connettiti utilizzando la crittografia
Per proteggere il traffico del database e garantire una comunicazione sicura tra Apache Beam e Spanner Omni, puoi connetterti utilizzando la crittografia TLS o mTLS. L'utilizzo della crittografia contribuisce a mantenere riservate le tue credenziali e i tuoi dati.
Utilizzare la crittografia TLS
Per proteggere il traffico del database tra Apache Beam e Spanner Omni
utilizzando la crittografia TLS, non è necessario specificare le proprietà delle credenziali in
SpannerConfig. Configura invece un truststore Java con il certificato CA Spanner Omni e poi configura SpannerConfig per utilizzare l'endpoint TLS sicuro.
Passaggio 1: configura il truststore Java
Per proteggere la comunicazione, devi importare il certificato CA generato da Spanner Omni in un truststore Java. Utilizza una delle seguenti opzioni:
Truststore Java predefinita
Aggiungi il certificato CA generato da Spanner Omni all'archivio attendibile Java standard eseguendo il seguente comando:
sudo keytool -import -trustcacerts \
-file ~/.spanner/certs/ca.crt \
-alias spanner-ca \
-keystore $JAVA_HOME/lib/security/cacerts
Archivio di attendibilità personalizzato
Per assicurarti che la pipeline possa comunque connettersi ad altri database o servizi che utilizzano autorità di certificazione (CA) standard, crea un truststore personalizzato:
Crea un truststore personalizzato copiando il truststore Java esistente:
cp $JAVA_HOME/lib/security/cacerts PATH_TO_CUSTOM_CA_CERTIFICATEImporta il certificato CA nell'archivio attendibile personalizzato:
keytool -import -trustcacerts \ -file ~/.spanner/certs/ca.crt \ -alias spanner-ca \ -keystore PATH_TO_CUSTOM_CA_CERTIFICATEPassa l'archivio certificati CA personalizzato quando esegui la pipeline:
java -Djavax.net.ssl.trustStore=PATH_TO_CUSTOM_CA_CERTIFICATE \ -Djavax.net.ssl.trustStorePassword=changeit \ -jar PIPELINE_NAME.jar
Sostituisci quanto segue:
PATH_TO_CUSTOM_CA_CERTIFICATE: il percorso dell'archivio di certificati CA personalizzati.PIPELINE_NAME: il nome della pipeline Apache Beam.
Passaggio 2: configura SpannerConfig
Per configurare SpannerConfig in modo che utilizzi una connessione TLS sicura, aggiungi il seguente
codice alla pipeline:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT");
Sostituisci quanto segue:
DATABASE_ID: l'ID del tuo database Spanner Omni, ad esempiotest-db.ENDPOINT: l'endpoint dell'istanza Spanner Omni, ad esempiolocalhost:15000.
Utilizzare la crittografia mTLS
Per stabilire una connessione TLS reciproca (mTLS) utilizzando Apache Beam, devi configurare l'archivio attendibilità Java con il certificato CA, generare o convertire una chiave privata client nel formato PKCS#8 e poi configurare SpannerConfig con il percorso della chiave e del certificato client.
Passaggio 1: configura il truststore Java
Configura il truststore Java con il certificato CA Omni di Spanner come descritto in Passaggio 1: configura il truststore Java in precedenza in questo documento.
Passaggio 2: converti o genera la chiave privata del client
Per connetterti utilizzando mTLS, assicurati che la chiave privata del client sia in formato PKCS#8. Utilizza una delle seguenti opzioni:
openssl
Per convertire la chiave client generata da Spanner Omni in un formato compatibile con Java, esegui questo comando:
openssl pkcs8 -topk8 \
-in ~/.spanner/certs/client.key \
-out ~/.spanner/certs/java-client.key \
-nocrypt
Spanner Omni CLI
Genera la chiave direttamente in formato PKCS#8 quando crei il certificato client utilizzando Spanner Omni CLI con il flag --generate-pkcs8-key.
Per generare un certificato client e una chiave privata client in formato PKCS#8, esegui il comando seguente:
spanner certificates create-client CLIENT_NAME \
--ca-certificate-directory=PATH_TO_CA_CERTIFICATES \
--ca-private-key-directory=PATH_TO_PRIVATE_KEYS \
--output-directory=PATH_TO_CERTIFICATES \
--generate-pkcs8-key
Sostituisci quanto segue:
CLIENT_NAME: il nome del client per cui generare il certificato e la chiave privata.PATH_TO_CA_CERTIFICATES: il percorso della directory contenente i certificati CA.PATH_TO_PRIVATE_KEYS: il percorso della directory contenente le chiavi private della CA.PATH_TO_CERTIFICATES: il percorso della directory in cui vengono salvati il certificato client e la chiave privata.
Passaggio 3: configura SpannerConfig
Configura SpannerConfig nel codice della pipeline con il certificato client
e la chiave privata del client:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT")
// Specify the paths to the client certificate and private key
.withClientCert(
"PATH_TO_CLIENT_CERT",
"PATH_TO_CLIENT_CERT_KEY");
Sostituisci quanto segue:
DATABASE_ID: l'ID del tuo database Spanner Omni, ad esempiotest-db.ENDPOINT: l'endpoint dell'istanza Spanner Omni, ad esempiolocalhost:15000.PATH_TO_CLIENT_CERT: il percorso del file del certificato client.PATH_TO_CLIENT_CERT_KEY: il percorso del file della chiave privata del client.
Configura i token di autenticazione
I token di autenticazione non sono consigliati per l'utilizzo da parte dei client perché i token
generati da Spanner Omni scadono e richiedono il rinnovo manuale
con la CLI Spanner Omni. Per utilizzare un token di autenticazione con una configurazione TLS o mTLS per un endpoint Spanner Omni, imposta la variabile di ambiente SPANNER_EXPERIMENTAL_HOST_AUTH_TOKEN sul valore del token di autenticazione generato dalla CLI Spanner Omni. Lascia questa
variabile non impostata per le connessioni che non richiedono credenziali.
Passaggi successivi
Utilizza la libreria client Java per connetterti a Spanner Omni.
Comprendere l'autenticazione e l'autorizzazione di Spanner Omni.