Apache Beam הוא מודל מאוחד בקוד פתוח להגדרת צינורות עיבוד נתונים מקבילים, גם באצווה וגם בסטרימינג. במאמר הזה מוסבר איך להשתמש במחבר SpannerIO בתוך צינור עיבוד נתונים של Apache Beam כדי לקרוא ממסדי נתונים של Spanner Omni או לכתוב אליהם.
לפני שמתחילים
כדי לחבר את SpannerIO ל-Spanner Omni, צריך לוודא שעומדים בדרישות הבאות:
מאתחלים מסד נתונים בסביבת Spanner Omni.
אם אתם משתמשים בהצפנה, ודאו שאתם משתמשים בגרסה תואמת של Apache Beam:
- להצפנת TLS, גרסה 2.69.0 ואילך.
- להצפנת Mutual TLS (mTLS), גרסה 2.75.0 ואילך.
מגדירים את פרטי הכניסה לאימות בסביבה שלכם.
הגדרת SpannerIO להתחברות ל-Spanner Omni
כדי לחבר את SpannerIO ל-Spanner Omni, מגדירים את SpannerConfig עם פרטי מסד הנתונים ופרמטרים של החיבור.
כדי להגדיר את החיבור, בוחרים באחד ממצבי החיבור הבאים:
התחברות באמצעות תקשורת בטקסט פשוט
כדי ליצור חיבור של טקסט פשוט, מציינים את נקודת הקצה של Spanner Omni, מפעילים תמיכה ניסיונית במארח באמצעות השיטה withExperimentalHost() ומגדירים את צינור עיבוד הנתונים באמצעות השיטה withUsingPlainTextChannel().
בדוגמה הבאה מוסבר איך להגדיר חיבור בטקסט פשוט:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the Spanner Omni endpoint
.withExperimentalHost("http://ENDPOINT")
// Use a plain-text connection
.withUsingPlainTextChannel(true);
מחליפים את מה שכתוב בשדות הבאים:
DATABASE_ID: המזהה של מסד הנתונים ב-Spanner Omni, לדוגמהtest-db.
ENDPOINT: נקודת הקצה של המכונה של Spanner Omni, לדוגמהlocalhost:15000.
חיבור באמצעות הצפנה
כדי להגן על תעבורת הנתונים של מסד הנתונים ולוודא שהתקשורת בין Apache Beam ל-Spanner Omni מאובטחת, אתם יכולים להתחבר באמצעות הצפנת TLS או mTLS. ההצפנה עוזרת לשמור על הסודיות של פרטי הכניסה והנתונים שלכם.
שימוש בהצפנת TLS
כדי להגן על תעבורת הנתונים של מסד הנתונים בין Apache Beam לבין Spanner Omni באמצעות הצפנת TLS, לא צריך לציין מאפייני פרטי כניסה ב-SpannerConfig. במקום זאת, מגדירים מאגר אישורים מהימנים של Java עם אישור ה-CA של Spanner Omni, ואז מגדירים את SpannerConfig כך שישתמש בנקודת הקצה המאובטחת של TLS.
שלב 1: מגדירים את ה-truststore של Java
כדי לאבטח את התקשורת, צריך לייבא את אישור ה-CA שנוצר על ידי Spanner Omni ל-truststore של Java. אפשר לבחור באחת מהאפשרויות הבאות:
Java truststore שמוגדר כברירת מחדל
כדי להוסיף את אישור ה-CA שנוצר על ידי Spanner Omni ל-truststore הרגיל של Java, מריצים את הפקודה הבאה:
sudo keytool -import -trustcacerts \
-file ~/.spanner/certs/ca.crt \
-alias spanner-ca \
-keystore $JAVA_HOME/lib/security/cacerts
מאגר אישורים מותאם אישית
כדי לוודא שצינור עיבוד הנתונים עדיין יכול להתחבר למסדי נתונים או לשירותים אחרים שמשתמשים ברשויות אישורים (CA) רגילות, צריך ליצור מאגר אישורים (truststore) בהתאמה אישית:
יוצרים מאגר truststore בהתאמה אישית על ידי העתקת מאגר ה-truststore הקיים של Java:
cp $JAVA_HOME/lib/security/cacerts PATH_TO_CUSTOM_CA_CERTIFICATEמייבאים את אישור ה-CA ל-truststore בהתאמה אישית:
keytool -import -trustcacerts \ -file ~/.spanner/certs/ca.crt \ -alias spanner-ca \ -keystore PATH_TO_CUSTOM_CA_CERTIFICATEמעבירים את מאגר אישורי ה-CA בהתאמה אישית כשמריצים את צינור עיבוד הנתונים:
java -Djavax.net.ssl.trustStore=PATH_TO_CUSTOM_CA_CERTIFICATE \ -Djavax.net.ssl.trustStorePassword=changeit \ -jar PIPELINE_NAME.jar
מחליפים את מה שכתוב בשדות הבאים:
PATH_TO_CUSTOM_CA_CERTIFICATE: הנתיב למאגר אישורי ה-CA המותאם אישית שלך.
PIPELINE_NAME: השם של צינור עיבוד הנתונים ב-Apache Beam.
שלב 2: מגדירים את SpannerConfig
כדי להגדיר את SpannerConfig לשימוש בחיבור TLS מאובטח, מוסיפים את הקוד הבא לצינור עיבוד הנתונים:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT");
מחליפים את מה שכתוב בשדות הבאים:
DATABASE_ID: המזהה של מסד הנתונים ב-Spanner Omni, לדוגמהtest-db.
ENDPOINT: נקודת הקצה של המכונה של Spanner Omni, לדוגמהlocalhost:15000.
שימוש בהצפנת mTLS
כדי ליצור חיבור Mutual TLS (mTLS) באמצעות Apache Beam, צריך להגדיר את ה-truststore של Java עם אישור ה-CA, ליצור או להמיר מפתח פרטי של לקוח לפורמט PKCS#8, ואז להגדיר את SpannerConfig עם אישור הלקוח ונתיב המפתח.
שלב 1: מגדירים את ה-truststore של Java
מגדירים את ה-truststore של Java עם אישור ה-CA של Spanner Omni, כמו שמתואר למעלה בקטע שלב 1: הגדרת ה-truststore של Java.
שלב 2: המרה או יצירה של המפתח הפרטי של הלקוח
כדי להתחבר באמצעות mTLS, ודאו שהמפתח הפרטי של הלקוח הוא בפורמט PKCS#8. אפשר לבחור באחת מהאפשרויות הבאות:
openssl
כדי להמיר את מפתח הלקוח שנוצר על ידי Spanner Omni לפורמט שתואם ל-Java, מריצים את הפקודה הבאה:
openssl pkcs8 -topk8 \
-in ~/.spanner/certs/client.key \
-out ~/.spanner/certs/java-client.key \
-nocrypt
Spanner Omni CLI
כשיוצרים את אישור הלקוח, יוצרים את המפתח ישירות בפורמט PKCS#8 באמצעות ה-CLI של Spanner Omni עם הדגל --generate-pkcs8-key.
כדי ליצור אישור לקוח ומפתח פרטי של לקוח בפורמט PKCS#8, מריצים את הפקודה הבאה:
spanner certificates create-client CLIENT_NAME \
--ca-certificate-directory=PATH_TO_CA_CERTIFICATES \
--ca-private-key-directory=PATH_TO_PRIVATE_KEYS \
--output-directory=PATH_TO_CERTIFICATES \
--generate-pkcs8-key
מחליפים את מה שכתוב בשדות הבאים:
CLIENT_NAME: שם הלקוח שעבורו רוצים ליצור את האישור והמפתח הפרטי.
PATH_TO_CA_CERTIFICATES: הנתיב לספרייה שמכילה את אישורי ה-CA.
PATH_TO_PRIVATE_KEYS: הנתיב לספרייה שמכילה את המפתחות הפרטיים של רשות האישורים.
PATH_TO_CERTIFICATES: הנתיב לספרייה שבה נשמרים אישור הלקוח והמפתח הפרטי.
שלב 3: מגדירים את SpannerConfig
מגדירים את SpannerConfig בקוד של צינור עיבוד הנתונים באמצעות אישור הלקוח והמפתח הפרטי של הלקוח:
SpannerConfig spannerConfig =
SpannerConfig.create()
.withDatabaseId("DATABASE_ID")
// Define the secure Spanner Omni endpoint
.withExperimentalHost("https://ENDPOINT")
// Specify the paths to the client certificate and private key
.withClientCert(
"PATH_TO_CLIENT_CERT",
"PATH_TO_CLIENT_CERT_KEY");
מחליפים את מה שכתוב בשדות הבאים:
DATABASE_ID: המזהה של מסד הנתונים ב-Spanner Omni, לדוגמהtest-db.
ENDPOINT: נקודת הקצה של המכונה של Spanner Omni, לדוגמהlocalhost:15000.
PATH_TO_CLIENT_CERT: הנתיב לקובץ של אישור הלקוח.
PATH_TO_CLIENT_CERT_KEY: הנתיב לקובץ המפתח הפרטי של הלקוח.
הגדרת טוקנים לאימות
לא מומלץ להשתמש בטוקנים לאימות בצד הלקוח, כי התוקף של הטוקנים שנוצרים על ידי Spanner Omni פג וצריך לחדש אותם ידנית באמצעות ה-CLI של Spanner Omni. כדי להשתמש באסימון אימות עם הגדרת TLS או mTLS לנקודת קצה (endpoint) של Spanner Omni, מגדירים את משתנה הסביבה SPANNER_EXPERIMENTAL_HOST_AUTH_TOKEN לערך של אסימון האימות שנוצר על ידי ה-CLI של Spanner Omni. אם החיבור לא דורש פרטי כניסה, אל תגדירו את המשתנה הזה.