התקנה של Policy Controller

בדף הזה מוסבר איך להתקין את Policy Controller. ‫Policy Controller בודק, מבקר ואוכף את התאימות של האשכולות למדיניות שקשורה לאבטחה, לתקנות או לכללים עסקיים.

הדף הזה מיועד לאדמינים ממחלקת IT ולמפעילים שרוצים לוודא שכל המשאבים שפועלים בפלטפורמת הענן עומדים בדרישות התאימות של הארגון, על ידי מתן ותחזוקה של אוטומציה לביקורת או לאכיפה. במאמר תפקידים ומשימות נפוצים של משתמשי GKE מפורט מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Google Cloud .

‫Policy Controller זמין אם אתם משתמשים ב-Google Kubernetes Engine. מידע נוסף זמין במחירון של Google Kubernetes Engine.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:

  1. מתקינים ומפעילים את Google Cloud CLI, שמספק את הפקודות gcloud,‏ kubectl ו-nomos שבהן משתמשים בהוראות האלה. אם כבר התקנתם את ה-CLI של gcloud, הריצו את gcloud components update כדי לקבל את הגרסה העדכנית. אם אתם משתמשים ב-Cloud Shell, Google Cloud CLI כבר מותקן מראש.
  2. מוודאים ש-Open Policy Agent Gatekeeper בקוד פתוח לא מותקן באשכול. אם כן, הסירו את Gatekeeper לפני שאתם מתקינים את Policy Controller.

  3. מפעילים את ממשקי ה-API הנדרשים:

    console

    מפעילים את Policy Controller API.

    הפעלת Policy Controller API

    gcloud

    מריצים את הפקודה הבאה:

    gcloud services enable anthospolicycontroller.googleapis.com
    
  4. יוצרים אשכול שפועלת בו גרסת Kubernetes‏ 1.14.x ואילך, או מוודאים שיש לכם גישה לאשכול כזה. יכול להיות ש-Policy Controller יפעל בגרסאות של Kubernetes שקודמות ל-1.14.x, אבל המוצר לא יפעל כמו שצריך.

  5. מקצים את התפקידים הנדרשים ב-IAM למשתמש שרושם את האשכול.

  6. אם אתם מתכוונים להשתמש ב-Google Cloud CLI כדי להגדיר את Policy Controller, רשמו את האשכול לfleet עכשיו. אם אתם מתכננים להשתמש במסוף Google Cloud , אתם צריכים לרשום את האשכולות כשאתם מתקינים את Policy Controller.

  7. אם אתם משתמשים באשכולות שמצורפים ל-GKE, ודאו שבאשכול AKS אין את התוסף Azure Policy, והימנעו מלתייג מרחבי שמות באמצעות המפתח control-plane.

  8. אם אתם משתמשים ב-Google Distributed Cloud ב-VMware או ב-bare metal, ודאו שאתם מתקינים את Policy Controller באשכול משתמשים. אי אפשר להתקין את Policy Controller באשכול אדמין.

התקנת Policy Controller

המסוף

כדי להתקין את Policy Controller במסוף Google Cloud :

  1. במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.

    למדיניות

  2. ‫ לוחצים על Configure Policy Controller.

  3. אופציונלי: כדי לשנות את הגדרות ברירת המחדל של ה-Fleet, לוחצים על Customize fleet settings. בתיבת הדו-שיח שמופיעה:

    1. בקטע הוספה/עריכה של חבילות מדיניות, לוחצים על המתג הרלוונטי כדי לכלול או להחריג חבילת מדיניות.
    2. בקטע Edit Policy Controller configuration:

      1. כדי להפעיל את ה-webhook לשינוי, מסמנים את התיבה Enable mutation webhook. התכונה הזו לא תואמת לאשכולות Autopilot.
      2. בתיבה Audit interval, מזינים את משך הזמן בשניות בין שתי בדיקות עוקבות.
      3. בתיבה מרחבי שמות פטורים, מזינים רשימה של מרחבי שמות. ‫Policy Controller מתעלם מאובייקטים במרחבי השמות האלה. התכונה הזו לא תואמת לאשכולות Autopilot.

        שיטות מומלצות:

        כדי למנוע שגיאות בסביבה, מומלץ להחריג מרחבי שמות של המערכת. בדף החרגת מרחבי שמות מוסבר איך להחריג מרחבי שמות, ויש בו רשימה של מרחבי שמות נפוצים שנוצרו על ידי שירותי Google Cloud .

      4. כדי להפעיל אילוצים רפרנציאליים, מסמנים את התיבה Enable Constraint Templates that reference to objects other than the object currently being evaluated.

      5. ברשימה Version, בוחרים את הגרסה של Policy Controller שבה רוצים להשתמש.

    3. לוחצים על שמירת השינויים.

  4. לוחצים על Configure (הגדרה).

  5. בתיבת הדו-שיח לאישור, לוחצים על אישור. אם לא הפעלתם בעבר את Policy Controller, לחיצה על Confirm תפעיל את ה-API של anthospolicycontroller.googleapis.com ותתקין את Policy Controller באשכולות שלכם.

  6. אופציונלי: סנכרון אשכולות קיימים להגדרות ברירת המחדל:

    1. בכרטיסייה הגדרות, לוחצים על סנכרון עם הגדרות הצי.
    2. ברשימה Clusters in the fleet, בוחרים את האשכולות שרוצים לסנכרן ולוחצים על Sync to fleet settings. הפעולה הזו יכולה להימשך כמה דקות.

