- הגדרת GKE להפעלה רק של עומסי עבודה ספציפיים עם הרשאות במצב Autopilot.
- התקנת רשימות היתרים לעומסי עבודה עם הרשאות מיוחדות.
המסמך הזה מיועד לסוגי התפקידים הבאים:
- מהנדסי אבטחה שרוצים לוודא שעומסי עבודה של צד שלישי צריכים רשימת היתרים כדי לפעול באשכולות שלהם, ושמקורם במקורות שאושרו על ידי GKE.
- מהנדסי פלטפורמה שרוצים להפעיל עומסי עבודה של צד שלישי באשכולות כדי לאפשר לצוותי האפליקציות להמשיך בעבודה.
כדאי להכיר את המושגים הבאים:
- מידע על אישור כניסה של עומסי עבודה עם הרשאות במצב Autopilot
- משאבים בהתאמה אישית ב-Kubernetes
- מגבלות אבטחה ב-GKE Autopilot
- שותפים של GKE Autopilot
מידע על עומסי עבודה עם הרשאות ב-Autopilot
במצב Autopilot, מוחל על עומסי העבודה סט ברירת מחדל של אילוצים כדי לשפר את רמת האבטחה. אפשר לשנות את המגבלות האלה כדי להריץ עומסי עבודה ספציפיים עם הרשאות מיוחדות. לשם כך, צריך להתקין רשימות היתרים שתואמות לעומסי העבודה האלה. כברירת מחדל, Autopilot מאפשר להתקין רשימות היתרים משותפים של שותפי Autopilot ופרויקטים ספציפיים בקוד פתוח. לקוחות GKE שעומדים בדרישות יכולים גם ליצור רשימות היתרים לעומסי עבודה מורשים בבעלות הלקוח שהם מעלים לקטגוריות של Cloud Storage.
כל רשימת היתרים היא קובץ שתואם לעומס עבודה ספציפי עם הרשאות מיוחדות. כדי להריץ עומס עבודה עם הרשאות מיוחדות, מבצעים את הפעולות הבאות:
- מגדירים את האשכול כך שיאפשר התקנה של רשימות היתרים מנתיבים ספציפיים. כברירת מחדל, כל רשימות ההיתרים של שותפי Autopilot ושל פרויקטים מאושרים של קוד פתוח נתמכות.
- יוצרים AllowlistSynchronizer באשכול שמתקין את הרשימה הלבנה ושומר אותה מעודכנת.
באגים ובקשות להוספת תכונות לעומסי עבודה עם הרשאות ולרשימות היתרים
הבעלים של עומס עבודה עם הרשאות מיוחדות אחראי ליצירה, לפיתוח ולתחזוקה של עומסי העבודה ורשימות ההיתרים שלו. אם נתקלתם בבאג או שיש לכם הגשת בקשה להוספת תכונה לגבי עומס עבודה עם הרשאות מיוחדות או רשימת היתרים, פנו לבעלים המתאים.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
- מוודאים שאפשר להגדיר אשכולות להתקנת רשימות היתרים מהמקור שבחרתם. אדמינים בארגון יכולים להשתמש במדיניות הארגון כדי לשלוט בנתיבים שאפשר להוסיף לאשכול. מידע נוסף זמין במאמר בנושא הגבלות מנוהלות של שירות Organization Policy לרשימות היתרים.
לקוחות GKE שעומדים בדרישות יכולים להשתמש בעומסי עבודה עם הרשאות בבעלות הלקוח. כדי לוודא שאתם עומדים בדרישות, צריך לבדוק את שני התנאים הבאים:
- האדמין של הארגון הוסיף את נתיב הקטגוריה של רשימת ההיתרים למדיניות הארגון. מידע נוסף מופיע במאמר בנושא הגבלת עומסי עבודה עם הרשאות ב-GKE בארגונים.
- רשימת ההיתרים שרוצים להתקין נמצאת בקטגוריה של Cloud Storage. מידע נוסף זמין במאמר בנושא יצירת רשימות היתרים לעומסי עבודה עם הרשאות ב-Autopilot.
דרישות
- המשאב המותאם אישית AllowlistSynchronizer דורש GKE מגרסה 1.32.2-gke.1652000 ואילך.
- צריך לדעת איזה עומס עבודה עם הרשאות רוצים להריץ באשכול.
- כדי לשנות את הגדרת הנתיב של רשימת ההיתרים באשכול, האשכול צריך להריץ GKE בגרסה 1.35 ואילך.
הגדרת נתיבים ברשימת ההיתרים לאשכול
בקטע הזה מוסבר איך להגדיר אשכול כדי לתמוך בהתקנה של רשימות היתרים מתוך קבוצה של נתיבים מאושרים. כברירת מחדל, Autopilot תומך בהתקנה של רשימת היתרים משותפים של שותפי GKE ופרויקטים מאושרים של קוד פתוח. אפשר לשנות את הגדרת ברירת המחדל הזו עבור אשכולות ספציפיים. אפשר גם לציין מקורות מאושרים של רשימת היתרים לכל הארגון, התיקייה או הפרויקט באמצעות מדיניות ארגונית.
מזהים את הנתיבים של הקבצים שרוצים להוסיף לרשימת ההיתרים של האשכול. אפשר לציין כמה נתיבים כשיוצרים או מעדכנים את האשכול. אפשר גם להשבית את ההתקנה של רשימת ההיתרים מכל מקור שהוא. כדי לעשות זאת, צריך לציין מחרוזת ריקה במקום נתיב. מידע נוסף על הנתיבים שאפשר לציין זמין במאמר בנושא נתיבים ברשימת ההיתרים.
כדי לשלוט במקורות המותרים ברשימת ההיתרים של אשכול, משתמשים בדגל
--autopilot-privileged-admissionכשיוצרים או מעדכנים אשכול Autopilot או אשכול רגיל, כמו בפקודה הבאה:gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם לאשכול החדש. -
LOCATION: המיקום של מישור הבקרה של האשכול, למשלus-central1.
ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: רשימה מופרדת בפסיקים של נתיבים לקבצים או לספריות של רשימת ההיתרים. לדוגמה,gke://*,gs://my-agent/privileged-logging-agent.yaml. אפשר גם להשבית את ההתקנה מרשימת ההיתרים מכל מקור על ידי ציון מחרוזת ריקה ("").
-
אם מעדכנים אשכול קיים בלי לציין את הדגל --autopilot-privileged-admission, הגדרת הנתיב הקיימת של האשכול לא משתנה. לא צריך לציין את הדגל הזה בכל פעם שמעדכנים אשכול.
אחרי שהפעולה של יצירה או עדכון האשכול מסתיימת, אפשר להתקין רשימות היתרים מהנתיבים שצוינו על ידי יצירת AllowlistSynchronizers.
יצירה של AllowlistSynchronizer חדש
כדי להריץ עומס עבודה עם הרשאות, מוסיפים את הנתיב לקובץ רשימת ההיתרים המתאים למפרט AllowlistSynchronizer בקובץ YAML. לאחר מכן פורסים את AllowlistSynchronizer באשכול.
- יוצרים קובץ YAML חדש בכלי לעריכת טקסט.
מוסיפים את התוכן הבא לקובץ ה-YAML:
apiVersion: auto.gke.io/v1 kind: AllowlistSynchronizer metadata: name: ALLOWLIST_SYNCHRONIZER_NAME spec: allowlistPaths: - ALLOWLIST1_PATH - ALLOWLIST2_PATHמחליפים את מה שכתוב בשדות הבאים:
-
ALLOWLIST_SYNCHRONIZER_NAME: השם של הכלי החדש לסנכרון. בוחרים שם תיאורי שמזהה את עומס העבודה או את הצוות שהרשימה הלבנה תומכת בהם.
ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: רשימת נתיבים לקבצים או לספריות ברשימת ההיתרים שרוצים להתקין, כמו בדוגמה הבאה:allowlistPaths: - gke://* - gs://my-agent/privileged-logging-agent.yamlהגדרת האשכול צריכה לתמוך בנתיבים שאתם מציינים, כפי שמתואר בקטע הגדרת נתיבים ברשימת ההיתרים לאשכול.
-
פורסים את קובץ ה-YAML באשכול:
kubectl apply -f PATH_TO_YAML_FILEמחליפים את
PATH_TO_YAML_FILEבנתיב לקובץ YAML שיצרתם בשלב הקודם.הבקר AllowlistSynchronizer מתקין קבצים של רשימת ההיתרים מהנתיבים שצוינו באשכול.
ממתינים עד שהכלי לסנכרון ידווח על סטטוס
Ready:kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \ --timeout=60s
אפשר גם לשלב התקנה של רשימת היתרים ופריסה של עומסי עבודה עם הרשאות מיוחדות בצינור עיבוד הנתונים של אינטגרציה רציפה (CI) ופריסה רציפה (CD). מגדירים את תהליך העבודה כך שימתין עד שהרשימה הלבנה תותקן בהצלחה לפני פריסת עומס העבודה המתאים.
עדכון של AllowlistSynchronizer קיים
אתם יכולים לעדכן AllowlistSynchronizer קיים כדי להוסיף או להסיר קבצים של רשימת ההיתרים. יכול להיות שתצטרכו לעדכן מסנכרנים קיימים במצבים כמו הבאים:
- הבעלים של עומס העבודה מוסיף קובץ חדש של רשימת ההיתרים עם שם שונה.
- רוצים להוסיף רשימת היתרים חדשה לעומס עבודה למסנכרן קיים שמקבץ רשימות היתרים קשורות.
- רוצים להסיר רשימת היתרים ממסנכרן כי אתם לא רוצים יותר להשתמש בעומס העבודה המתאים.
כדי לעדכן אובייקט קיים של AllowlistSynchronizer:
מציגים רשימה של רכיבי הסנכרון הקיימים באשכול:
kubectl get allowlistsynchronizerפותחים את המפרט של הכלי לסנכרון שרוצים לעדכן בכלי לעריכת טקסט.
מעדכנים את השדה
spec.allowlistPathsכדי להוסיף, לשנות או להסיר נתיבי קבצים של רשימת ההיתרים.שומרים את הקובץ וסוגרים את הכלי לעריכת טקסט.
מחילים את ההגדרות המעודכנות על האשכול:
kubectl apply -f PATH_TO_YAML_FILEמחליפים את
PATH_TO_YAML_FILEבנתיב לקובץ ה-YAML שעדכנתם בשלב הקודם.
כשפורסים הגדרה מעודכנת של כלי הסנכרון, הערך בשדה managedAllowlistStatus.generation בסטטוס של האובייקט AllowlistSynchronizer גדל ב-1. לאחר מכן, בקר AllowlistSynchronizer
מחיל את השינויים.
מעקב אחר הסטטוס של סנכרון רשימת ההיתרים
אחרי שמתקינים את AllowlistSynchronizer או מעדכנים מסנכרן קיים, אפשר לעקוב אחרי סטטוס הסנכרון. הסטטוס עוזר לעקוב אחרי ההתקנה, ההסרה או השינויים של קבצים ברשימת ההיתרים, וגם אחרי שגיאות שעלולות להתרחש.
כדי לעקוב אחרי הסטטוס הכללי של הסנכרון, מריצים את הפקודה הבאה:
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
הפלט אמור להיראות כך:
...
status:
conditions:
- type: Ready
status: "False"
reason: "SyncError"
message: "some allowlists failed to sync: example-allowlist-1.yaml"
lastTransitionTime: "2024-10-12T10:00:00Z"
observedGeneration: 2
managedAllowlistStatus:
- filePath: "gs://path/to/example-allowlist-2.yaml"
generation: 1
phase: Installed
lastSuccessfulSync: "2024-10-10T10:00:00Z"
- filePath: "gs://path/to/example-allowlist-1.yaml"
phase: Failed
lastError: "Initial install failed: invalid contents"
lastSuccessfulSync: "2024-10-08T10:00:00Z"
בפלט של הדוגמה הזו, הסנכרון של example-allowlist-1.yaml הרשימה של כתובות ה-IP המותרות נכשל, וההתקנה של example-allowlist-2.yaml הרשימה של כתובות ה-IP המותרות הצליחה. תיאור של השדות האלה מופיע בקטע סטטוס של AllowlistSynchronizer.
אימות קיומה של רשימת היתרים באשכול
כדי לוודא שרשימת ההיתרים קיימת באשכול, מריצים את הפקודה הבאה:
kubectl get workloadallowlist
הפלט הוא רשימה של רשימות ההיתרים שהותקנו באשכול. בודקים שהפלט כולל את רשימת ההיתרים שבה רוצים להשתמש.
פריסת עומס העבודה עם הרשאות
אחרי שמתקינים רשימת היתרים בהצלחה, אפשר לפרוס את עומס העבודה המתאים באשכול. בעל עומס העבודה צריך לספק לכם גם הוראות להתקנת עומס העבודה. רשימה של שותפי Autopilot וקישורים למסמכים שלהם מופיעים במאמר שותפי Autopilot.
שימוש במאגרי תמונות פרטיים
אתם יכולים לשכפל את תמונות הקונטיינר של עומסי עבודה עם הרשאות מאגרי מידע פרטיים שבבעלותכם. כדי להפעיל את התמונות המשוכפלות האלה בעומס עבודה, אתם צריכים לעמוד בכל הדרישות הבאות:
- תקציר הגיבוב (digest) של SHA-256 של התמונה המשוכפלת צריך להיות זהה לתקציר הגיבוב של התמונה של עומס העבודה שזמין לציבור.
- התקציר של תמונת ה-SHA-256 שאתם מציינים חייב להיות באובייקט
WorkloadAllowlistשמסונכרן עם האשכול.
אם עומס העבודה תומך בתמונות משוכפלות, מפרט רשימת ההיתרים של עומס העבודה הזה מכיל רשימה של תמציות תמונות בשדה containers.imageDigests במפרט רשימת ההיתרים של עומס העבודה הזה. בדרך כלל, בשדה הזה יש תקציר נפרד לכל גרסה זמינה של קובץ האימג' של הקונטיינר. כדי לראות את רשימת התקצירים של התמונות:
- מוודאים שרשימת ההיתרים קיימת באשכול.
קבלת המפרט של רשימת ההיתרים שהותקנה:
kubectl get workloadallowlist ALLOWLIST_NAME -o yamlמחליפים את
ALLOWLIST_NAMEבשם של הרשימה הלבנה שהותקנה. לדוגמה,company-name-solution-v1.0.0.עבור עומסי עבודה שתומכים בתכונה הזו, הפלט דומה לזה שמופיע בהמשך. השדה
imageDigestsמכיל רשימה של תקצירי הודעות מותרים.# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23אם הפלט לא כולל שדה
imageDigests, או אם התקציר של הגרסה שבה רוצים להשתמש לא מופיע ברשימה, צריך לפנות ישירות לבעלים של עומס העבודה ולבקש ממנו לעדכן את רשימת ההיתרים. אחרי שבעלי העומס מוסיפים את תקצירי התמונות לרשימת ההיתרים שלהם, רשימת ההיתרים המעודכנת מותקנת אוטומטית על ידי הכלי לסנכרון רשימת ההיתרים באשכול.מוסיפים את אחד מסיכומי התמונות הנתמכים למניפסט של עומס העבודה.
לדוגמה, נניח שיש לכם את התמונה הבאה במפרט של Pod שזמין לכולם אצל שותף:
...
containers:
- name: pause-container1
image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
אפשר להשתמש בתמונה הפוכה אם הגיבוב תואם לגיבוב שזמין לציבור, כמו בדוגמה הבאה:
...
containers:
- name: pause-container1
image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
securityContext:
privileged: true
צריך לכלול את תקציר הגיבוב (digest) מסוג SHA-256 בשדה התמונה, בדומה לדוגמה הקודמת. אם הגיבובים לא זהים, התמונה המשוכפלת לא תפעל. כדי לשמור על תמצית התמונה כשמשכפלים תמונות של שותפים, כדאי להשתמש בכלי כמו crane, ORAS או skopeo.
מחיקת עומס עבודה עם הרשאות
כדי להפסיק את ההרשאה להפעלת עומס עבודה עם הרשאות מיוחדות באשכולות, צריך להסיר את הנתיב לרשימת ההיתרים המתאימה מה-AllowlistSynchronizer. המסנכרן מסיר את רשימת ההיתרים.
אם מוחקים אובייקט WorkloadAllowlist מהאשכול במקום לעדכן את הכלי לסנכרון, הכלי לסנכרון מתקין מחדש את רשימת ההיתרים. חשוב להסיר את הנתיב מהכלי AllowlistSynchronizer.
כדי להסיר רשימת היתרים:
- במניפסט ה-YAML של AllowlistSynchronizer שמנהל את הרשימה הלבנה, מסירים את הנתיב לרשימה הלבנה שרוצים להסיר. הוראות מפורטות מופיעות בקטע עדכון של רשימת ההיתרים הקיימת.
כדי לוודא שהרשימה הלבנה הוסרה, מקבלים רשימה של
WorkloadAllowlistאובייקטים באשכול:kubectl get workloadallowlistבפלט, מוודאים שרשימת ההיתרים שרציתם להסיר לא מופיעה.
מוחקים את עומס העבודה מהאשכול. הוראות מפורטות מופיעות במאמרי העזרה של ספק העומס.
מניעת התקנה של רשימת היתרים באשכולות
כדי למנוע את ההתקנה של רשימות היתרים של עומסי עבודה עם הרשאות מיוחדות באשכולות ספציפיים, מציינים מחרוזת ריקה ("") בדגל --autopilot-privileged-admission כשיוצרים או מעדכנים אשכול.
כדי להשבית נתיבים ספציפיים ברשימת ההיתרים של אשכול, משמיטים את הנתיבים האלה מרשימות ההיתרים כשיוצרים או מעדכנים אשכול:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...מחליפים את
ALLOWLIST1_PATH,ALLOWLIST2_PATH,...ברשימה מופרדת בפסיקים של נתיבים למקורות שרוצים להוסיף לרשימת ההיתרים. משמיטים את הנתיבים שרוצים להשבית.כדי להשבית את כל רשימות ההיתרים באשכול קיים, מציינים מחרוזת ריקה כנתיב המאושר:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --autopilot-allowlist-paths=""
פתרון בעיות
אם הסנכרון או פריסת עומס העבודה נכשלים, אפשר לעיין במאמר בנושא פתרון בעיות בפריסת עומסי עבודה עם הרשאות ב-Autopilot.
המאמרים הבאים
- מידע על עומסי העבודה הזמינים משותפי GKE Autopilot
- הרצה של עומסי עבודה עם הרשאות מיוחדות בקוד פתוח ב-GKE Autopilot
- מידע על יכולות האבטחה של GKE Autopilot שמופעלות כברירת מחדל
- קרא את AllowlistSynchronizer CustomResourceDefinition