템플릿에 SSL 인증서 사용

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

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

일부 템플릿에서는 extraFilesToStage 템플릿 매개변수를 사용하여 Dataflow 작업자 VM에 파일을 스테이징할 수 있습니다. 이 매개변수를 사용하여 데이터 처리가 시작되기 전에 작업자 VM에서 파일을 동적으로 스테이징합니다. 다음과 같은 경우에 이 매개변수를 사용할 수 있습니다.

  • SSL 연결을 위해 각 작업자에 인증서 및 키 파일을 저장합니다.
  • Dataflow에는 Secret Manager에 대한 기본 제공 지원이 포함되어 있지 않으므로 이 매개변수를 사용하여 Secret Manager 보안 비밀을 저장하고 액세스하도록 템플릿을 구성합니다.

이 매개변수는 일부 템플릿에서만 사용할 수 있습니다. 사용 중인 템플릿에서 매개변수를 사용할 수 있는지 확인하려면 Google 제공 Dataflow 스트리밍 템플릿 또는 Google 제공 Dataflow 일괄 템플릿에서 템플릿에 대한 템플릿 매개변수 표를 참조하세요.

이 매개변수를 사용하면 쉼표로 구분된 Cloud Storage 경로 또는 Secret Manager 보안 비밀이 작업자에게 전달되고 각 작업자의 /extra_files 디렉터리에 저장됩니다. 파일이 /extra_files 디렉터리에 저장되면 다른 매개변수가 이를 참조할 수 있습니다. 파일을 참조하려면 구성 속성에서 /extra_files 디렉터리를 기준으로 파일 경로를 지정합니다.

이 매개변수를 사용하여 전달된 모든 Cloud Storage 파일은 동일한 파일 이름으로 /extra_files 디렉터리에 저장됩니다. Secret Manager 보안 비밀은 보안 비밀 이름이 파일 이름으로 사용된 상태로 /extra_files 디렉터리에 저장됩니다.

예를 들어 extraFilesToStage를 다음 경로로 설정하면 파일이 각 작업자의 /extra_files 디렉터리에 file.txtSECRET_ID라는 파일 이름으로 저장됩니다.

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 작업자에서 일회성 초기화를 실행할 수 있습니다.

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