באשכולות GKE Autopilot נאכפות מדיניות אבטחה שונות שנועדו למנוע הרבה נתיבי תקיפה נפוצים. במסמך הזה מוסבר לאדמינים של הפלטפורמה איך לאכוף חלק מהמדיניות של Autopilot או את כולה באשכולות רגילים. אי אפשר להשבית את האכיפה של מדיניות האשכולות באשכולות Autopilot, כי אשכולות Autopilot מיועדים למצב אבטחה בסיסי גבוה יותר ב-GKE.
באשכולות רגילים, אפשר להפעיל ולהשבית כללי מדיניות ספציפיים בכל שלב. אדמינים בארגון יכולים לקבוע אם אפשר להשבית מדיניות ספציפית של Autopilot על ידי אכיפה של מגבלה בהתאמה אישית בארגון, בתיקייה או בפרויקט. אתם יכולים להשתמש במדיניות המוגדרת מראש כדי לאכוף שיטות מומלצות לאבטחה בלי שתצטרכו לכתוב תפקידים והרשאות מורכבים של RBAC. הרבה מהמדיניות ברמת האשכול יכולה לעזור לכם לשפר את אבטחת האשכול, גם אם אתם לא מעוניינים להשתמש במצב Autopilot באשכול או בעומסי העבודה. מידע נוסף על כללי המדיניות הזמינים של אשכול Autopilot זמין בקטע Supported policies.
שיקולים לגבי אכיפת מדיניות של אשכולות Autopilot
אשכולות Autopilot תמיד אוכפים את המדיניות הזו, אבל באשכולות רגילים יש לעיתים קרובות עומסי עבודה ומאגרי צמתים קיימים שעשויים להפר את המדיניות שאתם אוכפים. לפני שאוכפים או משביתים מדיניות באשכול, כדאי לקרוא את הנקודות הבאות:
- השינויים חלים רק על עומסי עבודה חדשים: כשמפעילים מדיניות שחלה על עומסי עבודה, השינויים חלים רק על Pods שנוצרו או ששונו אחרי הפעלת המדיניות. יחידות Pod קיימות שמפירות את המדיניות יכולות להמשיך לפעול. לפני שמפעילים מדיניות, בודקים את עומסי העבודה הקיימים באשכול כדי לוודא שהם עומדים במגבלות המדיניות.
- כללי מדיניות של מאגר צמתים חלים על כל הצמתים: כשמפעילים מדיניות שחלה על מאגרי הצמתים באשכול Standard, האילוצים חלים על מאגרי צמתים חדשים וקיימים. אם מאגר צמתים קיים מפר את המדיניות, פעולת העדכון של האשכול נכשלת. לדוגמה, אם מנסים להפעיל את המדיניות
no-standard-node-poolsבאשכול שיש בו מאגר צמתים קיים שמנוהל על ידי המשתמש, הפעולה תיכשל. לפני שמפעילים מדיניות של מאגר צמתים, כדאי לבדוק את מאגרי הצמתים הקיימים באשכול. - הפעלת כל המדיניות מפעילה את מצב Autopilot: אם מפעילים את כל המדיניות שזמינה ב-Autopilot (כולל המדיניות שמונעת מאגרי צמתים בניהול המשתמש), כל עומסי העבודה באשכול יכולים לפעול רק במצב Autopilot. כלומר, כל עומסי העבודה שלכם צריכים לעמוד בדרישות של הגבלות האבטחה של Autopilot ושל כל כללי המדיניות של האשכול. הגישה הזו מאפשרת להפעיל את כל אשכול Standard במצב Autopilot, עם אפשרות להשבית מדיניות ספציפית כשנדרש.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
הפעלת מדיניות ספציפית של Autopilot באשכול
כדי להפעיל מדיניות ספציפית כשיוצרים או מעדכנים אשכול רגיל, משתמשים ב-CLI של gcloud או ב-GKE API. כדי להוסיף לרשימת הכללים ש-GKE אוכף באשכול כללים ספציפיים של Autopilot cluster, משתמשים בדגל --autopilot-cluster-policies עם הפקודה gcloud container clusters create או הפקודה gcloud container clusters update.
בדוגמה הבאה אפשר לראות איך מפעילים מדיניות באשכול קיים:
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--autopilot-cluster-policies=AUTOPILOT_POLICIES
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של אשכול Standard. -
CONTROL_PLANE_LOCATION: האזור או האזור של מישור הבקרה של האשכול, כמוus-central1אוus-central1-a. -
AUTOPILOT_POLICIES: רשימה מופרדת בפסיקים של מדיניות אשכולות של Autopilot שצריך להתחיל לאכוף באשכול, כמוno-system-mutation,no-system-impersonation. צריך לציין מדיניות נתמכת אחת או יותר. המדיניות שאתם מציינים מצורפת לרשימת המדיניות שכבר נאכפת ב-GKE באשכול. כדי להשבית את האכיפה של מדיניות מסוימת, אפשר לעיין בקטע השבתה של מדיניות ספציפית של Autopilot באשכול.
אם הפקודה נכשלת ומופיעה הודעת שגיאה שמתחילה ב-Bad value [invalid
policy]:, צריך לוודא שכל שמות המדיניות שציינתם נמצאים ברשימה של המדיניות הנתמכת.
אימות אכיפת המדיניות
אחרי שמפעילים מדיניות ספציפית, אפשר לוודא שהאכיפה פועלת על ידי ניסיון ליצור משאב שמפר את המדיניות הזו. לדוגמה, אם מפעילים את המדיניות no-system-mutation, אפשר לנסות ליצור Pod במרחב השמות kube-system. GKE חוסם את פעולת יצירת ה-Pod ומציג הודעת שגיאה שדומה להודעה הבאה:
Error from server (Forbidden): pods is forbidden: User cannot create resource "pods" in API group "" in the namespace "kube-system": GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "kube-system" is managed and the request's verb "create" is denied
השבתה של מדיניות ספציפית של Autopilot באשכול
אפשר להשבית כל אחת ממדיניות האשכול של Autopilot בכל שלב.
השבתה של מדיניות שימושית במצבים שבהם דרישות האבטחה השתנו, או כשזרימת עבודה קיימת הופרעה כשמפעילים את המדיניות הזו. כדי להסיר מדיניות מרשימת המדיניות ש-GKE אוכף באשכול, משתמשים בדגל --remove-autopilot-cluster-policies עם הפקודה gcloud container clusters update:
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--remove-autopilot-cluster-policies=AUTOPILOT_POLICIES
צריך לציין לפחות ערך אחד לדגל --remove-autopilot-cluster-policies. אם מציינים את הדגל הזה בלי ערך, הפעולה נכשלת.
אם הפקודה נכשלת ומופיעה הודעת שגיאה שמתחילה ב-Bad value [invalid
policy]:, צריך לוודא שכל שמות המדיניות שציינתם נמצאים ברשימה של המדיניות הנתמכת.
אכיפה של מדיניות אשכולות ב-Autopilot בארגונים
אדמינים בארגון יכולים לאכוף את השימוש במדיניות האשכולות הזו בארגון, בפרויקט או בתיקייה באמצעות אילוצים מותאמים אישית של מדיניות הארגון. האמצעי הנוסף הזה יכול לעזור לכם למנוע הסרה לא מורשית או לא מכוונת של מדיניות נדרשת של אשכול ממנו. משתמשים בשדה ClusterPolicyConfig באילוץ המותאם אישית, כמו בדוגמה הבאה:
name: organizations/ORGANIZATION_ID/customConstraints/custom.autopilotClusterPolicies
resourceTypes:
- container.googleapis.com/Cluster
methodTypes:
- CREATE
- UPDATE
condition: "resource.ClusterPolicyConfig.no_system_mutation == true && resource.ClusterPolicyConfig.no_system_impersonation == true"
actionType: ALLOW
displayName: Autopilot policies in Standard clusters.
description: For all new and existing Standard clusters, enable the no_system_mutation and no_system_impersonation Autopilot cluster policies. For more information, see https://docs.cloud.google.com/kubernetes-engine/security/autopilot-cluster-policies-standard.
כללי מדיניות נתמכים
כל אחת ממדיניות Autopilot שזמינה באשכולות Standard מיישמת שיטה מומלצת אחת או יותר לאבטחה ברמת האשכול.
מדיניות כמו no-system-mutation, no-system-impersonation ו-no-unsafe-webhooks עוזרת לשפר את האבטחה של כל אשכול GKE, גם אם אתם לא מעוניינים להשתמש במצב אוטומטי.
בטבלה הבאה מפורטים כללי המדיניות של Autopilot שאפשר להפעיל באשכולות רגילים, והיא עוזרת להתכונן לאכיפת המדיניות:
| שם המדיניות | תיאור | מה צריך לעשות לפני ההפעלה |
|---|---|---|
no-system-mutation |
מניעת יצירה או שינוי של משאבים במרחבי שמות של מערכת GKE (כמו kube-system). |
מעבירים את ה-Pods ממרחבי השמות של המערכת למרחבי השמות שלכם. |
no-system-impersonation |
חוסמת ניסיונות להתחזות למשתמשי מערכת ומונעת יצירה של בקשות לחתימת אישורים באמצעות גורמים מרכזיים במערכת. | מחפשים בקשות לא מורשות לחתימה על אישורים שנוצרו עבור זהויות מערכת. אם אתם מוצאים בקשות חתומות לא מורשות לאישור (CertificateSigningRequests), תבצעו רוטציה של פרטי הכניסה של האשכול כדי לבטל את האישורים. |
no-unsafe-webhooks |
מונעת מ-admission webhooks וממדיניות ליירט משאבי מערכת קריטיים כמו אובייקטים של Node, PersistentVolumes או CertificateSigningRequests. |
אפשר להשתמש בשירות Recommender כדי לזהות וווב-הוקים שמיירטים משאבי מערכת. אם אתם מוצאים וווב-הוקים, אתם צריכים לשנות את ההגדרה שלהם. מידע נוסף זמין במאמר איך מוודאים את היציבות של מישור הבקרה כשמשתמשים ב-webhook. |
no-standard-node-pools |
למנוע את קיומם של מאגרי צמתים שמנוהלים על ידי משתמשים באשכול, כולל מאגרי צמתים שנוצרו באופן ידני ומאגרי צמתים שנוצרו באופן אוטומטי. יכולים להיות באשכול רק מאגרי צמתים של Autopilot. | מוחקים את כל מאגרי הצמתים הקיימים שאינם מאגרי צמתים של Autopilot, כולל מאגר הצמתים שמוגדר כברירת מחדל שנוצר עם האשכול. |