הצפנת סודות בשכבת האפליקציה מוסיפה שכבת הגנה שאפשר להגדיר לנתונים רגישים ב-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).
כדי לפתור את הבעיה, צריך להפעיל מחדש את המפתח המושבת.
לא ניתן לעדכן את הסוד
השגיאה הבאה יכולה להופיע אם ה-API של Kubernetes דחה את בקשת העדכון בגלל webhook של אימות:
error admission webhook WEBHOOK_NAME denied the request
כדי לפתור את השגיאה, צריך להסיר את ה-webhook או לשנות אותו כך ש-GKE יוכל לעדכן את הסודות בכל מרחבי השמות במהלך עדכוני המפתחות.
שגיאה: מרחב השמות מנוהל
השגיאה הבאה מתרחשת כשמנסים להצפין מחדש סודות שנמצאים במרחב שמות שמנוהל על ידי 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 כדי להצפין מחדש סודות, תפרסו אותו רק במרחבי השמות שאתם מנהלים.
מישור הבקרה לא מגיב אחרי השבתת ההצפנה
אם תשביתו את ההצפנה של סודות בשכבת האפליקציה מהר מדי אחרי שתפעילו אותה, יכול להיות שתפריעו לפעולת ההצפנה הראשונית, ומישור הבקרה של kube-apiserver באשכול שלכם יפסיק להגיב.
אלה התסמינים של הבעיה:
- פעולות באשכול כמו
list node,list podsו-get apiserver readinessנכשלות עם קוד השגיאה 13 וההודעהInternal Server Error. - בקרי Kube לא פועלים, ו-Pods שנמחקו מ-StatefulSets או מ-ReplicaSets לא נוצרים מחדש.
- הקריאות ל-webhook נכשלות כי החיבור נדחה.
כדי לפתור את הבעיה:
- מפעילים מחדש את ההצפנה של סודות בשכבת האפליקציה באמצעות אותו מפתח Cloud KMS שבו השתמשתם קודם כדי להפעיל את ההצפנה.
כדי למנוע את הבעיה הזו, חשוב לוודא את הדברים הבאים:
- אחרי שמפעילים הצפנת סודות בשכבת האפליקציה, צריך לוודא שהאשכול יציב במשך כמה שעות לפני שמשביתים את ההצפנה.
המאמרים הבאים
אם לא מצאתם פתרון לבעיה במסמכי העזרה, תוכלו לקבל עזרה נוספת בקבלת תמיכה, כולל עצות בנושאים הבאים:
- פתיחת בקשת תמיכה באמצעות פנייה אל Cloud Customer Care.
- קבלת תמיכה מהקהילה על ידי פרסום שאלות ב-StackOverflow ושימוש בתג
google-kubernetes-engineכדי לחפש בעיות דומות. אתם יכולים גם להצטרף לערוץ Slack#kubernetes-engineכדי לקבל תמיכה מהקהילה. - דיווח על בעיות או שליחת בקשות להוספת תכונות באמצעות הכלי הציבורי Issue Tracker.