템플릿에 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"