Utilizzare i certificati SSL con i modelli

Questa pagina spiega come eseguire il commit dei file sulle VM di lavoro Dataflow per utilizzare i certificati SSL con i modelli Java Database Connectivity (JDBC) forniti da Google. Puoi anche utilizzare i passaggi descritti in questa pagina per eseguire il commit dei file dinamicamente sulla VM di lavoro prima dell'inizio dell'elaborazione.

Esegui la fase di staging dei file sulle VM worker

Con alcuni modelli, puoi eseguire il commit dei file sulle VM worker Dataflow utilizzando il parametro del modello extraFilesToStage. Utilizza questo parametro per eseguire il commit dei file in modo dinamico sulla VM worker prima dell'inizio dell'elaborazione dei dati. Potresti utilizzare questo parametro nei seguenti casi:

  • Memorizza i file di certificati e chiavi su ogni worker per le connessioni SSL.
  • Poiché Dataflow non include il supporto integrato per Secret Manager, utilizza questo parametro per configurare i modelli per archiviare e accedere ai secret di Secret Manager.

Questo parametro è disponibile in alcuni modelli, ma non in tutti. Per verificare se il parametro è disponibile con il modello in uso, consulta la tabella dei parametri del modello per il tuo modello in Modelli di streaming Dataflow forniti da Google o Modelli batch Dataflow forniti da Google.

Quando utilizzi questo parametro, i percorsi Cloud Storage separati da virgole o i secret di Secret Manager vengono passati al worker e salvati nella directory /extra_files su ogni worker. Quando i file vengono salvati nella directory /extra_files, altri parametri possono farvi riferimento. Per fare riferimento ai file, nelle proprietà di configurazione specifica i percorsi dei file relativi alla directory /extra_files.

Tutti i file Cloud Storage passati utilizzando questo parametro vengono memorizzati nella directory /extra_files con lo stesso nome file. I secret di Secret Manager vengono archiviati nella directory /extra_files con il nome del secret utilizzato come nome del file.

Ad esempio, quando imposti extraFilesToStage sul seguente percorso, i file vengono memorizzati nella directory /extra_files di ciascun worker con i nomi file.txt e SECRET_ID.

gs://BUCKET_NAME/file.txt,projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID

Configura i certificati SSL

Con i modelli che utilizzano JDBC per la lettura o la scrittura, puoi utilizzare il parametro del modello extraFilesToStage per eseguire il commit dei certificati come file locali sulle VM di lavoro e poi fare riferimento al nome file locale nell'URL della connessione JDBC o nelle proprietà di connessione.

Le connessioni JDBC SSL variano in base al database. Questa sezione fornisce esempi per i database PostgreSQL e MySQL.

Se devi impostare le proprietà di sistema Java, utilizza JvmInitializer. Puoi utilizzare JvmInitializer per eseguire un'inizializzazione una tantum su tutti i worker Java Dataflow.

PostgreSQL

Per le connessioni SSL nei database PostgreSQL, sono disponibili i seguenti parametri: ssl, sslmode, sslcert, sslkey e sslrootcert.

  • Per specificare che la connessione deve utilizzare SSL e quale modalità, utilizza i parametri ssl e sslmode.
  • Per la convalida del client, utilizza i parametri sslcert e sslkey.
  • Per la convalida del server, utilizza il parametro sslrootcert.

Quando ti connetti a PostgreSQL, imposta i seguenti parametri:

extraFilesToStage=gs://BUCKET_NAME/root_cert.crt,gs://BUCKET_NAME/cert.crt,gs://BUCKET_NAME/key.key

connectionUrl=jdbc:postgresql://HOST/DATABASE?ssl=true&sslrootcert=/extra_files/root_cert.crt&sslcert=/extra_files/cert.crt&sslkey=/extra_files/key.key&OTHER_PARAMETERS...

Per altri parametri di configurazione JDBC PostgreSQL e ulteriori dettagli sui parametri, consulta Parametri di connessione nella documentazione di JDBC PostgreSQL.

MySQL

Per le connessioni SSL nei database MySQL, sono disponibili i seguenti parametri: sslmode, trustCertificateKeyStoreUrl e clientCertificateKeyStoreUrl.

  • Per specificare che la connessione deve utilizzare SSL e quale modalità, utilizza il parametro sslmode.
  • Per la convalida del client, utilizza il parametro clientCertificateKeyStoreUrl.
  • Per la convalida del server, utilizza il parametro trustCertificateKeyStoreUrl.

Quando ti connetti a MySQL, imposta i seguenti parametri:

extraFilesToStage=gs://BUCKET_NAME/truststore.jks,gs://BUCKET_NAME/cert.crt,gs://BUCKET_NAME/keystore.jks

connectionUrl=jdbc:mysql://HOST/DATABASE?sslmode=REQUIRED&trustCertificateKeyStoreUrl=file:/extra_files/truststore.jks&sslcert=file:/extra_files/keystore.jks&OTHER_PARAMETERS...

Per altri parametri di configurazione JDBC di MySQL e ulteriori dettagli sui parametri, consulta la pagina relativa ai connettori di sicurezza nella documentazione di MySQL.

Esempio di connessione SSL

L'esempio seguente mostra come eseguire il modello Pub/Sub to JDBC con connessioni SSL in un database MySQL.

#!/bin/bash

gcloud config set project PROJECT_ID

echo "Running template ..."
gcloud dataflow flex-template run my-job \
        --template-file-gcs-location="gs://dataflow-templates-REGION_NAME/latest/flex/Pubsub_to_Jdbc" \
--region="REGION" \
--parameters= \
driverClassName="com.mysql.jdbc.Driver",\
connectionUrl="jdbc:mysql://HOST/DATABASE?sslmode=REQUIRED&trustCertificateKeyStoreUrl=file:/extra_files/truststore.jks&sslcert=file:/extra_files/keystore.jks",\
driverJars="gs://BUCKET_NAME/mysql.jar",\
statement="INSERT INTO tableName (column1, column2) VALUES (?,?)",\
inputSubscription="projects/PROJECT_ID/subscriptions/subscription",\
outputDeadletterTopic="projects/PROJECT_ID/topics/topic",\
extraFilesToStage="gs://BUCKET_NAME/truststore.jks,gs://BUCKET_NAME/cert.crt,gs://BUCKET_NAME/keystore.jks"