התקנה של Policy Controller

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

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

אם אתם משתמשים ב-Google Kubernetes Engine, תוכלו להשתמש ב-Policy Controller. מידע נוסף זמין במחירון של 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, עליכם לרשום את האשכול בצי עכשיו. אם אתם מתכננים להשתמש במסוף 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 (הגדרת Policy Controller).

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

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

      1. כדי להפעיל את mutation webhook, מסמנים את תיבת הסימון Enable mutation webhook. התכונה הזו לא תואמת לאשכולות Autopilot.
      2. בתיבה Audit interval (מרווח בין בדיקות), מזינים את התקופה בשניות בין שתי בדיקות עוקבות.
      3. בתיבה Exemptible namespaces (מרחבי שמות שניתן להחריג), מזינים רשימה של מרחבי שמות. הכלי 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 תפעיל את anthospolicycontroller.googleapis.com API ותתקין את Policy Controller באשכולות שלכם.

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

    1. בכרטיסייה הגדרות, לוחצים על סנכרון עם הגדרות הצי.
    2. ברשימה Clusters in the fleet, בוחרים את האשכולות שרוצים לסנכרן ולוחצים על Sync to fleet 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, מבצעים את השלבים הבאים:

  1. יוצרים קובץ בשם fleet-default.yaml שמכיל את הגדרות ברירת המחדל של Policy Controller. השדה installSpec הוא חובה כדי להפעיל הגדרות ברירת מחדל ברמת הארגון. בדוגמה הזו מוצגות האפשרויות שניתן להגדיר:

    # 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 בכל הצי עם ספריית התבניות שמותקנת כברירת מחדל, אפשר להיעזר בדוגמה הבאה:

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. בכרטיסייה הגדרות, בטבלת האשכול, בוחרים את המספר שמופיע בעמודה חבילות שהותקנו. בחלונית 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 (או הגיבוב) שמשמש ליצירת 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. בכרטיסייה הגדרות, לצד האשכול שרוצים לשדרג את הגרסה שלו, בוחרים באפשרות עריכת ההגדרה.
  3. מרחיבים את התפריט Edit Policy Controller configuration (עריכת ההגדרה של Policy Controller).
  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. בכרטיסייה הגדרות, בטבלת האשכולות, לוחצים על עריכה בעמודה עריכת הגדרה.
  3. בחלונית של האשכול, מרחיבים את התפריט About Policy Controller (מידע על Policy Controller).
  4. בוחרים באפשרות הסרת Policy Controller.
  5. כדי לאשר את ההסרה, פועלים לפי ההוראות בתיבת הדו-שיח לאישור ולוחצים על אישור.

כשמסירים את 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.

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