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

Apache Beam הוא מודל מאוחד בקוד פתוח להגדרת צינורות לעיבוד נתונים באצווה ובסטרימינג. במסמך הזה מוסבר איך להשתמש במחבר SpannerIO בצינור Apache Beam כדי לקרוא ממאגרי מידע של Spanner Omni או לכתוב בהם.

לפני שמתחילים

כדי לקשר את SpannerIO ל-Spanner Omni, צריך לוודא שמתקיימות הדרישות הבאות:

  • מאחלים מסד נתונים בסביבת Spanner Omni.

  • אם אתם משתמשים בהצפנה, אתם צריכים לוודא שאתם משתמשים בגרסה תואמת של Apache Beam:

    • להצפנת TLS, גרסה 2.69.0 ואילך.
    • להצפנת 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: הגדרת מאגר האישורים של Java

כדי לאבטח את התקשורת, צריך לייבא את אישור ה-CA שנוצר על ידי Spanner Omni אל Java truststore. אפשר לבחור באחת מהאפשרויות הבאות:

מאגר אישורים של Java שמוגדר כברירת מחדל

כדי להוסיף את אישור ה-CA שנוצר על ידי Spanner Omni אל מאגר האישורים המהימנים של Java, מריצים את הפקודה הבאה:

sudo keytool -import -trustcacerts \
  -file ~/.spanner/certs/ca.crt \
  -alias spanner-ca \
  -keystore $JAVA_HOME/lib/security/cacerts

מאגר אישורים מותאם אישית

כדי לוודא שצינור הנתונים עדיין יכול להתחבר למסדי נתונים או לשירותים אחרים שמשתמשים ברשויות אישורים (CA) רגילות, צריך ליצור חנות אישורים (truststore) בהתאמה אישית:

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

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

    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: הנתיב למאגר האישורים המותאם אישית של רשות האישורים.

  • 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

כדי ליצור חיבור TLS בו-זמני (mTLS) באמצעות Apache Beam, צריך להגדיר את מאגר האישורים של Java עם אישור CA, ליצור או להמיר מפתח פרטי של לקוח לפורמט PKCS#8, ואז להגדיר את SpannerConfig עם אישור הלקוח ונתיב המפתח.

שלב 1: הגדרת מאגר האישורים של Java

מגדירים את מאגר האישורים של Java עם אישור ה-CA של Spanner Omni, כמו שמתואר בקטע שלב 1: הגדרת מאגר האישורים של 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 כשיוצרים את אישור הלקוח באמצעות Spanner Omni CLI עם הדגל --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: הנתיב לספרייה שמכילה את המפתחות הפרטיים של CA.

  • 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 לנקודת קצה של Spanner Omni, צריך להגדיר את משתנה הסביבה SPANNER_EXPERIMENTAL_HOST_AUTH_TOKEN לערך של אסימון האימות שנוצר על ידי Spanner Omni CLI. אם החיבור לא דורש פרטי כניסה, משאירים את המשתנה הזה לא מוגדר.

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