בדף הזה מוסבר איך להתקין את Policy Controller. Policy Controller בודק, מבקר ואוכף את התאימות של האשכולות למדיניות שקשורה לאבטחה, לתקנות או לכללים עסקיים.
הדף הזה מיועד לאדמינים ממחלקת IT ולמפעילים שרוצים לוודא שכל המשאבים שפועלים בפלטפורמת הענן עומדים בדרישות התאימות של הארגון, על ידי מתן ותחזוקה של אוטומציה לביקורת או לאכיפה. במאמר תפקידים ומשימות נפוצים של משתמשי GKE מפורט מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Google Cloud .
Policy Controller זמין אם אתם משתמשים ב-Google Kubernetes Engine. מידע נוסף זמין במחירון של Google Kubernetes Engine.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:
- מתקינים ומפעילים את Google Cloud CLI, שמספק את הפקודות
gcloud,kubectlו-nomosשבהן משתמשים בהוראות האלה. אם כבר התקנתם את ה-CLI של gcloud, הריצו אתgcloud components updateכדי לקבל את הגרסה העדכנית. אם אתם משתמשים ב-Cloud Shell, Google Cloud CLI כבר מותקן מראש. מוודאים ש-Open Policy Agent Gatekeeper בקוד פתוח לא מותקן באשכול. אם כן, הסירו את Gatekeeper לפני שאתם מתקינים את Policy Controller.
מפעילים את ממשקי ה-API הנדרשים:
console
מפעילים את Policy Controller API.
gcloud
מריצים את הפקודה הבאה:
gcloud services enable anthospolicycontroller.googleapis.comיוצרים אשכול שפועלת בו גרסת Kubernetes 1.14.x ואילך, או מוודאים שיש לכם גישה לאשכול כזה. יכול להיות ש-Policy Controller יפעל בגרסאות של Kubernetes שקודמות ל-1.14.x, אבל המוצר לא יפעל כמו שצריך.
אם אתם מתכוונים להשתמש ב-Google Cloud CLI כדי להגדיר את Policy Controller, רשמו את האשכול לfleet עכשיו. אם אתם מתכננים להשתמש במסוף Google Cloud , אתם צריכים לרשום את האשכולות כשאתם מתקינים את Policy Controller.
אם אתם משתמשים באשכולות שמצורפים ל-GKE, ודאו שבאשכול AKS אין את התוסף Azure Policy, והימנעו מלתייג מרחבי שמות באמצעות המפתח
control-plane.אם אתם משתמשים ב-Google Distributed Cloud ב-VMware או ב-bare metal, ודאו שאתם מתקינים את Policy Controller באשכול משתמשים. אי אפשר להתקין את Policy Controller באשכול אדמין.
התקנת Policy Controller
המסוף
כדי להתקין את Policy Controller במסוף Google Cloud :
- במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.
add לוחצים על Configure Policy Controller.
אופציונלי: כדי לשנות את הגדרות ברירת המחדל של ה-Fleet, לוחצים על Customize fleet settings. בתיבת הדו-שיח שמופיעה:
- בקטע הוספה/עריכה של חבילות מדיניות, לוחצים על המתג הרלוונטי כדי לכלול או להחריג חבילת מדיניות.
בקטע Edit Policy Controller configuration:
- כדי להפעיל את ה-webhook לשינוי, מסמנים את התיבה Enable mutation webhook. התכונה הזו לא תואמת לאשכולות Autopilot.
- בתיבה Audit interval, מזינים את משך הזמן בשניות בין שתי בדיקות עוקבות.
בתיבה מרחבי שמות פטורים, מזינים רשימה של מרחבי שמות. Policy Controller מתעלם מאובייקטים במרחבי השמות האלה. התכונה הזו לא תואמת לאשכולות Autopilot.
שיטות מומלצות: כדי למנוע שגיאות בסביבה, מומלץ להחריג מרחבי שמות של המערכת. בדף החרגת מרחבי שמות מוסבר איך להחריג מרחבי שמות, ויש בו רשימה של מרחבי שמות נפוצים שנוצרו על ידי שירותי Google Cloud .
כדי להפעיל אילוצים רפרנציאליים, מסמנים את התיבה Enable Constraint Templates that reference to objects other than the object currently being evaluated.
ברשימה Version, בוחרים את הגרסה של Policy Controller שבה רוצים להשתמש.
לוחצים על שמירת השינויים.
לוחצים על Configure (הגדרה).
בתיבת הדו-שיח לאישור, לוחצים על אישור. אם לא הפעלתם בעבר את Policy Controller, לחיצה על Confirm תפעיל את ה-API של
anthospolicycontroller.googleapis.comותתקין את Policy Controller באשכולות שלכם.אופציונלי: סנכרון אשכולות קיימים להגדרות ברירת המחדל:
- בכרטיסייה הגדרות, לוחצים על סנכרון עם הגדרות הצי.
- ברשימה Clusters in the fleet, בוחרים את האשכולות שרוצים לסנכרן ולוחצים על Sync to fleet settings. הפעולה הזו יכולה להימשך כמה דקות.
תועברו לכרטיסייה Settings של Policy Controller. אחרי שמתקינים ומגדירים את Policy Controller באשכולות, בעמודות הסטטוס מופיע הערך Installed check_circle. התהליך יכול להימשך כמה דקות.
gcloud
מפעילים את Policy Controller באמצעות הפקודה הבאה:
gcloud container fleet policycontroller enable \
--memberships=MEMBERSHIP_NAME
אפשר להגדיר שדות נוספים כדי להגדיר את Policy Controller. לדוגמה, יכול להיות שתרצו להגדיר ל-Policy Controller להחריג מרחבי שמות מסוימים מהאכיפה.
כדי לראות את הרשימה המלאה של השדות שאפשר להגדיר, עיינו במסמכי התיעוד של Policy Controller Google Cloud CLI או הריצו את gcloud container fleet policycontroller enable --help.
כדי להגדיר את Policy Controller ברמת ה-Fleet:
יוצרים קובץ בשם
fleet-default.yamlשמכיל את הגדרות ברירת המחדל של Policy Controller. השדהinstallSpecנדרש כדי להפעיל את ברירות המחדל ברמת ה-fleet. בדוגמה הזו מוצגות האפשרויות שאפשר להגדיר:# cat fleet-default.yaml policyControllerHubConfig: installSpec: INSTALL_SPEC_ENABLED # Uncomment to set default deployment-level configurations. # deploymentConfigs: # admission: # containerResources: # limits: # cpu: 1000m # memory: 8Gi # requests: # cpu: 500m # memory: 4Gi # Uncomment to set policy bundles that you want to install by default. # policyContent: # bundles: # cis-k8s-v1.5.1: # exemptedNamespaces: # - "namespace-name" # Uncomment to exempt namespaces from admission. # exemptableNamespaces: # - "namespace-name" # Uncomment to enable support for referential constraints # referentialRulesEnabled: true # Uncomment to disable audit, adjust value to set audit interval # auditIntervalSeconds: 0 # Uncomment to log all denies and dryrun failures # logDeniesEnabled: true # Uncomment to enable mutation # mutationEnabled: true # Uncomment to adjust the value to set the constraint violation limit # constraintViolationLimit: 20 # ... other fields ...שיטות מומלצות: כדי למנוע שגיאות בסביבה, מומלץ להחריג מרחבי שמות של המערכת. בדף החרגת מרחבי שמות מוסבר איך להחריג מרחבי שמות, ויש בו רשימה של מרחבי שמות נפוצים שנוצרו על ידי שירותי Google Cloud .
כדי להחיל את הגדרת ברירת המחדל על הצי:
gcloud container fleet policycontroller enable \ --fleet-default-member-config=fleet-default.yamlכדי לוודא שההגדרה הוחלה, מריצים את הפקודה הבאה:
gcloud container fleet policycontroller describeכדי להסיר את הגדרת ברירת המחדל ברמת הצי, מריצים את הפקודה הבאה:
gcloud container fleet policycontroller enable \ --no-fleet-default-member-config
Terraform
כדי להפעיל את Policy Controller בכל ה-fleet עם ספריית התבניות שמותקנת כברירת מחדל, אפשר להיעזר בדוגמה הבאה:
אפשר להעביר כמה בלוקים של bundle כדי להתקין כל אחת מהחבילות שמופיעות בסקירה הכללית של חבילות Policy Controller.
מידע נוסף על השימוש ב-Terraform זמין במאמר תמיכה של Terraform ב-Policy Controller.
אימות ההתקנה של Policy Controller
אחרי ההתקנה של Policy Controller, אתם יכולים לוודא שהיא הושלמה בהצלחה.
המסוף
כך עושים את זה:
- במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.
- בכרטיסייה Settings, בטבלת האשכולות, בודקים את העמודה Policy controller status. אם ההתקנה בוצעה בהצלחה, הסטטוס יהיה Installed check_circle.
gcloud
מריצים את הפקודה הבאה:
gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME
אם ההתקנה הצליחה, יוצג הכיתוב membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE.
אימות ההתקנה של ספריית תבניות האילוצים
כשמתקינים את Policy Controller, ספריית תבניות האילוצים מותקנת כברירת מחדל. ההתקנה עשויה להימשך כמה דקות. אתם יכולים לוודא שספריית התבניות הושלמה בהצלחה.
המסוף
כך עושים את זה:
- במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.
- בכרטיסייה Settings, בטבלת האשכולות, לוחצים על המספר שמופיע בעמודה Bundles installed. בחלונית Policy content status, אם ספריית התבניות הותקנה בהצלחה, הסטטוס יהיה Installed check_circle.
gcloud
מריצים את הפקודה הבאה:
kubectl get constrainttemplates
הפלט אמור להיראות כמו בדוגמה הבאה:
NAME AGE k8sallowedrepos 84s k8scontainerlimits 84s k8spspallowprivilegeescalationcontainer 84s ...[OUTPUT TRUNCATED]...
כשמתקינים תבנית אילוץ מסוימת בצורה נכונה, השדה status.created שלה הוא true.
אינטראקציות של Policy Controller עם סנכרון הגדרות
אם אתם משתמשים ב-Policy Controller עם סנכרון תצורות, חשוב שתכירו את האינטראקציות הבאות עם משאבים שמאוחסנים במקור המידע המהימן, כמו מאגר Git, שמסונכרנים על ידי סנכרון תצורות:
אי אפשר לסנכרן תבנית אילוצים שהיא גם חלק מספריית התבניות, אלא אם ספריית תבניות האילוצים מושבתת.
אם רוצים לסנכרן את המשאב
Configשמאוחסן במרחב השמותgatekeeper-system, צריך להגדיר את המשאבConfigרק במקור המידע המהימן. אסור להגדיר אתgatekeeper-systemNamespaceיחד איתו.
הגדרת המדדים
כברירת מחדל, Policy Controller מנסה לייצא מדדים גם ל-Prometheus וגם ל-Cloud Monitoring. יכול להיות שתצטרכו לבצע שלבי הגדרה נוספים, כמו מתן הרשאות, כדי לאפשר ל-Policy Controller לייצא מדדים. מידע נוסף זמין במאמר שימוש במדדים של Policy Controller.
ניהול ספריית תבניות האילוצים
במאמר יצירת אילוצים מוסבר איך להסיר או להתקין תבניות אילוצים, את האילוצים שמשויכים אליהן או את ספריית תבניות האילוצים.
מתן פטור למרחבי שמות מאכיפה
אתם יכולים להגדיר את Policy Controller כך שיתעלם מאובייקטים במרחב שמות. מידע נוסף זמין במאמר החרגת מרחבי שמות מ-Policy Controller.
שינוי משאבים
Policy Controller פועל גם כ-webhook לשינוי. מידע נוסף זמין במאמר שינוי משאבים.
הצגת הגרסה של Policy Controller
כדי לגלות באיזו גרסה של Gatekeeper Policy Controller משתמש, מציגים את תג התמונה באמצעות הפקודה הבאה:
kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
-o="jsonpath={.spec.template.spec.containers[0].image}"
תג ה-Git (או ה-hash) שמשמש ליצירת Gatekeeper ומספר הגרסה של ConfigManagement Operator נכללים בתג התמונה באופן הבא:
.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER
לדוגמה, בתמונה הבאה:
gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
-
anthos1.3.2הוא מספר הגרסה. -
480baacהוא התג של Git. -
0הוא מספר ה-Build.
שדרוג של Policy Controller
לפני שמשדרגים את Policy Controller, כדאי לבדוק בנתוני הגרסה מה השתנה בין הגרסאות.
כדי לשדרג את Policy Controller, מבצעים את השלבים הבאים:
המסוף
- במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.
- בכרטיסייה Settings, לצד האשכול שאת הגרסה שלו רוצים לשדרג, בוחרים באפשרות edit Edit configuration.
- מרחיבים את התפריט Edit Policy Controller configuration.
- מהרשימה הנפתחת Version, בוחרים את הגרסה שאליה רוצים לשדרג.
- לוחצים על שמירת השינויים.
gcloud
מריצים את הפקודה הבאה:
gcloud container fleet policycontroller update \
--version=VERSION \
--memberships=MEMBERSHIP_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
VERSION: הגרסה שאליה רוצים לשדרג -
MEMBERSHIP_NAME: שם המינוי שבחרתם כשנרשמתם לאשכול. כדי למצוא את שם המינוי, מריצים את הפקודהgcloud container fleet memberships list.
הסרת Policy Controller
כדי להסיר את Policy Controller מהאשכולות, פועלים לפי השלבים הבאים.
המסוף
כדי להשבית את Policy Controller באשכולות, צריך לבצע את הפעולות הבאות:
- במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.
- בכרטיסייה Settings, בטבלת האשכולות, לוחצים על Edit edit בעמודה Edit configuration.
- בחלונית האשכול, מרחיבים את התפריט About Policy Controller.
- בוחרים באפשרות Uninstall Policy Controller.
- מאשרים את ההסרה לפי ההוראות בתיבת הדו-שיח לאישור ולוחצים על Confirm.
כשההתקנה של Policy Controller מוסרת, בעמודות הסטטוס מופיע הערך Not installed do_not_disturb_on.
gcloud
כדי להסיר את Policy Controller, מריצים את הפקודה הבאה:
gcloud container fleet policycontroller disable \
--memberships=MEMBERSHIP_NAME
מחליפים את MEMBERSHIP_NAME בשם החברות של האשכול הרשום שבו רוצים להשבית את Policy Controller. אפשר לציין כמה מינויים, מופרדים בפסיקים.
RBAC והרשאות ב-Policy Controller
Policy Controller כולל עומסי עבודה עם הרשאות גבוהות. ההרשאות לעומסי העבודה האלה מפורטות במסמכי התיעוד של Open Policy Agent Gatekeeper.