בדף הזה מוסבר איך להשתמש בפקודה של 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.
לפני שמתחילים
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-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 שלא תואם למדיניות.
כדי ליצור מדיניות שכוללת בדיקה של ספרייה מהימנה, מריצים את הפקודות הבאות:
יוצרים קובץ מדיניות לפלטפורמה:
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יוצרים את המדיניות:
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- 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- POLICY_ID: מזהה מדיניות פלטפורמה לבחירתכם. אם המדיניות נמצאת בפרויקט אחר, אפשר להשתמש בשם המשאב המלא:
הערכה של תמונה תואמת
בקטע הזה, תבדקו מפרט של Pod שתואם למדיניות שיצרתם קודם במדריך הזה. ההערכה מפיקה פסק דין שמציין שהמפרט של ה-Pod הוא CONFORMANT, כי המפרט של ה-Pod מפנה לתמונה שנמצאת בספרייה שצוינה ב-trustedDirPatterns בבדיקה של ספרייה מהימנה.
יוצרים את מפרט ה-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מריצים את הפקודה הבאה כדי להשתמש בשירות להערכת מדיניות:
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
-
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 בבדיקה של ספרייה מהימנה.
כדי להעריך אימג' שלא עומד בדרישות, מריצים את הפקודות הבאות:
יוצרים את מפרט ה-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מריצים את הפקודה הבאה כדי להשתמש בשירות להערכת מדיניות:
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
-
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
-