Usar certificados SSL con plantillas

En esta página se explica cómo organizar archivos en máquinas virtuales de trabajo de Dataflow para usar certificados SSL con las plantillas de Java Database Connectivity (JDBC) proporcionadas por Google. También puedes seguir los pasos que se indican en esta página para organizar los archivos de forma dinámica en la VM de trabajador antes de que empiece el procesamiento.

Fase de archivos en máquinas virtuales de trabajador

En algunas plantillas, puedes almacenar archivos en máquinas virtuales de trabajador de Dataflow mediante el parámetro de plantilla extraFilesToStage. Usa este parámetro para organizar los archivos de forma dinámica en la VM de trabajador antes de que empiece el procesamiento de datos. Puede usar este parámetro en los siguientes casos:

  • Almacena los archivos de certificado y clave en cada trabajador para las conexiones SSL.
  • Como Dataflow no incluye compatibilidad integrada con Secret Manager, usa este parámetro para configurar plantillas que almacenen secretos de Secret Manager y accedan a ellos.

Este parámetro está disponible en algunas plantillas, pero no en todas. Para ver si el parámetro está disponible en la plantilla que estás usando, consulta la tabla de parámetros de la plantilla en Plantillas de streaming de Dataflow proporcionadas por Google o Plantillas de procesamiento por lotes de Dataflow proporcionadas por Google.

Cuando usas este parámetro, se transfieren al trabajador rutas de Cloud Storage o secretos de Secret Manager separados por comas, que se guardan en el directorio /extra_files de 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 las rutas de los archivos relativas al directorio /extra_files.

Todos los archivos de Cloud Storage que se transfieran mediante este parámetro se almacenarán 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 como nombre de archivo.

Por ejemplo, si asignas extraFilesToStage a la siguiente ruta, los archivos se almacenarán 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

Configurar certificados SSL

En las plantillas que usan JDBC para leer o escribir, puedes usar el parámetro de plantilla extraFilesToStage para almacenar certificados como archivos locales en VMs de trabajador y, a continuación, hacer referencia al nombre de archivo local en la URL de conexión JDBC o en las propiedades de conexión.

Las conexiones SSL de JDBC varían en función de la base de datos. En esta sección se proporcionan ejemplos para bases de datos PostgreSQL y MySQL.

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

PostgreSQL

En las conexiones SSL de bases de datos 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 se debe usar, utiliza 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, define 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 ver más parámetros de configuración de JDBC de PostgreSQL y obtener más información sobre ellos, consulta Parámetros de conexión en la documentación de JDBC de PostgreSQL.

MySQL

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

  • Para especificar que la conexión debe usar SSL y qué modo se debe usar, utiliza 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, define 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 más información sobre los parámetros de configuración de JDBC de MySQL y sobre los parámetros, consulta la página conectores de seguridad de la documentación de MySQL.

Ejemplo de conexión SSL

En el siguiente ejemplo se muestra cómo ejecutar la plantilla 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"