Utiliser des certificats SSL avec des modèles

Cette page explique comment préparer les fichiers sur les VM de nœud de calcul Dataflow afin d'utiliser des certificats SSL avec les modèles Java JDBC (Java Database Connectivity) fournis par Google. Vous pouvez également suivre les étapes décrites sur cette page pour préparer les fichiers de manière dynamique sur la VM de nœud de calcul avant le début du traitement.

Préparer des fichiers sur les VM de nœud de calcul

Avec certains modèles, vous pouvez préparer les fichiers sur les VM de nœud de calcul Dataflow en utilisant le paramètre de modèle extraFilesToStage. Utilisez ce paramètre pour préparer les fichiers de manière dynamique sur la VM de nœud de calcul avant le début du traitement des données. Vous pouvez utiliser ce paramètre dans les cas suivants :

  • Stockage des fichiers de certificat et de clé sur chaque nœud de calcul pour les connexions SSL.
  • Comme Dataflow n'offre pas de compatibilité intégrée avec Secret Manager, utilisez ce paramètre pour configurer les modèles afin qu'ils puissent stocker les secrets de Secret Manager et y accéder.

Ce paramètre est disponible dans certains modèles, mais pas dans tous. Pour savoir si le paramètre est disponible avec le modèle que vous utilisez, consultez le tableau des paramètres du modèle pour votre modèle dans la section Modèles de streaming Dataflow fournis par Google ou Modèles par lot Dataflow fournis par Google.

Lorsque vous utilisez ce paramètre, les chemins d'accès Cloud Storage ou les secrets Secret Manager séparés par des virgules sont transmis au nœud de calcul et enregistrés dans le répertoire /extra_files de chaque nœud de calcul. Lorsque les fichiers sont enregistrés dans le répertoire /extra_files, d'autres paramètres peuvent les référencer. Pour référencer les fichiers, spécifiez leur chemin d'accès par rapport au répertoire /extra_files dans les propriétés de configuration.

Tous les fichiers Cloud Storage transmis à l'aide de ce paramètre sont stockés dans le répertoire /extra_files avec le même nom de fichier. Les secrets Secret Manager sont stockés dans le répertoire /extra_files avec le nom du secret utilisé comme nom de fichier.

Par exemple, lorsque vous définissez extraFilesToStage sur le chemin d'accès suivant, les fichiers sont stockés dans le répertoire /extra_files de chaque nœud de calcul avec les noms de fichiers file.txt et SECRET_ID.

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

Configurer les certificats SSL

Avec les modèles qui utilisent JDBC pour lire ou écrire, vous pouvez utiliser le paramètre de modèle extraFilesToStage pour préparer les certificats sous forme de fichiers locaux sur les VM de nœud de calcul, puis référencer le nom de fichier local dans l'URL de connexion JDBC ou dans les propriétés de connexion.

Les connexions SSL JDBC diffèrent en fonction de la base de données. Cette section fournit des exemples pour les bases de données PostgreSQL et MySQL.

Si vous devez définir des propriétés système Java, utilisez JvmInitializer. Vous pouvez utiliser JvmInitializer pour effectuer une initialisation unique sur tous les nœuds de calcul Java Dataflow.

PostgreSQL

Pour les connexions SSL dans des bases de données PostgreSQL, les paramètres suivants sont disponibles : ssl, sslmode, sslcert, sslkey et sslrootcert.

  • Pour spécifier que la connexion doit utiliser SSL et lui indiquer quel mode utiliser, utilisez les paramètres ssl et sslmode.
  • Pour la validation du client, utilisez les paramètres sslcert et sslkey.
  • Pour la validation du serveur, utilisez le paramètre sslrootcert.

Lorsque vous vous connectez à PostgreSQL, définissez les paramètres suivants :

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...

Pour découvrir les paramètres de configuration JDBC PostgreSQL supplémentaires et pour en savoir plus sur les paramètres, consultez la section Paramètres de connexion dans la documentation JDBC PostgreSQL.

MySQL

Pour les connexions SSL dans des bases de données MySQL, les paramètres suivants sont disponibles : sslmode, trustCertificateKeyStoreUrl et clientCertificateKeyStoreUrl.

  • Pour spécifier que la connexion doit utiliser SSL et lui indiquer quel mode utiliser, utilisez le paramètre sslmode.
  • Pour la validation du client, utilisez le paramètre clientCertificateKeyStoreUrl.
  • Pour la validation du serveur, utilisez le paramètre trustCertificateKeyStoreUrl.

Lorsque vous vous connectez à MySQL, définissez les paramètres suivants :

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...

Pour découvrir les paramètres de configuration JDBC MySQL supplémentaires et pour en savoir plus sur les paramètres, consultez la page Connecteurs de sécurité dans la documentation MySQL.

Exemple de connexion SSL

L'exemple suivant montre comment exécuter le modèle Pub/Sub vers JDBC avec des connexions SSL dans une base de données 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"