שימוש בספריית הלקוח של Java כדי להתחבר ל-Spanner Omni

ספריית הלקוח של Java ל-Spanner פועלת עם Spanner Omni באותו אופן שבו היא פועלת עם Spanner. במסמך הזה מוסבר איך להגדיר את ספריית הלקוח של Java כדי ליצור חיבורים מאובטחים ל-Spanner Omni. כדי ליצור את החיבורים האלה, צריך להגדיר אפשרויות לקוח כשיוצרים לקוח ניהול של מסד נתונים או לקוח של מסד נתונים.

ספריית הלקוח של Java תומכת בטקסט רגיל, ב-TLS, ב-TLS עם פרטי כניסה ובחיבורי mTLS.

מידע נוסף זמין במאמר תחילת העבודה עם Spanner ב-Java במסמכי Spanner.

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

כדי להתחיל להשתמש ב-Spanner Omni ב-Java, צריך להשתמש בספריית הלקוח של Java בגרסה 6.119.0 ואילך.

אם משתמשים ב-Maven בלי Bill of Materials (BOM), צריך להוסיף את הקוד הבא ליחסי התלות בקובץ pom.xml:

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-spanner</artifactId>
  <version>6.119.0</version>
</dependency>

תצורות אבטחה

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

תצורת אבטחה תיאור
טקסט פשוט התקשורת לא מוצפנת.
TLS התקשורת מוצפנת באמצעות פרוטוקול ההצפנה Transport Layer Security ‏ (TLS). ההגדרה הזו מחייבת להוסיף את אישור ה-CA של Spanner Omni למאגר האישורים המהימנים של Java, כמו שמתואר במאמר הגדרת מאגר האישורים המהימנים של Java.
TLS עם פרטי כניסה התקשורת מוצפנת באמצעות TLS, והאימות מתבצע באמצעות שם משתמש וסיסמה.
mTLS התקשורת מוצפנת באמצעות TLS הדדי (mTLS). במקרה כזה, צריך לספק גם אישור לקוח וגם מפתח פרטי של הלקוח.

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

לכל סוגי החיבורים המוצפנים (TLS, ‏ TLS עם פרטי כניסה ו-mTLS), צריך להוסיף את אישור ה-CA של Spanner Omni למאגר האישורים המהימנים של Java, כדי שהלקוח יוכל לאמת את אישור השרת.

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

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

אפשר גם לציין חנות אישורים מותאמת אישית כשמריצים את האפליקציה:

  1. כדי לשמור על תאימות לשירותים אחרים שמשתמשים ברשויות אישורים (CA) רגילות, מעתיקים את חנות האישורים של Java שמוגדרת כברירת מחדל:

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

    keytool -import -trustcacerts -file ~/.spanner/certs/ca.crt -alias spanner-ca -keystore /PATH_TO_CUSTOM_CACERTS
    
  3. מציינים את חנות האישורים המותאמת אישית באמצעות מאפייני מערכת של JVM כשמריצים את האפליקציה:

    java -Djavax.net.ssl.trustStore=/PATH_TO_CUSTOM_CACERTS -Djavax.net.ssl.trustStorePassword=changeit app
    

הגדרת האובייקט SpannerOptions

כשמגדירים את האובייקט SpannerOptions כדי ליצור DatabaseClient או DatabaseAdminClient, צריך לציין את נקודת הקצה של Spanner Omni באמצעות setHost() ואחריו setType(SpannerOptions.InstanceType.OMNI).

בדוגמאות הבאות אפשר לראות איך להגדיר את האובייקט SpannerOptions לכל אחת מהגדרות האבטחה הנתמכות:

טקסט פשוט

כדי ליצור חיבור טקסט פשוט, מציינים את נקודת הקצה של Spanner Omni עם http:// ומשתמשים בשיטה usePlainText():

SpannerOptions options =
    SpannerOptions.newBuilder()
        .setHost("http://ENDPOINT") // Replace with your Spanner Omni endpoint
        .setType(SpannerOptions.InstanceType.OMNI)
        .usePlainText()
        .build();
Spanner spanner = options.getService();

TLS

כשמגדירים את אובייקט SpannerOptions לחיבור TLS, לא צריך לציין פרטי כניסה של שם משתמש וסיסמה. מציינים את נקודת הקצה של Spanner Omni באמצעות https://:

SpannerOptions options =
    SpannerOptions.newBuilder()
        .setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
        .setType(SpannerOptions.InstanceType.OMNI)
        .build();
Spanner spanner = options.getService();

TLS עם פרטי כניסה

כדי ליצור חיבור TLS עם אימות באמצעות שם משתמש וסיסמה, מציינים את נקודת הקצה של Spanner Omni באמצעות https:// ואת שם המשתמש והסיסמה באמצעות השיטה login():

SpannerOptions options =
    SpannerOptions.newBuilder()
        .setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
        .setType(SpannerOptions.InstanceType.OMNI)
        .login("USERNAME", "PASSWORD".toCharArray())
        .build();
Spanner spanner = options.getService();

mTLS

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

openssl pkcs8 -topk8 -in ~/.spanner/certs/client.key -out ~/.spanner/certs/java-client.key -nocrypt

בדוגמה הבאה מוצג אובייקט SpannerOptions שהוגדר לשימוש באישור לקוח:

SpannerOptions options =
    SpannerOptions.newBuilder()
        .setHost("https://ENDPOINT") // Replace with your Spanner Omni endpoint
        .setType(SpannerOptions.InstanceType.OMNI)
        .useClientCert(
            "PATH_TO_CLIENT_CERT",
            "PATH_TO_CLIENT_CERT_KEY")
        .build();
Spanner spanner = options.getService();

קבלת לקוח מסד נתונים

אחרי שמגדירים את האובייקט SpannerOptions, אפשר לקבל לקוח מסד נתונים. מכיוון ש-Spanner Omni לא משתמש במזהי פרויקט בענן או במזהי מכונה ב-Google Cloud, צריך לציין default כמזהה הפרויקט וכמזהה המכונה כשיוצרים DatabaseId:

DatabaseId dbId = DatabaseId.of("default", "default", "DATABASE_ID");
DatabaseClient client = spanner.getDatabaseClient(dbId);