תועברו לכרטיסייה Settings של Policy Controller. אחרי שמתקינים ומגדירים את Policy Controller באשכולות, בעמודות הסטטוס מופיע הערך Installed . התהליך יכול להימשך כמה דקות.

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:

  1. יוצרים קובץ בשם 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 .

  2. כדי להחיל את הגדרת ברירת המחדל על הצי:

    gcloud container fleet policycontroller enable \
      --fleet-default-member-config=fleet-default.yaml
    
  3. כדי לוודא שההגדרה הוחלה, מריצים את הפקודה הבאה:

    gcloud container fleet policycontroller describe
    
  4. כדי להסיר את הגדרת ברירת המחדל ברמת הצי, מריצים את הפקודה הבאה:

    gcloud container fleet policycontroller enable \
      --no-fleet-default-member-config
    

Terraform

כדי להפעיל את Policy Controller בכל ה-fleet עם ספריית התבניות שמותקנת כברירת מחדל, אפשר להיעזר בדוגמה הבאה:

resource "google_gke_hub_feature" "policycontroller" {
  name     = "policycontroller"
  location = "global"
  project  = data.google_project.default.project_id

  fleet_default_member_config {
    policycontroller {
      policy_controller_hub_config {
        install_spec = "INSTALL_SPEC_ENABLED"
        policy_content {
          bundles {
            bundle = "pss-baseline-v2022"
          }
          template_library {
            installation = "ALL"
          }
        }
      }
    }
  }
}

אפשר להעביר כמה בלוקים של bundle כדי להתקין כל אחת מהחבילות שמופיעות בסקירה הכללית של חבילות Policy Controller.

מידע נוסף על השימוש ב-Terraform זמין במאמר תמיכה של Terraform ב-Policy Controller.

אימות ההתקנה של Policy Controller

אחרי ההתקנה של Policy Controller, אתם יכולים לוודא שהיא הושלמה בהצלחה.

המסוף

כך עושים את זה:

  1. במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.

    למדיניות

  2. בכרטיסייה Settings, בטבלת האשכולות, בודקים את העמודה Policy controller status. אם ההתקנה בוצעה בהצלחה, הסטטוס יהיה Installed .

gcloud

מריצים את הפקודה הבאה:

gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME

אם ההתקנה הצליחה, יוצג הכיתוב membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE.

אימות ההתקנה של ספריית תבניות האילוצים

כשמתקינים את Policy Controller, ספריית תבניות האילוצים מותקנת כברירת מחדל. ההתקנה עשויה להימשך כמה דקות. אתם יכולים לוודא שספריית התבניות הושלמה בהצלחה.

המסוף

כך עושים את זה:

  1. במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.

    למדיניות

  2. בכרטיסייה Settings, בטבלת האשכולות, לוחצים על המספר שמופיע בעמודה Bundles installed. בחלונית Policy content status, אם ספריית התבניות הותקנה בהצלחה, הסטטוס יהיה Installed .

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-system Namespace יחד איתו.

הגדרת המדדים

כברירת מחדל, 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, מבצעים את השלבים הבאים:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.

    למדיניות

  2. בכרטיסייה Settings, לצד האשכול שאת הגרסה שלו רוצים לשדרג, בוחרים באפשרות Edit configuration.
  3. מרחיבים את התפריט Edit Policy Controller configuration.
  4. מהרשימה הנפתחת Version, בוחרים את הגרסה שאליה רוצים לשדרג.
  5. לוחצים על שמירת השינויים.

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 באשכולות, צריך לבצע את הפעולות הבאות:

  1. במסוף Google Cloud , נכנסים לדף Policy בקטע Posture Management.

    למדיניות

  2. בכרטיסייה Settings, בטבלת האשכולות, לוחצים על Edit בעמודה Edit configuration.
  3. בחלונית האשכול, מרחיבים את התפריט About Policy Controller.
  4. בוחרים באפשרות Uninstall Policy Controller.
  5. מאשרים את ההסרה לפי ההוראות בתיבת הדו-שיח לאישור ולוחצים על Confirm.

כשההתקנה של Policy Controller מוסרת, בעמודות הסטטוס מופיע הערך Not installed .

gcloud

כדי להסיר את Policy Controller, מריצים את הפקודה הבאה:

gcloud container fleet policycontroller disable \
  --memberships=MEMBERSHIP_NAME

מחליפים את MEMBERSHIP_NAME בשם החברות של האשכול הרשום שבו רוצים להשבית את Policy Controller. אפשר לציין כמה מינויים, מופרדים בפסיקים.

‫RBAC והרשאות ב-Policy Controller

‫Policy Controller כולל עומסי עבודה עם הרשאות גבוהות. ההרשאות לעומסי העבודה האלה מפורטות במסמכי התיעוד של Open Policy Agent Gatekeeper.

המאמרים הבאים