템플릿에 SSL 인증서 사용

이 페이지에서는 Google 제공 자바 데이터베이스 연결(JDBC) 템플릿에 SSL 인증서를 사용하도록 Dataflow 작업자 VM에서 파일을 스테이징하는 방법을 설명합니다. 또한 이 페이지의 단계에 따라 처리가 시작되기 전에 작업자 VM에서 파일을 동적으로 스테이징할 수 있습니다.

작업자 VM에서 파일 스테이징

일부 템플릿의 경우 extraFilesToStage 템플릿 매개변수를 사용하여 Dataflow 작업자 VM에서 파일을 스테이징할 수 있습니다. 데이터 처리가 시작되기 전에 이 매개변수를 사용하여 작업자 VM에서 파일을 동적으로 스테이징합니다. 예를 들어 이 매개변수는 SSL 연결을 위해 각 작업자에 인증서 및 키 파일을 저장하는 데 사용할 수 있습니다.

이 매개변수는 일부 템플릿에서만 사용할 수 있습니다. 사용 중인 템플릿에서 매개변수를 사용할 수 있는지 확인하려면 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 데이터베이스의 예시를 제공합니다.

자바 시스템 속성을 설정해야 하는 경우 JvmInitializer를 사용합니다. JvmInitializer를 사용하여 모든 Dataflow 자바 작업자에 대해 일회성 초기화를 수행할 수 있습니다.

PostgreSQL

PostgreSQL 데이터베이스의 SSL 연결의 경우 ssl, sslmode, sslcert, sslkey, sslrootcert 매개변수를 사용할 수 있습니다.

  • 연결에 SSL 및 사용할 모드를 사용하도록 지정하려면 sslsslmode 매개변수를 사용합니다.
  • 클라이언트 유효성 검사에는 sslcertsslkey 매개변수를 사용합니다.
  • 서버 유효성 검사에는 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 연결에는 sslmode, trustCertificateKeyStoreUrl, clientCertificateKeyStoreUrl 매개변수를 사용할 수 있습니다.

  • 연결에 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/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"