Menggunakan sertifikat SSL dengan template

Halaman ini menjelaskan cara melakukan stage file pada VM pekerja Dataflow untuk menggunakan sertifikat SSL dengan template Java Database Connectivity (JDBC) yang disediakan oleh Google. Anda juga dapat menggunakan langkah-langkah di halaman ini untuk membuat file secara dinamis di VM pekerja sebelum pemrosesan dimulai.

Membuat Stage file pada VM pekerja

Dengan beberapa template, Anda dapat menempatkan file di VM pekerja Dataflow menggunakan parameter template extraFilesToStage. Gunakan parameter ini untuk melakukan stage file secara dinamis di VM pekerja sebelum pemrosesan data dimulai. Anda dapat menggunakan parameter ini dalam kasus berikut:

  • Menyimpan file kunci dan sertifikat pada setiap worker untuk koneksi SSL.
  • Karena Dataflow tidak menyertakan dukungan bawaan untuk Secret Manager, gunakan parameter ini untuk mengonfigurasi template guna menyimpan dan mengakses secret Secret Manager.

Parameter ini tersedia di sebagian, tetapi tidak semua template. Untuk mengetahui apakah parameter tersedia dengan template yang Anda gunakan, lihat tabel parameter template untuk template Anda di template streaming Dataflow yang disediakan Google atau template batch Dataflow yang disediakan Google.

Saat Anda menggunakan parameter ini, jalur Cloud Storage yang dipisahkan koma atau secret Secret Manager akan diteruskan ke pekerja dan disimpan di direktori /extra_files pada setiap pekerja. Jika file disimpan di direktori /extra_files, parameter lain dapat mereferensikannya. Untuk mereferensikan file, di properti konfigurasi, tentukan jalur file yang relatif ke direktori /extra_files.

Semua file Cloud Storage yang diteruskan menggunakan parameter ini disimpan di direktori /extra_files dengan nama file yang sama. Secret Manager disimpan di direktori /extra_files dengan nama secret yang digunakan sebagai nama file.

Misalnya, jika Anda menetapkan extraFilesToStage ke jalur berikut, file akan disimpan di direktori /extra_files dari setiap pekerja dengan nama file file.txt dan SECRET_ID.

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

Mengonfigurasi sertifikat SSL

Dengan template yang menggunakan JDBC untuk membaca atau menulis, Anda dapat menggunakan parameter template extraFilesToStage untuk membuat sertifikat sebagai file lokal di VM pekerja, lalu mereferensikan nama file lokal di URL koneksi JDBC atau di properti koneksi.

Koneksi SSL JDBC berbeda berdasarkan database. Bagian ini memberikan contoh untuk database PostgreSQL dan MySQL.

Jika Anda perlu menetapkan properti sistem Java, gunakan JvmInitializer. Anda dapat menggunakan JvmInitializer untuk melakukan inisialisasi satu kali pada semua pekerja Java Dataflow.

PostgreSQL

Untuk koneksi SSL dalam database PostgreSQL, parameter berikut tersedia: ssl, sslmode, sslcert, sslkey, dan sslrootcert.

  • Untuk menentukan bahwa koneksi harus menggunakan SSL dan mode yang digunakan, gunakan parameter ssl dan sslmode.
  • Untuk validasi klien, gunakan parameter sslcert dan sslkey.
  • Untuk validasi server, gunakan parameter sslrootcert.

Saat Anda terhubung ke PostgreSQL, tetapkan parameter berikut:

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

Untuk parameter konfigurasi JDBC PostgreSQL tambahan dan detail selengkapnya tentang parameter, lihat Parameter Koneksi dalam dokumentasi PostgreSQL JDBC.

MySQL

Untuk koneksi SSL di database MySQL, parameter berikut tersedia: sslmode, trustCertificateKeyStoreUrl, dan clientCertificateKeyStoreUrl.

  • Untuk menentukan apakah koneksi harus menggunakan SSL dan mode yang digunakan, gunakan parameter sslmode.
  • Untuk validasi klien, gunakan parameter clientCertificateKeyStoreUrl.
  • Untuk validasi server, gunakan parameter trustCertificateKeyStoreUrl.

Saat terhubung ke MySQL, tetapkan parameter berikut:

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

Untuk parameter konfigurasi JDBC MySQL tambahan dan detail selengkapnya tentang parameter, lihat halaman konektor keamanan dalam dokumentasi MySQL.

Contoh koneksi SSL

Contoh berikut menunjukkan cara menjalankan template Pub/Sub ke JDBC dengan koneksi SSL di database 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"