במאמר הזה מוסבר איך מאחסנים את מפתח הרישיון ומטפלים בו, איך מתקינים אותו בפריסה, איך מעדכנים מפתחות שתוקפם עומד לפוג ואיך מאמתים את ההתקנה בכל הצמתים.
כדי להפעיל סביבת ייצור, צריך להתקין מפתח רישיון מסחרי של Spanner Omni. בסביבה שאינה סביבת ייצור, אפשר להשתמש בתכונות של גיבוי ושחזור על ידי פריסת Spanner Omni בהגדרת שרת יחיד עם ארבעה vCPU או פחות, ללא מפתח רישיון. התכונה 'עובדים' לא נתמכת ברישיון Default או Developer, לא משנה כמה שרתים או מעבדים וירטואליים נמצאים בשימוש. כדי לרכוש רישיון מסחרי לשימוש בעובדים, צריך לפנות אל Google.
מידע על סוגי הרישיונות, המהדורות והתכונות הזמינים מופיע במאמר סקירה כללית על מהדורות Spanner Omni.
אחסון מפתח הרישיון
חשוב להתייחס למפתח הרישיון של Spanner Omni כאל פרטי כניסה רגישים מאוד. אם מישהו יפרוץ מפתח רישיון, Google תבטל אותו בגרסאות עתידיות של Spanner Omni. כדי למנוע חשיפה של מפתחות, צריך להטמיע את ההנחיות הבאות לגבי מחזור החיים. מומלץ להשתמש במערכות אוטומטיות כדי להחדיר את המפתח, במקום לכתוב אותו לאחסון מתמיד בטקסט לא מוצפן. בקטעים הבאים מוסבר איך מאחסנים את מפתח הרישיון, איך מגנים על קבצי פריסה אוטומטית ואיך מגדירים שידור בזמן ריצה.
אחסון במנהלי סודות מרכזיים
אל תבצעו קומיט של מפתח הרישיון למערכת לניהול גרסאות, ואל תקודדו אותו בהגדרות של קובצי תצורה. תמיד מאחסנים את המפתח במאגר מרכזי של פרטי כניסה, כמו:
- בענן: Google Cloud Secret Manager, Secrets Manager של Amazon Web Services (AWS) או Azure Key Vault של מיקרוסופט.
- לא תלוי בפלטפורמה: HashiCorp Vault.
אוטומציה של פריסה
כשמבצעים פריסה באמצעות כלי אוטומציה כמו Terraform או Ansible, לא מעבירים את מפתח הרישיון כמשתני תצורה של טקסט פשוט:
- Terraform: אחזור דינמי של מפתח הרישיון בזמן הפריסה באמצעות מקורות נתונים. כדי שהמפתח לא יופיע ביומני המסוף של הביצוע, מציינים את המשתנה באמצעות המאפיין
sensitive = true. - Ansible: שומרים את המפתח בזיכרון במהלך ההפעלה של ההגדרה באמצעות תוספים של מנהל סודות (כמו
google.cloud.gcp_secret_managerאוcommunity.hashicorp.vault), או מצפינים את המפתח באמצעות Ansible Vault אם הוא מאוחסן במאגר.
העברת מפתח הרישיון בזמן הריצה
כדי להעביר את מפתח הרישיון לתהליכי מסד הנתונים בלי לחשוף אותו למשתמשים לא מורשים, אפשר להשתמש בטכניקות הבאות:
פריסות מבוססות-VM (בענן או במקום)
- הזרקה מבוססת ניהול זהויות והרשאות גישה (IAM): משייכים את המכונות הווירטואליות של מסד הנתונים לחשבון שירות מנוהל או לתפקיד IAM. במהלך ההפעלה או ההקצאה (לדוגמה, באמצעות Ansible), משתמשים בזהות הזו כדי לאחזר את מפתח הרישיון ממנהל הסודות לזיכרון או לספרייה עם גישה מוגבלת.
- הרשאות מערכת הפעלה: אם כותבים את המפתח לדיסק, צריך להגביל את הגישה לקובץ כך שרק המשתמש שמריץ את תהליך Spanner Omni יוכל לצפות בקובץ (לדוגמה,
chmod 400 /path/to/license). צריך להגביל מאוד את גישת ה-SSH למכונות המארחות.
פריסות Kubernetes
- שימוש ב-Secrets Store CSI Driver: אפשר להשתמש ב-Secrets Store CSI Driver הרגיל כדי לטעון את מפתח הרישיון ישירות ממנהל הסודות החיצוני אל קבוצות ה-Pod של Spanner Omni כנפח זיכרון זמני (
tmpfs). פרטי הכניסה קיימים רק בזיכרון ונעלמים כשה-Pod מסתיים את הפעולה. - אל תשתמשו ב-Secrets מובנים של Kubernetes: אל תשתמשו ב-Secrets מובנים של Kubernetes, שמשתמשים רק בקידוד base64 ונשמרים ב-etcd.
התקנת מפתח הרישיון
כדי להתקין או לעדכן מפתח רישיון, צריך לוודא שהמפתח נגיש לשרתי Spanner Omni כנתיב מקומי (לדוגמה, /path/to/your/license).
כדי להעביר את הנתיב של מפתח הרישיון לשרת, משתמשים בדגל --license-file-path או במשתנה הסביבה SPANNER_LICENSE_FILE_PATH כשמריצים את הפקודה spanner start או spanner start-single-server.
לדוגמה:
spanner start --root \
--license-file-path=LICENSE_KEY_FILE_PATH \
--server-address=RESOLVABLE_HOSTNAME \
--zone=ZONE_NAME \
--base-dir=SPANNER_BASE_DIR
אפשר גם להשתמש במשתנה הסביבה כדי לספק את נתיב הרישיון:
SPANNER_LICENSE_FILE_PATH=LICENSE_KEY_FILE_PATH \
spanner start --root \
--server-address=RESOLVABLE_HOSTNAME \
--zone=ZONE_NAME \
--base-dir=SPANNER_BASE_DIR
מחליפים את מה שכתוב בשדות הבאים:
-
LICENSE_KEY_FILE_PATH: הנתיב המקומי לקובץ מפתח הרישיון. -
RESOLVABLE_HOSTNAME: שם המארח או כתובת ה-IP של שרת הצומת שאפשר לפתור. -
ZONE_NAME: שם האזור של הפריסה. -
SPANNER_BASE_DIR: ספריית הבסיס שבה מאוחסנים קובצי השרת.
אפשרות אחרת היא להציב את מפתח הרישיון בנתיב שבו השרת מצפה למצוא אותו: BASE_DIR/license/license. בפריסות של Kubernetes, ערך ברירת המחדל הוא BASE_DIR
/spanner.
עדכון רישיון שעומד לפוג
כדי לעדכן, להאריך או לחדש רישיון למהדורת Developer שתוקפו עומד לפוג בפריסה פעילה, צריך לבקש רישיון קבוע. כדי להאריך רישיון הוכחת היתכנות שעומד לפוג או לרכוש רישיון מסחרי, צריך לפנות אל Google. אחרי שמקבלים את הרישיון החדש, מציינים את הנתיב שלו ומפעילים הפעלה מחדש מדורגת של שרתי Spanner Omni:
- לוודא שקובץ הרישיון החדש נגיש לכל צומת.
- מבצעים הפעלה מחדש מדורגת על ידי הפעלה מחדש של צומת שרת אחד בכל פעם.
- עוקבים אחרי תקינות הפריסה במהלך ההשקה. אם הפעלה מחדש של צומת כלשהו נכשלת או שמתגלות שגיאות, צריך לחזור להגדרה הקודמת שעבדה ולבדוק את יומני השרת כדי לוודא שהרישיון החדש סופק בצורה נכונה.
התקנת מפתח הרישיון באמצעות Helm (Kubernetes)
אם אתם מבצעים פריסה באמצעות תרשים Helm שסופק על ידי Google, אתם יכולים להעביר את הנתיב לקובץ הרישיון באופן דינמי במהלך שדרוגים.
מכיוון שהדגל --set-file של Helm דורש נתיב פיזי בדיסק, אל תשמרו את מפתח הרישיון בקובץ קבוע. במקום זאת, מאחזרים את המפתח ממנהל הסודות לקובץ זמני חולף או לנתיב בזיכרון (לדוגמה, /dev/shm ב-Linux). מעבירים את הנתיב הזה ל-Helm, ואז מוחקים או גורסים את הקובץ באופן מיידי. כך המערכת לא משאירה את פרטי הכניסה בטקסט לא מוצפן בדיסק, ומונעת את השמירה שלהם באופן מקומי או את ההעברה שלהם בטעות לניהול גרסאות.
helm upgrade --install spanner-omni \
--set-file licenseKey=LICENSE_KEY_FILE_PATH
מחליפים את מה שכתוב בשדות הבאים:
-
LICENSE_KEY_FILE_PATH: הנתיב המקומי לקובץ מפתח הרישיון.
אימות התקנת הרישיון
מכיוון שמתקינים את מפתח הרישיון בכל צומת שרת פעיל באשכול, אפשר לבדוק את ההתקנה על ידי בדיקת הסטטוס של אחד מצומתי השרת שמטפלים בבקשות שלכם. משתמשים בפקודה describe לנקודת הקצה:
spanner deployment describe --deployment-endpoint=SERVER_ADDRESS
מחליפים את מה שכתוב בשדות הבאים:
-
SERVER_ADDRESS: הכתובת של צומת השרת.
הרצת בדיקה בכל האשכול
כדי לוודא שבכל הצמתים באשכול ה-VM או ב-Kubernetes StatefulSet מותקן מפתח הרישיון הנכון, מריצים את פקודת הביקורת ברמת האשכול:
spanner admin license check
ביקורת ברמת האשכול בודקת כל שרת בטופולוגיית מסד הנתונים. לכן, לפני שמריצים את הפקודה הזו, צריך לוודא שכל שרתי הצמתים מחוברים לאינטרנט ונגישים לרשת.
פירוש תוצאות הביקורת
הטבלה הבאה מסבירה את התוצאות של הביקורת ברמת האשכול:
| מצב האשכול | סוג פלט | תיאור ופעולה נדרשת |
|---|---|---|
| אחיד (צפוי) | מזהה רישיון יחיד | כל הצמתים משתמשים באותו מפתח רישיון ובאותו סוג רישיון. אין צורך לבצע פעולה נוספת. |
| מעורב (נדרשת פעולה) | רשימה של מזהי רישיונות ושרתים | מזוהים מפתחות רישיון שונים בצמתים (לדוגמה, במהלך עדכון בהדרגה (rolling) תקוע). בודקים את הצמתים שמופיעים ברשימה כדי לוודא שקובץ הרישיון החדש הוחל בצורה נכונה. |
שמירה על עמידה בדרישות של רישיון מסחרי
אם אתם משתמשים ב-Spanner Omni עם רישיון מסחרי, אתם צריכים לפעול בהתאם להסכם הרישיון. שמירה על תאימות עוזרת למנוע מחלוקות בנוגע לחיוב, ועוזרת לעקוב אחרי השימוש במשאבי האשכול ולדווח עליו ל-Google. כדי לוודא שאתם עומדים בדרישות של הסכם הרישיון המסחרי של Spanner Omni, אתם צריכים לבצע את הפעולות הבאות:
מריצים את כלי השימוש ב-Spanner Omni בסוף כל מחזור חיובים כדי לאסוף מדדי שימוש ב-vCPU של אשכול:
spanner admin license report --row-format=CSVכדאי לעבוד עם מנהל החשבונות הטכני (TAM) או עם צוות חשבון Google כדי לאשר את ערוץ השליחה המועדף של הארגון.
שולחים את המטען הייעודי (payload) שנוצר אל Google עד ה-5 בחודש הבא.