テンプレートで SSL 証明書を使用する

このページでは、Google 提供の Java Database Connectivity(JDBC)テンプレートを使用して SSL 証明書を使用するように、Dataflow ワーカー VM にファイルをステージングする方法について説明します。処理を始める前に、このページの手順に沿ってワーカー VM にファイルを動的にステージングすることもできます。

ワーカー VM 上にファイルをステージングする

一部のテンプレートでは、extraFilesToStage テンプレート パラメータを使用して Dataflow ワーカー VM 上のファイルをステージングできます。このパラメータを使用すると、データ処理の開始前にワーカー VM 上にファイルを動的にステージングできます。このパラメータは、次のような場合に使用できます。

  • SSL 接続用の証明書と鍵ファイルを各ワーカーに保存する。
  • Dataflow に Secret Manager のサポートが組み込まれていないため、このパラメータを使用して、Secret Manager の Secret の保存とアクセスを行うテンプレートを構成する。

このパラメータは、すべてのテンプレートで利用できるわけではありません。使用しているテンプレートでパラメータが使用可能かどうかを確認するには、Google 提供の Dataflow ストリーミング テンプレートまたは Google 提供の Dataflow バッチ テンプレートで、テンプレートのテンプレート パラメータ表をご覧ください。

このパラメータを使用すると、カンマ区切りの Cloud Storage パスまたは Secret Manager シークレットがワーカーに渡され、各ワーカーの /extra_files ディレクトリに保存されます。ファイルが /extra_files ディレクトリに保存されると、他のパラメータはそのファイルを参照できます。ファイルを参照するには、構成プロパティで、/extra_files ディレクトリに相対的なファイルパスを指定します。

このパラメータで渡された Cloud Storage ファイルは、すべて同じファイル名で /extra_files ディレクトリに保存されます。Secret Manager シークレットは、ファイル名として使用されるシークレット名で /extra_files ディレクトリに保存されます。

たとえば、次のパスに extraFilesToStage を設定すると、ファイルは file.txtSECRET_ID というファイル名で各ワーカーの /extra_files ディレクトリに保存されます。

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

SSL 証明書を構成する

JDBC を使用して読み取りと書き込みを行うテンプレートでは、extraFilesToStage テンプレート パラメータを使用して、ワーカー VM で証明書をローカル ファイルとしてステージングし、JDBC 接続 URL または接続プロパティでローカル ファイル名を参照します。

JDBC SSL 接続はデータベースによって異なります。このセクションでは、PostgreSQL データベースと MySQL データベースの例を示します。

Java システム プロパティを設定する必要がある場合は、JvmInitializer を使用します。JvmInitializer を使用すると、すべての Dataflow Java ワーカーで 1 回限りの初期化を実行できます。

PostgreSQL

PostgreSQL データベースの SSL 接続の場合、sslsslmodesslcertsslkeysslrootcert のパラメータを使用できます。

  • 接続で SSL を使用して、使用するモードを指定するには、ssl パラメータと sslmode パラメータを使用します。
  • クライアントの検証には、sslcert パラメータと sslkey パラメータを使用します。
  • サーバーの検証には、sslrootcert パラメータを使用します。

PostgreSQL に接続する場合は、次のパラメータを設定します。

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

追加の PostgreSQL JDBC の構成パラメータとパラメータの詳細については、JDBC PostgreSQL ドキュメントの接続パラメータをご覧ください。

MySQL

MySQL データベースの SSL 接続の場合、sslmodetrustCertificateKeyStoreUrlclientCertificateKeyStoreUrl のパラメータを使用できます。

  • 接続で SSL を使用して、使用するモードを指定するには、sslmode パラメータを使用します。
  • クライアントの検証には、clientCertificateKeyStoreUrl パラメータを使用します。
  • サーバーの検証には、trustCertificateKeyStoreUrl パラメータを使用します。

MySQL に接続する場合は、以下のパラメータを設定します。

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

追加の MySQL JDBC 構成パラメータとパラメータの詳細については、MySQL ドキュメントのセキュリティ コネクタのページをご覧ください。

SSL 接続の例

次の例は、MySQL データベースで SSL 接続を使用して Pub/Sub to JDBC テンプレートを実行する方法を示しています。

#!/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"