Usar certificados SSL com modelos

Nesta página, vamos explicar como preparar arquivos em VMs de workers do Dataflow para usar certificados SSL com os modelos de conectividade de banco de dados Java (JDBC, na sigla em inglês) fornecidos pelo Google. Também é possível usar as etapas nesta página para organizar os arquivos dinamicamente na VM do worker antes de iniciar o processamento.

Organizar os arquivos em VMs de workers

Em alguns modelos, é possível organizar arquivos nas VMs de workers do Dataflow usando o parâmetro de modelo extraFilesToStage. Use esse parâmetro para organizar os arquivos dinamicamente na VM de worker antes de o processamento de dados começar. É possível usar esse parâmetro nos seguintes casos:

  • Armazene arquivos de certificados e chaves em cada worker para conexões SSL.
  • Como o Dataflow não inclui suporte integrado ao Secret Manager, use esse parâmetro para configurar modelos a fim de armazenar e acessar secrets do Secret Manager.

Esse parâmetro está disponível em alguns modelos, mas não em todos. Para ver se o parâmetro está disponível com o modelo que você está usando, consulte a tabela de parâmetros do modelo em Modelos de streaming do Dataflow fornecidos pelo Google ouModelos de lote do Dataflow fornecidos pelo Google.

Ao usar esse parâmetro, os caminhos do Cloud Storage separados por vírgula ou os secrets do Secret Manager são transmitidos para o worker e salvos no diretório /extra_files de cada worker. Depois que os arquivos forem salvos no diretório /extra_files, outros parâmetros poderão se referir a eles. Para referenciar os arquivos, nas propriedades de configuração, especifique os caminhos de arquivo referentes ao diretório /extra_files.

Todos os arquivos do Cloud Storage transmitidos com esse parâmetro são armazenados no diretório /extra_files com o mesmo nome de arquivo. Os secrets do Secret Manager são armazenados no diretório /extra_files que tem o nome do arquivo.

Por exemplo, quando você define extraFilesToStage como o caminho a seguir, os arquivos são armazenados no diretório /extra_files de cada worker com os nomes de arquivo file.txt e SECRET_ID.

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

Configurar certificados SSL.

Com os modelos que usam JDBC para ler ou gravar, é possível usar o parâmetro de modelo extraFilesToStage para organizar certificados como arquivos locais em VMs de workers e, depois, referenciar o nome de arquivo local no URL de conexão JDBC ou nas propriedades da conexão.

As conexões SSL JDBC diferem de acordo com o banco de dados. Nesta seção, mostramos exemplos de bancos de dados PostgreSQL e MySQL.

Caso precise definir propriedades do sistema Java, use JvmInitializer. É possível usar JvmInitializer para realizar uma inicialização única em todos os workers Java do Dataflow.

PostgreSQL

Os seguintes parâmetros estão disponíveis para conexões SSL em bancos de dados PostgreSQL: ssl, sslmode, sslcert, sslkey e sslrootcert.

  • Para especificar se a conexão deve usar o SSL e em qual modo, use os parâmetros ssl e sslmode.
  • Para validação do cliente, use os parâmetros sslcert e sslkey.
  • Para validação do servidor, use o parâmetro sslrootcert.

Ao se conectar ao PostgreSQL, defina os seguintes 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 mais parâmetros de configuração do JDBC do PostgreSQL e mais detalhes sobre esses parâmetros, consulte Parâmetros de conexão na documentação do JDBC para PostgreSQL.

MySQL

Os seguintes parâmetros estão disponíveis para conexões SSL em bancos de dados MySQL: sslmode, trustCertificateKeyStoreUrl e clientCertificateKeyStoreUrl.

  • Para especificar se a conexão deve usar o SSL e em qual modo, use o parâmetro sslmode.
  • Para validação do cliente, use o parâmetro clientCertificateKeyStoreUrl.
  • Para validação do servidor, use o parâmetro trustCertificateKeyStoreUrl.

Ao se conectar ao MySQL, defina os seguintes 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 mais detalhes e parâmetros de configuração do JDBC do MySQL, consulte a página Conectores de segurança na documentação do MySQL.

Exemplo de conexão SSL

Veja no exemplo a seguir como executar o modelo Pub/Sub para JDBC com conexões SSL em um banco de dados 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"