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