שימוש בשירות להערכת מדיניות

בדף הזה מוסבר איך להשתמש בפקודה של Google Cloud CLI בשירות להערכת מדיניות כדי להעריך במהירות אם תמונה או משאב Kubernetes תואמים למדיניות פלטפורמה שמבוססת על בדיקת אימות רציפה.

סקירה כללית

שירות הערכת המדיניות הוא תכונה של Binary Authorization שאפשר להשתמש בה עם תיקוף רציף (CV) של מדיניות פלטפורמה שמבוססת על בדיקות. שירות הערכת המדיניות בודק לפי דרישה אם קובץ אימג' של קונטיינר שציינתם תואם למדיניות של פלטפורמת CV. שירות הערכת המדיניות זמין כפקודה ב-CLI של gcloud וכשיטה projects.platforms.gke.policies.evaluate.

הכלי לבדיקת תאימות בודק אם יש הפרות מדיניות לפחות פעם ב-24 שעות. לכן, יכולות לחלוף עד 24 שעות עד שאירועי CV יופיעו ברישום ביומן אחרי הפעלת CV או פריסת משאב Kubernetes. בנוסף, כלי ה-CV יוצר רשומות ביומן כשהוא מזהה הפרת מדיניות. ‫CV לא יוצר רשומות ביומן כשמשאבי Kubernetes תואמים למדיניות.

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

בעזרת שירות הערכת המדיניות, אפשר לקבוע במהירות אם התמונה עומדת בדרישות המדיניות.

כשמשתמשים בשירות, מציינים את כתובת ה-URL של התמונה, ישירות או בתוך משאב Kubernetes, ומציינים גם את השם של המדיניות שמבוססת על בדיקת GKE CV.

כך, שירות הערכת המדיניות יכול לעזור לכם לפתח מדיניות ולנפות באגים במשאבי Kubernetes שלא עומדים בדרישות לפני שאתם משתמשים ב-CV.

התכונה הזו תומכת רק במדיניות שמבוססת על בדיקת GKE CV.

בנוסף, התמונות צריכות לכלול תקציר תמונה בפורמט IMAGE_URL@IMAGE_DIGEST, אלא אם מתקיים אחד מהתנאים הבאים:

  • בדיקה של ספרייה מהימנה: הבדיקה עוברת אם התמונה נמצאת בספרייה שציינתם.
  • רשימות היתרים לתמונות שמוחרגות: כל הבדיקות האחרות דורשות תקציר תמונה בפורמט IMAGE_URL@IMAGE_DIGEST.

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

  1. התקינו את ה-CLI של Google Cloud.

  2. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  3. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות לשימוש בשירות להערכת מדיניות, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד Policy Evaluator (roles/binaryauthorization.policyEvaluator) בפרויקט המדיניות. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

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

הערכת מדיניות הפלטפורמה שמבוססת על בדיקות

שירות הערכת המדיניות יכול להעריך כתובת URL של תמונה יחידה או תמונה שצוינה במשאב Kubernetes בפורמט JSON או YAML.

הערכה של כללי מדיניות בפלטפורמה שמבוססים על בדיקות באמצעות משאב Kubernetes

כדי להעריך מדיניות עם משאב Kubernetes באמצעות ה-CLI של gcloud, מריצים את הפקודה הבאה:

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • POLICY_ID: המזהה של מדיניות הפלטפורמה. אם המדיניות נמצאת בפרויקט אחר, אפשר להשתמש בשם המשאב המלא: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: הנתיב של מפרט ה-Pod.

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

‫Linux,‏ macOS או Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --resource=POD_SPECIFICATION_PATH

‏Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --resource=POD_SPECIFICATION_PATH

