Usa certificados SSL con plantillas

En esta página, se explica cómo almacenar en etapa intermedia los archivos en VM de trabajador de Dataflow para usar certificados SSL con las plantillas de conectividad de base de datos de Java (JDBC) que proporciona Google. También puedes usar los pasos en esta página para almacenar archivos en etapa intermedia en la VM de trabajador antes de que comience el procesamiento.

Almacena archivos en etapa intermedia en las VM de trabajador

Con algunas plantillas, puedes almacenar en etapa intermedia los archivos en las VM de trabajador de Dataflow mediante el parámetro de plantilla extraFilesToStage. Usa este parámetro para almacenar en etapa intermedia los archivos en la VM de trabajador de forma dinámica antes de que comience el procesamiento de datos. Puedes usar este parámetro en los siguientes casos:

  • Almacena certificados y archivos de claves en cada trabajador para las conexiones SSL.
  • Debido a que Dataflow no incluye compatibilidad integrada para Secret Manager, usa este parámetro a fin de configurar plantillas para almacenar y acceder a secretos de Secret Manager.

Este parámetro está disponible en algunas plantillas, pero no en todas. Para ver si el parámetro está disponible con la plantilla que usas, consulta la tabla de parámetros de plantilla de tu plantilla en las plantillas de transmisión de Dataflow proporcionadas por Google o Plantillas por lotes de Dataflow proporcionadas por Google.

Cuando usas este parámetro, las rutas de acceso de Cloud Storage separadas por comas o los secretos de Secret Manager se pasan al trabajador y se guardan en el directorio /extra_files en cada trabajador. Cuando los archivos se guardan en el directorio /extra_files, otros parámetros pueden hacer referencia a ellos. Para hacer referencia a los archivos, en las propiedades de configuración, especifica rutas de archivos relacionadas con el directorio /extra_files.

Todos los archivos de Cloud Storage que se pasan con este parámetro se almacenan en el directorio /extra_files con el mismo nombre de archivo. Los secretos de Secret Manager se almacenan en el directorio /extra_files con el nombre del secreto que se usa como nombre del archivo.

Por ejemplo, cuando configuras extraFilesToStage en la siguiente ruta de acceso, los archivos se almacenan en el directorio /extra_files de cada trabajador con los nombres de archivo file.txt y SECRET_ID.

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

Configura certificados SSL

Con las plantillas que usan JDBC para leer o escribir, puedes usar elextraFilesToStage parámetro de plantilla para almacenar en etapa intermedia los certificados como archivos locales en las VM de trabajador y, luego, hacer referencia al nombre del archivo local en la URL de conexión de JDBC o en las propiedades de la conexión.

Las conexiones SSL de JDBC difieren según la base de datos. En esta sección, se proporcionan ejemplos de bases de datos de PostgreSQL y MySQL.

Si necesitas configurar las propiedades del sistema de Java, usa JvmInitializer. Puedes usar JvmInitializer para realizar una inicialización única en todos los trabajadores de Dataflow Java.

PostgreSQL

Para las conexiones SSL en bases de datos de PostgreSQL, están disponibles los siguientes parámetros: ssl, sslmode, sslcert, sslkey y sslrootcert.

  • Para especificar que la conexión debe usar SSL y qué modo usar, usa los parámetros ssl y sslmode.
  • Para la validación del cliente, usa los parámetros sslcert y sslkey.
  • Para la validación del servidor, usa el parámetro sslrootcert.

Cuando te conectes a PostgreSQL, configura los siguientes parámetros:

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

Para conocer parámetros de configuración adicionales de JDBC de PostgreSQL y más detalles sobre los parámetros, consulta Parámetros de conexión en la documentación de PostgreSQL de JDBC.

MySQL

Para las conexiones SSL en las bases de datos de MySQL, los siguientes parámetros están disponibles: sslmode, trustCertificateKeyStoreUrl y clientCertificateKeyStoreUrl.

  • Para especificar que la conexión debe usar SSL y qué modo usar, usa el parámetro sslmode.
  • Para la validación del cliente, usa el parámetro clientCertificateKeyStoreUrl.
  • Para la validación del servidor, usa el parámetro trustCertificateKeyStoreUrl.

Cuando te conectes a MySQL, configura los siguientes parámetros:

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

Para obtener parámetros de configuración de JDBC adicionales en MySQL y más detalles sobre los parámetros, consulta la página Conectores de seguridad en la documentación de MySQL.

Ejemplo de conexión SSL

En el siguiente ejemplo, se muestra cómo ejecutar la plantilla de Pub/Sub a JDBC con conexiones SSL en una base de datos 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"