שימוש ב-Apache Beam וב-SpannerIO כדי להתחבר ל-Spanner Omni

‫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) בהתאמה אישית:

  1. יוצרים מאגר truststore בהתאמה אישית על ידי העתקת מאגר ה-truststore הקיים של Java:

    cp $JAVA_HOME/lib/security/cacerts PATH_TO_CUSTOM_CA_CERTIFICATE
    
  2. מייבאים את אישור ה-CA ל-truststore בהתאמה אישית:

    keytool -import -trustcacerts \
      -file ~/.spanner/certs/ca.crt \
      -alias spanner-ca \
      -keystore PATH_TO_CUSTOM_CA_CERTIFICATE
    
  3. מעבירים את מאגר אישורי ה-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. אם החיבור לא דורש פרטי כניסה, אל תגדירו את המשתנה הזה.

המאמרים הבאים