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

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

סקירה כללית

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

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

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

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

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

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

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

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

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

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

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

  2. הגדירו שה-CLI של gcloud ישתמש בזהות המאוחדת שלכם.

    איך נכנסים ל-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, מרחב השמות וחשבון השירות נחשבים כריקים. אם המדיניות שאתם בודקים משתמשת בערכות בדיקה שמוגדרות ל-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

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