במאמר הזה מוסבר איך להוסיף הצפנת TLS לפריסת Spanner Omni במכונות וירטואליות (VM). בפריסה עם תכונות אבטחת רשת נעשה שימוש ב-Transport Layer Security (TLS) 1.3 כדי להצפין ולאמת את התקשורת בתוך הפריסה ועם הלקוחות שלה. Spanner Omni מספק TLS דו-צדדי (mTLS) לאבטחה משופרת, שבו שני הצדדים מאמתים את האותנטיות לפני החלפת נתונים. השימוש ב-mTLS בין הלקוח לשרת הוא אופציונלי, אבל שרתי Spanner Omni מתקשרים זה עם זה באמצעות mTLS.
גרסת הטרום-השקה של Spanner Omni לא תומכת בהצפנת TLS, והיא מפסיקה לכתוב נתונים 90 יום אחרי שיוצרים פריסה. כדי לקבל גישה מוקדמת למהדורה עם כל התכונות, אפשר לפנות אל Google.
לפני שמתחילים
לפני שמתחילים, צריך לוודא שהסביבה עומדת בדרישות הבאות:
מוודאים שיש לכם גישת SSH לכל מכונה בפריסה. הגישה הזו מאפשרת לכם להוריד ולהפעיל את הקובץ הבינארי של Spanner Omni.
הרשת שלכם צריכה לאפשר תקשורת TCP ביציאות 15000 עד 15025.
לכל מכונה צריך להיות נפח אחסון מספיק כדי לארח את הנתונים שהפריסה מטפלת בהם.
כדאי לעיין בדף דרישות המערכת כדי לוודא שההגדרה עומדת בדרישות.
אם מריצים את הקבצים הבינאריים בפלטפורמת הווירטואליזציה vSphere, צריך להשבית את הווירטואליזציה של TSC. כדי לעשות זאת, מוסיפים את ההגדרה
monitor_control.virtual_rdtsc = FALSEלקובץ ההגדרות של.vmxהמכונה הווירטואלית.
שלב 1: יצירת פריסה ללא הצפנת TLS
פועלים לפי השלבים במאמר בנושא יצירת פריסת מכונה וירטואלית של Spanner Omni ללא הצפנה. מוודאים שהפריסה של המכונה הווירטואלית ללא הצפנה ותכונות אבטחה פועלת כראוי. בדף הזה מניחים שיצרתם פריסה אזורית עם שלושה אזורים.
שלב 2: יצירת האישורים
צריך ליצור שלוש קבוצות של אישורים:
| סוג האישור | תיאור |
|---|---|
| אישורים ל-API | אישורים של API עוזרים להגן על שרת Spanner API. |
| אישורי שרת | אישורי שרת עוזרים להגן על התקשורת בין השרתים. |
| אישורי לקוחות | משתמשי קצה או אפליקציות משתמשים באישור לקוח כדי לבסס את הזהות שלהם ואת האמון בשרתי Spanner Omni. |
רשות אישורים (CA) מנפיקה את האישורים האלה. ב-Spanner Omni יש כלים ליצירת CA וכל שלושת סוגי האישורים. מבצעים את השלבים הבאים באחד מהמחשבים.
אפשר ליצור את האישורים האלה בתחנת העבודה באמצעות Spanner Omni CLI, ואז להעביר את קובצי האישורים לכל שרת Spanner Omni. מידע נוסף זמין במאמר מדריך למתחילים לשימוש ב-Spanner Omni CLI.
כדי ליצור אישורים, צריך לבצע את השלבים הבאים:
יצירת רשות אישורים (CA)
הגורם המוסמך הזה הוא ה-CA הבסיסי לכל אישורי הלקוח והשרת שתיצרו בשלבים הבאים.
spanner certificates create-ca --ca-certificate-directory=certs
הספרייה certs מכילה את אישור ה-CA. יוצרים עותק של האישור הזה כדי להשתמש בו כ-CA לאישורי API.
cp certs/ca.crt certs/ca-api.crt
הספרייה $HOME/.spanner/private-keys מכילה את המפתח הפרטי של רשות האישורים.
מגבים את הספרייה הזו ומאבטחים אותה. משתמש שיש לו גישה למפתח הפרטי יכול לחתום על אישורים שרירותיים שהלקוחות סומכים עליהם, כי הם סומכים על ה-CA עם החתימה העצמית.
אפשר להשתמש באותו CA לכל האישורים, אבל חובה להשתמש באותו CA לאישורי API ולאישורי לקוח. אופציונלי, אפשר ליצור רשות אישורים נוספת (או להשתמש ברשות אישורים חיצונית מהימנה) לאישורי ה-API.
בשלבים הבאים, כשיוצרים אישורים, חשוב להשתמש ב-CA הנכון. במסמך הזה נעשה שימוש באותו CA לכל סוגי האישורים.
יצירת אישורי שרת
אתם יכולים ליצור שני סוגים של אישורי שרת:
אישור שרת Spanner: מצפין את התקשורת בין שרתי Spanner Omni.
אישור API: מצפין את התקשורת ממערכות שמקיימות אינטראקציה עם הפריסה.
ההגדרה הזו מאפשרת ניהול גמיש יותר של האישורים האלה, כמו החלפה של אישורים.
יצירת אישור שרת Spanner
שרתי Spanner Omni משתמשים באישור שרת כדי להצפין את התקשורת ביניהם (תקשורת בין שרתים).
כדי ליצור את אישור השרת, מריצים את הפקודה הבאה. מחליפים את SERVER_LIST ברשימה מופרדת בפסיקים של שמות או סיומות של שרתי Spanner.
SERVER_NAMES=SERVER_LIST
spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
הפקודה הזו יוצרת שני קבצים, server.crt ו-server.key, בספרייה certs.
יצירת אישור API
אישורי API מצפינים את התקשורת ממערכות שמתקשרות עם הפריסה. שימוש באישורים נפרדים ל-API ולתקשורת בין שרתים מאפשר לכם לנהל ולבצע רוטציה של כל סוג בנפרד.
מריצים את הפקודה הבאה כדי ליצור את אישור ה-API. מחליפים את LB_DNS ב-DNS של איזון העומסים.
SERVER_NAMES=LB_DNS
spanner certificates create-server --filename-prefix=api --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
הפקודה הזו יוצרת עוד שני קבצים, api.crt ו-api.key, בספרייה certs. אם נדרש, אפשר להשתמש ברשות אישורים (CA) מהימנה חיצונית לאישורי ה-API.
הפצת האישורים לכל השרתים
מעתיקים את הספרייה certs לכל השרתים האחרים בפריסה כדי להפעיל אותם עם תכונות אבטחת הרשת.
scp -r certs REMOTE_HOST:SPANNER_DIR/certs
שלב 3: יצירת אישורי לקוח
אפשר להשתמש באישור לקוח כדי לאמת משתמשים ואפליקציות ב-Spanner. אישורי לקוח מאפשרים mTLS בין הלקוח לשרת.
אישורי הלקוח צריכים להיות חתומים על ידי אותה רשות אישורים (CA) שחתמה על אישור ה-API, והם צריכים לכלול שם משתמש לצורך הרשאה. בדוגמה הזו נעשה שימוש בadmin
משתמש, שהוא משתמש ברירת המחדל לכל מסד נתונים. למידע נוסף על משתמשים, תפקידים ואפשרויות אימות, ראו אימות והרשאה ב-Spanner Omni.
USERNAME=admin
spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
הפקודה הזו יוצרת את הקבצים client.crt ו-client.key בספרייה clientcerts. שולחים את הקבצים האלה לכל מכונה שמתחברת לשרתים של הפריסה.
אם אתם מתכננים להשתמש באישור הלקוח עם ספריית הלקוח של Java, אתם צריכים ליצור את מפתח האישור בפורמט PKCS#8. משתמשים בפקודה הבאה:
USERNAME=admin
spanner certificates create-client $USERNAME \
--output-directory clientcerts \
--ca-certificate-directory certs \
--generate-pkcs8-key
שלב 4: הפעלה מחדש של השרתים
אחרי שיוצרים את האישורים ומעתיקים אותם לכל השרתים בפריסה, מפעילים מחדש כל שרת.
פריסה של שרת יחיד
בפריסות של שרת יחיד, מריצים את הפקודה הבאה:
nohup spanner start-single-server \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
השרת מתחיל לפעול. כדי לבצע אינטראקציה עם הפריסה, אפשר לעיין בשלב 7: אינטראקציה עם הפריסה.
פריסת הרחבה
בפריסות של הרחבת השרת, מפעילים את השרת בכל מכונה. הערכים של server_address ושל zone צריכים להיות זהים לאלה שמופיעים בהגדרות הפריסה.
הרשת צריכה לפתור את הבעיה server_address. השרתים משתמשים בכתובת הזו לתקשורת פנימית. מריצים את הפקודה הבאה כדי להפעיל את שרת הבסיס:
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
בדוגמה הבאה אפשר לראות את הפקודה עם ערכים ספציפיים:
nohup spanner start \
--root \
--server-address=rootserver1 \
--zone=us-central-1a \
--base-dir=./spanbasedir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false &
כדי להפעיל mTLS ללקוחות, משתמשים בדגל --enable-client-certificate-authentication=true כשמפעילים את השרת.
nohup spanner start \
--root \
--server-address=HOST_NAME \
--zone=ZONE_NAME \
--base-dir=BASE_DIR \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false \
--enable-client-certificate-authentication=true &
השרתים פועלים עכשיו בכל מכונה, ואפשר ליצור את הפריסה.
שלב 5: יצירת פריסה עם הצפנת TLS
מריצים את הפקודה spanner deployment create מאחד משרתי הבסיס כדי ליצור את הפריסה. כדי להפעיל הצפנת TLS, מציינים את ספריית הבסיס באמצעות הדגל --base-dir. חשוב לוודא שמשתמשים באותו BASE_DIR שהגדרתם כשפתחתם את שרת הבסיס בשלב הקודם.
spanner deployment create \
--config-file=deployment.yaml \
--base-dir=BASE_DIR
במסוף של כל מכונה מוצגות הודעות שמציינות שהפריסה כוללת עכשיו הצפנת TLS. כל השרתים מתקשרים זה עם זה באמצעות ערוץ מוצפן.
שלב 6: (אופציונלי) הגדרת מאזן עומסים
כדי לנהל את תעבורת הנתונים של הלקוחות ולחלק אותה בין השרתים בפריסה, צריך להגדיר איזון עומסים. מוודאים שבהגדרת מאזן העומסים לבדיקת תקינות נעשה שימוש ב-HTTPS ולא ב-HTTP. משתמשים בפרטי ההגדרה הבאים:
| פרמטר | ערך |
|---|---|
| פרוטוקול | TCP |
| כתובת IP של קצה עורפי | כתובות ה-IP של השרתים. |
| יציאה | 15000 (זו יציאת ברירת המחדל. אם השתמשתם ביציאה אחרת בדגל --server-address, השתמשו ביציאה הזו). |
| כתובת URL של בדיקת תקינות | https://IP_ADDRESS:15012/healthz |
| אסטרטגיית איזון | roundrobin (מפיץ בקשות באופן עקבי בין השרתים) |
שלב 7: אינטראקציה עם הפריסה
אתם יכולים לקיים אינטראקציה עם פריסת Spanner Omni מכל מכונה וירטואלית באמצעות Spanner Omni CLI.
כדי ליצור חיבור מוצפן, צריך לכלול את הדגל הבא בכל פקודה:
--ca-certificate-file=certs/ca-api.crt
אם הפעלתם mTLS ללקוחות, צריך לכלול גם את הדגל הבא בכל פקודה:
--client-certificate-directory=clientcerts
כדי להיכנס ולקיים אינטראקציה עם הפריסה:
כניסה ל-Spanner Omni
spanner auth login admin \ --ca-certificate-file=certs/ca-api.crt \ --deployment-endpoint=ENDPOINTסיסמת ברירת המחדל היא
admin.Successfully logged in as "admin"יצירת מסד נתונים
spanner --deployment-endpoint=ENDPOINT databases create mydb --ca-certificate-file=certs/ca-api.crtCreating database...done.פתיחת מעטפת SQL
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner>יצירת טבלה והוספת נתונים
spanner> create table names (nameId INT64 NOT NULL, name String(100)) Primary Key (nameId); Query OK, 0 rows affected (4.62 sec) spanner> insert names (nameId, name) values (1, "Jack"); Query OK, 1 rows affected (0.18 sec)אימות הנתונים
מציגים ברשימה את מסדי הנתונים:
spanner databases list --ca-certificate-file=certs/ca-api.crtNAME STATE VERSION_RETENTION_PERIOD EARLIEST_VERSION_TIME KMS_KEY_NAME ENABLE_DROP_PROTECTION mydb READY 1h 2025-02-07T12:25:30Z falseשליפת הנתונים מהטבלה:
spanner sql --database=mydb --ca-certificate-file=certs/ca-api.crtConnected. spanner> show tables; +----------------+ | Tables_in_mydb | +----------------+ | names | +----------------+ 1 rows in set (0.14 sec) spanner> select * from names; +--------+--------+ | nameId | name | +--------+--------+ | 1 | Jack | +--------+--------+ 1 rows in set (18.69 msecs)
שלב 8: (אופציונלי) שינוי קנה המידה של הפריסה
אפשר להוסיף שרתים שאינם שרתי root לאזור כדי להגדיל את הקיבולת של האזור. כדי לעשות את זה, יוצרים את אישור השרת עבור השרתים שאינם שרתי הבסיס, כמו שמוסבר בשלב 2: יצירת האישורים, ומפעילים את השרת באמצעות הפקודה הבאה:
spanner start \
--server-address=NON_ROOT_MACHINE \
--join-servers=ROOT_SERVER1,ROOT_SERVER2,ROOT_SERVER3 \
--zone=us-central1-a \
--base-dir=./spandir \
--certificate-directory=${HOME}/.spanner/certs \
--insecure-mode=false
השלבים הבאים
- משתמשים בספריות לקוח ובדרייברים של JDBC כדי לחבר את האפליקציה לפריסה.
- ניהול משתמשים ותפקידים.