עומסי עבודה של GKE צריכים לגשת לממשקי API של GCP ללא צורך בניהול מפתחות של חשבונות שירות.
→הפעלה והגדרה של Workload Identity באשכול ה-GKE. מיפוי חשבונות שירות של Kubernetes (KSA) לחשבונות שירות של Google (GSA).
למה: מבטל את הסיכון לדליפת מפתחות של חשבונות שירות על ידי שימוש בפרטי כניסה קצרי טווח, המסתובבים אוטומטית, הנגזרים מאסימוני KSA.
מקור↗
מתן גישה ליישומי אינטרנט פנימיים מכל רשת על בסיס זהות משתמש ומצב מכשיר, ללא VPN.
→השתמשו ב-Identity-Aware Proxy (IAP) עם Access Context Manager. הגדירו רמות גישה המבוססות על IP, מצב מכשיר (באמצעות Endpoint Verification) וזהות משתמש.
למה: מעביר את בקרת הגישה מההיקף הרשתי למשתמשים ומכשירים בודדים, תוך אכיפת עקרונות "אפס אמון" (zero-trust).
מקור↗
צינור CI/CD (לדוגמה, GitHub Actions, GitLab) צריך לגשת למשאבי GCP ללא פרטי כניסה ארוכי טווח.
→השתמשו ב-Workload Identity Federation. צרו מאגר ספקים עבור IdP חיצוני (לדוגמה, GitHub OIDC) והגדירו תנאי תכונות להגבלת גישה למאגרים או ענפים ספציפיים.
למה: אימות ללא מפתח עבור עומסי עבודה חיצוניים. המערכת החיצונית מספקת אסימון משלה, המוחלף באסימון GCP קצר טווח.
אכיפת מדיניות אבטחת IAM בכל הארגון, כגון מניעת יצירת מפתחות של חשבונות שירות או הגבלת הרשאות IAM לדומיינים ספציפיים.
→השתמשו באילוצי מדיניות ארגונית (Organization Policy constraints) כגון `iam.disableServiceAccountKeyCreation` ו-`iam.allowedPolicyMemberDomains`.
למה: מדיניות ארגונית עוברת בירושה ולא ניתנת לביטול על ידי בעלי פרויקטים, מה שמבטיח מצב אבטחה עקבי.
משתמש זקוק לגישת ניהול זמנית, ניתנת לביקורת ומאושרת לסביבת ייצור לצורך אירוע.
→השתמשו ב-Privileged Access Manager (PAM) עבור גישת "just-in-time" (JIT). המשתמש מבקש תפקיד ספציפי לזמן מוגבל, העובר תהליך אישור.
למה: מבטל הרשאות קבועות, שהן סיכון אבטחתי משמעותי. הגישה מוגבלת בזמן, מוצדקת ומבוקרת במלואה.
צוותים מרובים חולקים אשכול GKE. כל צוות חייב לנהל משאבים רק בתוך ה-namespace שלו.
→העניקו תפקיד IAM `roles/container.clusterViewer` ברמת הפרויקט. השתמשו ב-Kubernetes RBAC `Role` וב-`RoleBinding` בתוך כל namespace כדי להעניק הרשאות ספציפיות (לדוגמה, עריכה, צפייה).
למה: מפריד אימות ברמת האשכול (IAM) מאישור ברמת ה-namespace (Kubernetes RBAC), ומספק בקרה עדינה מרובת דיירים.
יש לקרוא לממשקי API באמצעות פרטי כניסה קצרי טווח במקום מפתחות סטטיים.
→השתמשו בהתחזות (impersonation) של חשבון שירות. העניקו ל-"principal" את התפקיד `roles/iam.serviceAccountTokenCreator` בחשבון שירות יעד כדי ליצור אסימוני גישה קצרי טווח של OAuth 2.0.
למה: מונע הפצה וניהול של מפתחות ארוכי טווח. אסימונים פוקעים אוטומטית (ברירת מחדל שעה), ומפחיתים את הסיכון במקרה של פריצה.
קבלן זקוק לגישה למשאבים ספציפיים, אך הגישה חייבת לפוג אוטומטית לאחר 30 יום.
→העניקו את תפקיד ה-IAM הנדרש עם תנאי IAM מבוסס זמן, לדוגמה, `request.time < timestamp("YYYY-MM-DDTHH:MM:SSZ")`.
למה: מבצע אוטומציה של ביטול גישה, מונע ניקוי ידני ומבטיח שהגישה לא תוארך בטעות.
אפשרו רק תמונות קונטיינר שנחתמו על ידי צינור ה-CI/CD להיפרס לאשכולות GKE בייצור.
→יישמו Binary Authorization. צרו אישור (attestation) בצינור ה-CI לחתימת תמונות. הגדירו מדיניות Binary Authorization באשכול ה-GKE לדרוש אישור זה.
למה: אוכף שרשרת אספקת תוכנה מאובטחת על ידי מניעת הפעלת תמונות שלא נבדקו או שונו בייצור.
מקור↗
העניקו הרשאות למשאבים על בסיס התגים שהוקצו להם, לא על שמות משאבים בודדים.
→השתמשו בתנאי IAM עם ביטויי תגי משאבים, כמו `resource.matchTag("123456789/env", "prod")`.
למה: מאפשר בקרת גישה מבוססת תכונות (ABAC) ניתנת להרחבה. הרשאות הן דינמיות ומיושמות אוטומטית כאשר משאבים מתויגים.
אפשרו לפרויקט שירות לפרוס מכונות וירטואליות בפרויקט מארח של Shared VPC מבלי להעניק זכויות מנהל רשת.
→בפרויקט המארח, העניקו לחשבון השירות של פרויקט השירות את התפקיד `roles/compute.networkUser` על תת-הרשת(ות) הספציפית(ות) שעליו להשתמש בהן.
למה: פועל לפי עיקרון ההרשאות המינימליות. פרויקטי שירות יכולים להשתמש ברשת אך אינם יכולים לשנות אותה (לדוגמה, שינוי כללי חומת אש), אשר נשארת מנוהלת באופן מרכזי.
משתמש עם הרשאת `storage.admin` אינו יכול ליצור bucket. עליכם לזהות את שורש הבעיה.
→בדקו קיום מדיניות מניעה (Deny Policy) של IAM ברמה גבוהה יותר (תיקייה, ארגון) השוללת את הרשאת `storage.buckets.create`.
למה: מדיניות מניעה של IAM תמיד גוברת על כל מדיניות הרשאה. זהו כלי עוצמתי לאכיפת גבולות אבטחה שאינם ניתנים למשא ומתן.
הפעלת SSO למשתמשי Active Directory מקומיים לגישה למסוף Google Cloud.
→השתמשו ב-Google Cloud Directory Sync (GCDS) כדי לסנכרן זהויות ל-Cloud Identity. הגדירו איחוד (SAML) בין Cloud Identity ל-AD FS (או IdP אחר).
למה: שומר על Active Directory כמקור האמת לזהויות תוך מתן חווית SSO מאוחדת וחלקה למשתמשים.