הצפנת סודות בשכבת האפליקציה מוסיפה שכבת הגנה שאפשר להגדיר לנתונים רגישים ב-Google Kubernetes Engine (GKE), כמו פרטי כניסה ומפתחות. בעיות בהגדרה הזו יכולות למנוע את הפעולה התקינה של שכבת האבטחה הנוספת הזו.
אפשר להשתמש במסמך הזה כדי לפתור בעיות בהצפנת סודות בשכבת האפליקציה. לשם כך, בודקים את שדות הניפוי באגים שזמינים באובייקט GKE API Cluster. השדות האלה עוזרים לאבחן את הסיבה הבסיסית לשגיאות נפוצות, כמו עדכונים שנכשלו או בעיות במפתח Cloud KMS.
המידע הזה חשוב לאדמינים ולמפעילים של הפלטפורמה, ולמהנדסי אבטחה שאחראים על הגנה על מידע רגיש שמאוחסן באשכולות GKE. מידע נוסף על התפקידים הנפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Google Cloud זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.
עדכון שנכשל
כשמעדכנים את הגדרות ההצפנה של סודות בשכבת האפליקציה, מערכת GKE צריכה לשכתב את כל אובייקטי ה-Secret באשכול Kubernetes. מערכת GKE עושה את זה כדי לוודא שכל הסודות מוצפנים באמצעות מפתח Cloud KMS החדש, או שהם נכתבים ללא הצפנה אם זה מה שהגדרתם.
פעולת העדכון הזו עלולה להיכשל בגלל אחד מהתנאים הבאים:
- מישור הבקרה של Kubernetes לא זמין באופן זמני בזמן שהעדכון מתבצע.
AdmissionWebhookשהוגדר על ידי המשתמש מונע מ-GKE לעדכן אובייקטים מסוג Secret.- מפתח ה-Cloud KMS המעודכן או הקודם מושבת לפני שפעולת העדכון מסתיימת.
עד שהעדכון יסתיים בהצלחה, אל תבצעו פעולות במפתחות Cloud KMS הקודמים או המעודכנים.
שדות לניפוי באגים
אשכולות GKE חדשים שמריצים גרסה 1.29 ואילך מכילים שדות נוספים שעוזרים לעקוב אחרי עדכונים ל-Cluster.DatabaseEncryption ולשחזר נתונים במקרה של כשלים.
השלבים הבאים רלוונטיים רק לאשכולות שבהם השדה DatabaseEncryption.CurrentState לא ריק. אם השדה CurrentState
ריק, התכונה עדיין לא מופעלת בגרסה הזו של האשכול.
המגבלות הבאות חלות על השדות האלה:
- הן פלט בלבד, כלומר אי אפשר להגדיר אותן במהלך יצירת אשכול או עדכון בקשות.
CurrentState שדה
כדי לבדוק את הסטטוס הנוכחי של פעולת עדכון DatabaseEncryption, בודקים את השדה CurrentState ב-Cluster.DatabaseEncryption.
הערך של CurrentState |
תיאור |
|---|---|
|
|
פעולת העדכון האחרונה הושלמה בהצלחה. לא נדרשת פעולה נוספת. אפשר להיפטר ממפתחות שכבר השתמשתם בהם. |
|
|
העדכון מתבצע. |
|
|
אירעה שגיאה בעדכון האחרון. אל תשביתו או תשמידו מפתחות Cloud KMS שנעשה בהם שימוש בעבר, כי יכול להיות שהם עדיין בשימוש ב-GKE.
מידע נוסף מופיע בשדה |
LastOperationErrors שדה
אם פעולת עדכון נכשלת, השגיאה הבסיסית ממישור הבקרה של GKE מוצגת בפלט של gcloud container clusters update.
הודעות השגיאה משתי פעולות העדכון האחרונות שנכשלו זמינות גם ב-Cluster.DatabaseEncryption.LastOperationErrors.
DecryptionKeys שדה
מפתח Cloud KMS שמשמש לפעולות הצפנה חדשות מוצג ב-DatabaseEncryption.KeyName. בדרך כלל זה המפתח היחיד שבו משתמשים באשכול.
עם זאת, DatabaseEncryption.DecryptionKeys מכיל מפתחות נוספים שמשמשים גם את האשכול אם מתבצע עדכון או אחרי כשל.
שחזור אחרי עדכון שנכשל
כדי לשחזר עדכון שנכשל:
- בודקים את הודעת השגיאה ופותרים את הבעיות שמצוינות בה.
- מריצים שוב את בקשת העדכון באמצעות הפקודה שנכשלה, לדוגמה:
gcloud container clusters update ... --database-encryption-keyמומלץ לנסות שוב עם אותה בקשת עדכון שהוצאה במקור, או לעדכן את האשכול בחזרה למצב הקודם. יכול להיות ש-GKE לא יוכל לעבור למצב הצפנה או למפתח אחר אם הוא לא יוכל לקרוא סוד אחד או יותר.
בקטעים הבאים מפורטות סיבות נפוצות לשגיאות.
שגיאה במפתח Cloud KMS
אם הודעת השגיאה מכילה הפניה למפתח אחד או יותר של Cloud KMS, צריך לבדוק את ההגדרה של מפתח Cloud KMS כדי לוודא שאפשר להשתמש בגרסאות המפתח הרלוונטיות.
אם השגיאה מציינת שמפתח Cloud KMS הושבת או נמחק, צריך להפעיל מחדש את המפתח או את גרסת המפתח.
שגיאה: אי אפשר להשתמש במפתח CloudKMS שהוגדר להצפנה ברמת האפליקציה
הודעת השגיאה הבאה מופיעה אם לחשבון השירות שמוגדר כברירת מחדל ב-GKE אין גישה למפתח Cloud KMS:
Cluster problem detected (Kubernetes Engine Service Agent account unable to use CloudKMS key configured for Application Level encryption).
כדי לפתור את הבעיה, צריך להפעיל מחדש את המפתח שהושבת.
לא ניתן לעדכן את הסוד
יכול להיות שתקבלו את השגיאה הבאה אם Kubernetes API דחה את בקשת העדכון בגלל webhook של הרשאה:
error admission webhook WEBHOOK_NAME denied the request
כדי לפתור את השגיאה, צריך להסיר את ה-webhook או לשנות אותו כך ש-GKE יוכל לעדכן את ה-Secrets בכל מרחבי השמות במהלך עדכוני המפתחות.
שגיאה: מרחב השמות מנוהל
השגיאה הבאה מתרחשת כשמנסים להצפין מחדש סודות שנמצאים במרחב שמות שמנוהל על ידי GKE, כמו kube-system, באשכול Autopilot. הודעת השגיאה דומה לזו:
Error from server (Forbidden): secrets "alertmanager" is
forbidden: User cannot patch resource "secrets" in API group "" in the namespace "gke-gmp-system":
GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "gke-gmp-system"
is managed and the request's verb "patch" is denied'
באשכולות GKE Autopilot אי אפשר לשנות משאבי Kubernetes, כולל סודות, במרחבי שמות מנוהלים.
כדי לפתור את השגיאה, מבצעים את הפעולות הבאות:
- אם משתמשים בפקודות
kubectlכדי להצפין מחדש סודות, צריך להשתמש בדגל--namespaceכדי להגדיר את היקף הפקודה למרחבי שמות שאתם מנהלים. - אם משתמשים ב-CronJob כדי להצפין מחדש סודות, צריך לפרוס אותו רק במרחבי השמות שמנוהלים על ידיכם.
המאמרים הבאים
אם לא מצאתם פתרון לבעיה שלכם במסמכים, תוכלו להיעזר בקבלת תמיכה, כולל עצות בנושאים הבאים:
- פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care.
- קבלת תמיכה מהקהילה על ידי פרסום שאלות ב-StackOverflow ושימוש בתג
google-kubernetes-engineכדי לחפש בעיות דומות. אפשר גם להצטרף לערוץ Slack#kubernetes-engineכדי לקבל תמיכה נוספת מהקהילה. - פתיחת דיווחים על בעיות או בקשות להוספת תכונות באמצעות הכלי הציבורי למעקב אחר בעיות.