Windows‏ (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --resource=POD_SPECIFICATION_PATH

כדי להעריך מדיניות שמציינת את הפלטפורמה, שצריך להגדיר ל-gke, מריצים את הפקודה הבאה:

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • POLICY_ID: המזהה של מדיניות הפלטפורמה. אם המדיניות נמצאת בפרויקט אחר, אפשר להשתמש בשם המשאב המלא: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: הנתיב של מפרט ה-Pod.

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

‫Linux,‏ macOS או Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --platform=gke \
    --resource=POD_SPECIFICATION_PATH

‏Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --platform=gke `
    --resource=POD_SPECIFICATION_PATH

Windows‏ (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --platform=gke ^
    --resource=POD_SPECIFICATION_PATH

הערכת מדיניות פלטפורמה מבוססת-בדיקה באמצעות כתובת URL של תמונה

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

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • POLICY_ID: המזהה של מדיניות הפלטפורמה. אם המדיניות נמצאת בפרויקט אחר, אפשר להשתמש בשם המשאב המלא: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • IMAGE_URL: הנתיב של מפרט ה-Pod.

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

‫Linux,‏ macOS או Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --image=IMAGE_URL

‏Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --image=IMAGE_URL

Windows‏ (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --image=IMAGE_URL

כשמשתמשים בדגל --image, מרחב השמות וחשבון השירות נחשבים כריקים. אם המדיניות שאתם בודקים משתמשת ב-checksets בהיקף של kubernetesNamespace או kubernetesServiceAccount, יכול להיות שהתוצאות שיוחזרו לא יהיו מדויקות.

בדיקת פלט הפקודה

פלט הפקודה מכיל פסיקה ברמה העליונה שמציינת את מצב התאימות של ה-Pod. אלו המצבים של התאמה שיכולים להיות מוחזרים:

  • CONFORMANT: משאב Kubernetes תואם למדיניות הפלטפורמה.
  • NON_CONFORMANT: משאב Kubernetes לא עומד בדרישות של מדיניות הפלטפורמה.
  • ERROR: ההערכה הסתיימה בשגיאה.

התשובה מכילה גם תוצאות מקוננות עם מידע מפורט על מצב התאימות של כל הבדיקות שבוצעו לכל תמונה שכלולה במשאב Kubernetes.

כל בלוק ImageResults מכיל שדה explanation שאנשים יכולים לקרוא, שבו מתואר למה התמונה תאושר או תידחה.

כדי להקל על יצירת סקריפטים, הפקודה מחזירה קוד יציאה שאינו אפס אם מפרט ה-Pod לא תואם למדיניות או אם ההערכה נכשלת.

בדוגמאות הפלט הבאות מוצגים שני מקרים. במקרה הראשון, משאב Kubernetes תואם למדיניות. במקרה השני, המשאב לא תואם למדיניות.

צפייה בתוצאה תואמת

בקטע הזה מתואר הפלט של בדיקת שירות להערכת מדיניות, שבה ה-Pod תואם למדיניות הפלטפורמה.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: CONFORMANT
          explanation: Image is in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    verdict: CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: CONFORMANT
verdict: CONFORMANT

בפלט, פסק דין של CONFORMANT מוחזר לסוגי ההערכה הבאים:

  • בדיקה: התמונה עומדת בדרישות של הבדיקה הספציפית – במקרה הזה, בדיקת הספרייה המהימנה.
  • CheckSet: התמונה עומדת בכל הבדיקות ב-CheckSet.
  • מדיניות: התמונה עומדת בדרישות המדיניות.

מכיוון שהתמונה תואמת למדיניות, הפקודה מחזירה קוד יציאה של אפס.

הצגת תוצאה שלא עומדת בדרישות

בקטע הזה מתואר הפלט של בדיקת שירות להערכת מדיניות, שבה ה-Pod לא עומד בדרישות המדיניות של הפלטפורמה.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: NON_CONFORMANT
          explanation: Image isn't in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
    verdict: NON_CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: NON_CONFORMANT
verdict: NON_CONFORMANT

בפלט, מכיוון שהתמונה לא תואמת לבדיקה האישית, במקרה הזה לבדיקה של ספריית מהימנה, ולכן לכל הבדיקות, פסק הדין ברמה העליונה הוא NON_CONFORMANT, והפקודה מחזירה קוד יציאה שאינו אפס.

בדיקת שירות הערכת המדיניות

בקטע הזה מוסבר איך אפשר לבדוק את שירות הערכת המדיניות. יוצרים מדיניות פלטפורמה מבוססת-בדיקה שמכילה את הבדיקה של ספריית המהימנות. בבדיקה הראשונה, תוכלו להעריך מפרט של Pod שתואם למדיניות. בבדיקה השנייה, מעריכים מפרט של Pod שלא תואם למדיניות.

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

  1. יוצרים קובץ מדיניות לפלטפורמה:

    cat << EOF > my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - displayName: "My trusted directory check"
          trustedDirectoryCheck:
            trustedDirPatterns:
            - "us-docker.pkg.dev/google-samples/containers/gke/"
        displayName: "My default check set"
    EOF
    
  2. יוצרים את המדיניות:

    לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

    • POLICY_ID: מזהה מדיניות פלטפורמה לבחירתכם. אם המדיניות נמצאת בפרויקט אחר, אפשר להשתמש בשם המשאב המלא: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • POLICY_PATH: נתיב לקובץ המדיניות.
    • POLICY_PROJECT_ID: מזהה פרויקט המדיניות.

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

    ‫Linux,‏ macOS או Cloud Shell

    gcloud beta container binauthz policy create POLICY_ID \
        --platform=gke \
        --policy-file=POLICY_PATH \
        --project=POLICY_PROJECT_ID

    ‏Windows (PowerShell)

    gcloud beta container binauthz policy create POLICY_ID `
        --platform=gke `
        --policy-file=POLICY_PATH `
        --project=POLICY_PROJECT_ID

    Windows‏ (cmd.exe)

    gcloud beta container binauthz policy create POLICY_ID ^
        --platform=gke ^
        --policy-file=POLICY_PATH ^
        --project=POLICY_PROJECT_ID

    gcloud beta container binauthz policy create POLICY_ID \
    --platform=gke \
    --policy-file=my-policy.yaml
    

הערכה של תמונה תואמת

בקטע הזה, תבדקו מפרט של Pod שתואם למדיניות שיצרתם קודם במדריך הזה. ההערכה מפיקה פסק דין שמציין שהמפרט של ה-Pod הוא CONFORMANT, כי המפרט של ה-Pod מפנה לתמונה שנמצאת בספרייה שצוינה ב-trustedDirPatterns בבדיקה של ספרייה מהימנה.

  1. יוצרים את מפרט ה-Pod:

    cat << EOF > my-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
          }
          ]
      }
    }
    EOF
    
  2. מריצים את הפקודה הבאה כדי להשתמש בשירות להערכת מדיניות:

    לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

    • POLICY_ID: המזהה של מדיניות הפלטפורמה. אם המדיניות נמצאת בפרויקט אחר, אפשר להשתמש בשם המשאב המלא: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • my-conforming-pod.json: הנתיב של מפרט ה-Pod.

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

    ‫Linux,‏ macOS או Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-conforming-pod.json

    ‏Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-conforming-pod.json

    Windows‏ (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-conforming-pod.json

בדיקת תמונה לא תואמת

בקטע הזה תבדקו מפרט של Pod שלא תואם למדיניות שיצרתם קודם במדריך הזה. ההערכה מפיקה פסק דין שמציין שהמפרט של ה-Pod הוא NON_CONFORMANT, כי המפרט של ה-Pod מפנה לתמונה שנמצאת מחוץ לספרייה שצוינה ב-trustedDirPatterns בבדיקה של ספרייה מהימנה.

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

  1. יוצרים את מפרט ה-Pod:

    cat << EOF > my-non-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0"
          }
        ]
      }
    }
    EOF
    
  2. מריצים את הפקודה הבאה כדי להשתמש בשירות להערכת מדיניות:

    לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

    • POLICY_ID: המזהה של מדיניות הפלטפורמה. אם המדיניות נמצאת בפרויקט אחר, אפשר להשתמש בשם המשאב המלא: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • my-non-conforming-pod.json: הנתיב של מפרט ה-Pod.

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

    ‫Linux,‏ macOS או Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-non-conforming-pod.json

    ‏Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-non-conforming-pod.json

    Windows‏ (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-non-conforming-pod.json

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