שימוש באילוצים של מדיניות מוגבלת של תקני אבטחת Pod

‫Policy Controller מגיע עם ספריית ברירת מחדל של תבניות אילוצים שאפשר להשתמש בהן עם חבילת ההגבלות של תקני אבטחת ה-Pod. חבילת הכללים הזו מאפשרת לכם להשיג הרבה מאותן הגנות כמו מדיניות מוגבלת של תקני אבטחה של Kubernetes Pod (PSS), עם אפשרות לבדוק את המדיניות לפני שמפעילים אותה ולהחריג משאבים ספציפיים מהכיסוי.

בדף הזה מוסבר איך להחיל חבילת מדיניות באופן ידני. אפשרות אחרת היא להחיל חבילות מדיניות ישירות.

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

החבילה כוללת את האילוצים האלה, שמוגדרים בהתאם לאמצעי הבקרה הבאים של מדיניות מוגבלת של תקני אבטחה של Kubernetes Pod (PSS):

שם המגבלה תיאור המגבלה שם הבקרה
pss-restricted-v2022-psp-volume-types שימוש בסוגי נפח סוגי נפח אחסון
pss-restricted-v2022-privilege-escalation הגבלת ההסלמה להרשאות הבסיסיות הסלמת הרשאות
pss-restricted-v2022-running-as-non-root הערך runAsNonRoot של מאגר התגים הפעלה כמשתמש לא-ראשי
pss-restricted-v2022-running-as-non-root-user מזהה המשתמש של מאגר התגים הפעלה כמשתמש ללא הרשאות root
pss-restricted-v2022-seccomp פרופיל ה-seccomp שבו נעשה שימוש במאגרי מידע Seccomp
pss-restricted-v2022-capabilities יכולות של Linux יכולות

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

  1. מתקינים ומאתחלים את Google Cloud CLI, שמספק את הפקודות gcloud ו-kubectl שמשמשות בהוראות האלה. אם אתם משתמשים ב-Cloud Shell, ‏ Google Cloud CLI מותקן מראש.
  2. מתקינים את Policy Controller בגרסה 1.11.1 ואילך באשכול עם ספריית ברירת המחדל של תבניות אילוץ.

ביקורת של חבילת המדיניות המוגבלת של תקני האבטחה של Pod

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

אפשר להחיל את כללי המדיניות האלה עם spec.enforcementAction שמוגדר ל-dryrun באמצעות kubectl,‏ kpt או סנכרון תצורות.

kubectl

  1. (אופציונלי) מציגים בתצוגה מקדימה את אילוצי המדיניות באמצעות kubectl:

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022
    
  2. מחילים את אילוצי המדיניות באמצעות kubectl:

    kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022
    

    הפלט שיתקבל:

    k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/pss-restricted-v2022-privilege-escalation created
    k8spspallowedusers.constraints.gatekeeper.sh/pss-restricted-v2022-running-as-non-root created
    k8spspcapabilities.constraints.gatekeeper.sh/pss-restricted-v2022-capabilities created
    k8spspseccomp.constraints.gatekeeper.sh/pss-restricted-v2022-seccomp created
    k8spspvolumetypes.constraints.gatekeeper.sh/pss-restricted-v2022-psp-volume-types created
    
  3. מוודאים שאילוצי המדיניות הותקנו ובודקים אם יש הפרות בכל האשכול:

    kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022
    

    הפלט אמור להיראות כך:

    NAME                                                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/pss-restricted-v2022-privilege-escalation   dryrun               0
    
    NAME                                                                                    ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspallowedusers.constraints.gatekeeper.sh/pss-restricted-v2022-running-as-non-root   dryrun               0
    
    NAME                                                                             ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/pss-restricted-v2022-capabilities   dryrun               0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/pss-restricted-v2022-seccomp   dryrun               0
    
    NAME                                                                                ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspvolumetypes.constraints.gatekeeper.sh/pss-restricted-v2022-psp-volume-types   dryrun               0
    

kpt

  1. מתקינים ומגדירים את kpt. ההוראות האלה מתבססות על שימוש ב-kpt כדי להתאים אישית ולפרוס משאבי Kubernetes.

  2. מורידים את חבילת המדיניות Pod Security Standards (PSS) Restricted v2022 מ-GitHub באמצעות kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022
    
  3. מריצים את הפונקציה set-enforcement-action kpt כדי להגדיר את פעולת האכיפה של המדיניות לערך dryrun:

    kpt fn eval pss-restricted-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
      -- enforcementAction=dryrun
    
  4. מאתחלים את ספריית העבודה באמצעות kpt, שיוצר משאב למעקב אחרי שינויים:

    cd pss-restricted-v2022
    kpt live init
    
  5. מחילים את אילוצי המדיניות באמצעות kpt:

    kpt live apply
    
  6. מוודאים שאילוצי המדיניות הותקנו ובודקים אם יש הפרות בכל האשכול:

    kpt live status --output table --poll-until current
    

    הסטטוס CURRENT מאשר שההתקנה של האילוצים בוצעה בהצלחה.

סנכרון תצורות

  1. מתקינים ומגדירים את kpt. ההוראות האלה מתבססות על שימוש ב-kpt כדי להתאים אישית ולפרוס משאבי Kubernetes.

