שימוש באישורי SSL עם תבניות

בדף הזה מוסבר איך להכין קבצים במכונות וירטואליות של עובדי Dataflow כדי להשתמש בתבניות של חיבור מסד נתונים ב-Java ‏(JDBC) ש-Google מספקת. אפשר גם להשתמש בשלבים שבדף הזה כדי להכין קבצים באופן דינמי במכונת ה-VM של ה-worker לפני שהעיבוד מתחיל.

העברת קבצים ל-VM של העובד

בחלק מהתבניות, אפשר להכין קבצים להעלאה במכונות וירטואליות של עובדים ב-Dataflow באמצעות פרמטר התבנית extraFilesToStage. משתמשים בפרמטר הזה כדי להכין קבצים באופן דינמי ב-worker VM לפני שמתחיל עיבוד הנתונים. אפשר להשתמש בפרמטר הזה במקרים הבאים:

  • אחסון קובצי אישורים ומפתחות בכל עובד לחיבורי SSL.
  • מכיוון ש-Dataflow לא כולל תמיכה מובנית ב-Secret Manager, צריך להשתמש בפרמטר הזה כדי להגדיר תבניות לאחסון סודות של Secret Manager ולגישה אליהם.

הפרמטר הזה זמין בחלק מהתבניות, אבל לא בכולן. כדי לבדוק אם הפרמטר זמין בתבנית שבה אתם משתמשים, אפשר לעיין בטבלת הפרמטרים של התבנית בתבניות סטרימינג של Dataflow שסופקו על ידי Google או בתבניות אצווה של Dataflow שסופקו על ידי Google.

כשמשתמשים בפרמטר הזה, נתיבים של Cloud Storage או סודות של Secret Manager מופרדים בפסיקים ומועברים לעובד, ונשמרים בספרייה /extra_files בכל עובד. אחרי שהקבצים נשמרים בספרייה /extra_files, פרמטרים אחרים יכולים להפנות אליהם. כדי להפנות לקבצים, מציינים במאפייני התצורה נתיבי קבצים יחסיים לספרייה /extra_files.

כל הקבצים ב-Cloud Storage שמועברים באמצעות הפרמטר הזה מאוחסנים בספרייה /extra_files עם אותו שם קובץ. הסודות של Secret Manager מאוחסנים בספרייה /extra_files עם שם הסוד שמשמש כשם הקובץ.

לדוגמה, אם מגדירים את extraFilesToStage לנתיב הבא, הקבצים מאוחסנים בספרייה /extra_files של כל עובד עם שמות הקבצים file.txt ו-SECRET_ID.

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

הגדרת אישורי SSL

בתבניות שמשתמשות ב-JDBC לקריאה או לכתיבה, אפשר להשתמש בפרמטר התבנית extraFilesToStage כדי להכין אישורים כקבצים מקומיים במכונות וירטואליות של עובדים, ואז להפנות לשם הקובץ המקומי בכתובת ה-URL של חיבור ה-JDBC או במאפייני החיבור.

חיבורי SSL של JDBC משתנים בהתאם למסד הנתונים. בקטע הזה מופיעות דוגמאות למסדי נתונים של PostgreSQL ו-MySQL.

אם אתם צריכים להגדיר מאפייני מערכת של Java, אתם יכולים להשתמש ב-JvmInitializer. אפשר להשתמש ב-JvmInitializer כדי לבצע אתחול חד-פעמי בכל העובדים של Dataflow Java.

PostgreSQL

לחיבורי SSL במסדי נתונים של PostgreSQL, הפרמטרים הבאים זמינים: ssl,‏ sslmode,‏ sslcert,‏ sslkey ו-sslrootcert.

  • כדי לציין שהחיבור צריך להשתמש ב-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 ופרטים נוספים על הפרמטרים מופיעים במאמר Connection Parameters (פרמטרים של חיבור) בתיעוד של JDBC PostgreSQL.

MySQL

לחיבורי SSL במסדי נתונים של MySQL, הפרמטרים הבאים זמינים: 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 ופרטים נוספים על הפרמטרים זמינים בדף security connectors בתיעוד של MySQL.

דוגמה לחיבור SSL

בדוגמה הבאה מוסבר איך להריץ את תבנית Pub/Sub to JDBC עם חיבורי SSL במסד נתונים של 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"