מפעילים שמשתמשים ב-סנכרון תצורות כדי לפרוס מדיניות באשכולות שלהם יכולים להשתמש בהוראות הבאות:

  1. עוברים לספריית הסנכרון של סנכרון תצורות:

    cd SYNC_ROOT_DIR
    

    כדי ליצור או להוסיף .gitignore עם resourcegroup.yaml:

    echo resourcegroup.yaml >> .gitignore
    

  2. יוצרים ספרייה ייעודית של policies:

    mkdir -p policies
    
  3. מורידים את חבילת המדיניות Pod Security Standards (PSS) Restricted v2022 מ-GitHub באמצעות kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pss-restricted-v2022 policies/pss-restricted-v2022
    
  4. מריצים את הפונקציה set-enforcement-action kpt כדי להגדיר את פעולת האכיפה של המדיניות לערך dryrun:

    kpt fn eval policies/pss-restricted-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. (אופציונלי) מציגים בתצוגה מקדימה את אילוצי המדיניות שייווצרו:

    kpt live init policies/pss-restricted-v2022
    kpt live apply --dry-run policies/pss-restricted-v2022
    
  6. אם ספריית הסנכרון של סנכרון תצורות משתמשת ב-Kustomize, מוסיפים את policies/pss-baseline-v2022 ל-kustomization.yaml הבסיסי. אחרת, מסירים את הקובץ policies/pss-baseline-v2022/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/pss-baseline-v2022/kustomization.yaml
    
  7. דחיפת השינויים למאגר סנכרון תצורות:

    git add SYNC_ROOT_DIR/policies/pss-restricted-v2022
    git commit -m 'Adding Pod Security Standards Restricted audit enforcement'
    git push
    
  8. מאמתים את סטטוס ההתקנה:

    watch gcloud beta container fleet config-management status --project PROJECT_ID
    

    הסטטוס SYNCED מאשר שהמדיניות הותקנה.

הצגת הפרות מדיניות

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

אפשר גם להשתמש בפקודה הבאה כדי לראות את ההפרות באשכול באמצעות kubectl:

kubectl get constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'

אם יש הפרות, אפשר לראות רשימה של הודעות ההפרה לכל אילוץ באמצעות הפקודה:

kubectl get constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'

שינוי פעולת האכיפה של חבילת המדיניות המוגבלת של תקני אבטחה של Pod

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

kubectl

  1. משתמשים ב-kubectl כדי להגדיר את פעולת האכיפה של כללי המדיניות ל-warn:

    kubectl get constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
    
  2. מוודאים שפעולת האכיפה של הגבלות המדיניות עודכנה:

    kubectl get constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022
    

kpt

  1. מריצים את הפונקציה set-enforcement-action kpt כדי להגדיר את פעולת האכיפה של המדיניות לערך warn:

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. החלת האילוצים של מדיניות הארגון:

    kpt live apply
    

סנכרון תצורות

מפעילים שמשתמשים ב-סנכרון תצורות כדי לפרוס מדיניות באשכולות שלהם יכולים להשתמש בהוראות הבאות:

  1. עוברים לספריית הסנכרון של סנכרון תצורות:

    cd SYNC_ROOT_DIR
    
  2. מריצים את הפונקציה set-enforcement-action kpt כדי להגדיר את פעולת האכיפה של המדיניות לערך warn:

    kpt fn eval policies/pss-restricted-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. דחיפת השינויים למאגר סנכרון תצורות:

    git add SYNC_ROOT_DIR/pss-restricted-v2022
    git commit -m 'Adding Pod Security Standards Restricted policy bundle warn enforcement'
    git push
    
  4. מאמתים את סטטוס ההתקנה:

    nomos status
    

    האשכול צריך להציג סטטוס של SYNCED עם המדיניות המותקנת.

בדיקת אכיפת המדיניות

יוצרים משאב לא תואם באשכול באמצעות הפקודה הבאה:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: wp-non-compliant
  labels:
    app: wordpress
spec:
  containers:
    - image: wordpress
      name: wordpress
      ports:
      - containerPort: 80
        hostPort: 80
        name: wordpress
EOF

בקרת הכניסה צריכה להפיק אזהרה שמפרטת את הפרות המדיניות שמתרחשות במשאב הזה, כמו בדוגמה הבאה:

Warning: [pss-baseline-v2022-host-ports] The specified hostNetwork and hostPort are not allowed, pod: wp-non-compliant. Allowed values: {"max": 0, "min": 0}
pod/wp-non-compliant created

הסרת חבילת מדיניות מוגבלת של תקני אבטחת Pod

במקרה הצורך, אפשר להסיר את חבילת המדיניות המוגבלת של תקני האבטחה של Pod מהאשכול.

kubectl

  • משתמשים ב-kubectl כדי להסיר את כללי המדיניות:

    kubectl delete constraint -l policycontroller.gke.io/bundleName=pss-restricted-v2022
    

kpt

  • מסירים את כללי המדיניות:

    kpt live destroy
    

סנכרון תצורות

מפעילים שמשתמשים ב-סנכרון תצורות כדי לפרוס מדיניות באשכולות שלהם יכולים להשתמש בהוראות הבאות:

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

    git rm -r SYNC_ROOT_DIR/policies/pss-restricted-v2022
    git commit -m 'Removing Pod Security Standards Restricted policies'
    git push
    
  2. בודקים את הסטטוס:

    nomos status
    

    האשכול אמור להציג סטטוס של SYNCED עם המשאבים שהוסרו.