סימוכין ל-YAML של מדיניות

בדף הזה מופיע מידע עזר על כללי מדיניות של Binary Authorization, כפי שמצוין בפורמט YAML. כשמגדירים מדיניות באמצעות ממשק שורת הפקודה, עורכים קובץ בפורמט YAML שתואם למפרט הזה. דוגמאות למדיניות בפורמט YAML מופיעות במאמר מדיניות לדוגמה.

קובצי YAML של מדיניות הם בפורמט הבא:

name: projects/<PROJECT_ID>/policy
admissionWhitelistPatterns:
- namePattern: <MATCHING_PATTERN>
- ...
globalPolicyEvaluationMode: <GLOBAL_EVAL_MODE>
defaultAdmissionRule:
  <ADMISSION_RULE>
clusterAdmissionRules:
  <CLUSTER_SPECIFIER>:
    <ADMISSION_RULE>
  ...

צמתים

פורמט ה-YAML כולל את הצמתים הבאים ברמה העליונה:

צומת תיאור חובה
name שם המדיניות. כן
admissionWhitelistPatterns מציין תמונות של מאגרים שתמיד מותר לפרוס. לא
globalPolicyEvaluationMode מציינת אם להחיל מדיניות מערכת שפוטרת תמונות מערכת בבעלות Google. לא
defaultAdmissionRule הכלל שבו המערכת משתמשת כשלא חל כלל ספציפי. כן
clusterAdmissionRules מציינים כללים שחלים על אשכולות ספציפיים. לא

name

צומת name מכיל את שם המדיניות בפורמט הבא:

name: projects/PROJECT_ID/policy

כאשר PROJECT_ID הוא שם הפרויקט ב- Google Cloudשבו מוגדרת המדיניות.

לדוגמה:

name: projects/example-project/policy

admissionWhitelistPatterns

admissionWhitelistPatterns מציינת רשימת היתרים של תמונות קונטיינרים שמוחרגות מאכיפת המדיניות. מציינים את הנתיב לתמונות ב-Container Registry וב-Artifact Registry, במאגר אחר או בהפניה מקומית בצומת המשנה namePattern:

admissionWhitelistPatterns:
  - namePattern: MATCHING_PATTERN
  - ...

מחליפים את MATCHING_PATTERN בנתיב לתמונה אחת או בתבנית תואמת שמכילה אחד מסמלי התווים הכלליים לחיפוש (*, **).

חשוב לזכור שתווים כלליים לחיפוש תקפים רק בסוף התבנית. לדוגמה, ‫gcr.io/my-project/nginx* היא תבנית תקינה, אבל gcr.io/my-project/n*x לא תקינה. התווים הכלליים * מתאימים רק לתמונות בספרייה שצוינה. לדוגמה, gcr.io/my-project/nginx* תואם ל-gcr.io/my-project/nginx:latest, אבל לא ל-gcr.io/my-project/nginx-images/nginx. התו הכללי לחיפוש ** מתאים לתמונות בספריות משנה. לדוגמה, הנתיב gcr.io/my-project/nginx** תואם ל-gcr.io/my-project/nginx-1.14.2/image:latest.

בדוגמה הבאה מוסיפים לרשימת התמונות שפטורות מהמדיניות מאגרי תמונות שמכילים תמונות נפוצות של Google Kubernetes Engine‏ (GKE), תמונה שנמצאת בכתובת gcr.io/example-project/helloworld והפניה מקומית לתמונה:

admissionWhitelistPatterns:
  - namePattern: gcr.io/google-containers/*
  - namePattern: k8s.gcr.io/**
  - namePattern: gke.gcr.io/**
  - namePattern: gcr.io/gke-release/asm/*
  - namePattern: gcr.io/stackdriver-agents/*
  - namePattern: gcr.io/example-project/helloworld
  - namePattern: loc-ref

תבניות של רשימת ההיתרים

כדי להוסיף לרשימת ההיתרים את כל קובצי האימג' של הקונטיינרים שהמיקום שלהם במאגר תואם לנתיב שצוין:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/*

כדי להוסיף תמונה ספציפית לרשימת ההיתרים:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld

כדי להוסיף לרשימת ההיתרים גרסה מתויגת נוכחית:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld:latest
  - namePattern: gcr.io/example-project/helloworld:my-tag
  - namePattern: gcr.io/example-project/helloworld:v1.*

כדי להוסיף לרשימת ההיתרים גרסה ספציפית של תמונה לפי ה-digest שלה:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld@sha256:77b0b75136b9bd0fd36fb50f4c92ae0dbdbbe164ab67885e736fa4374e0cbb8c

כדי להוסיף תמונות לרשימת ההיתרים בספריות משנה של נתיב נתון:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/**

globalPolicyEvaluationMode

מצב הערכת מדיניות המערכת הוא הגדרת מדיניות שגורמת ל-Binary Authorization להעריך מדיניות מערכת לפני הערכת המדיניות שאתם מגדירים. מדיניות המערכת מסופקת על ידי Google, והיא מחריגה רשימה של תמונות מערכת שמתוחזקות על ידי Google מהערכה נוספת של המדיניות. כשההגדרה הזו מופעלת, תמונות שנדרשות על ידי GKE לא נחסמות על ידי אכיפת המדיניות. המערכת מעריכה את מדיניות המערכת לפני ההערכה של מדיניות המשתמשים, וגם בנוסף לה, כולל admissionWhitelistPatterns.

כדי לאפשר את כל תמונות המערכת שמתוחזקות על ידי Google, מגדירים את המאפיין globalPolicyEvaluationMode לערך ENABLE:

globalPolicyEvaluationMode: ENABLE

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

globalPolicyEvaluationMode: DISABLE

defaultAdmissionRule

defaultAdmissionRule מציין את כלל ברירת המחדל של המדיניות. כלל ברירת המחדל מגדיר את המגבלות שחלות על כל האימג'ים של קונטיינרים שלא פטורים, למעט אלה שיש להם כלל ספציפי משלהם לאשכול. כדי לציין את כלל ברירת המחדל, משתמשים באוסף ADMISSION_RULE:

defaultAdmissionRule:
  ADMISSION_RULE

בדוגמה הבאה מוצג כלל ברירת מחדל שמאפשר פריסה רק של קובצי אימג' של קונטיינרים שאושרו על ידי גורם מאמת (attestor) שצוין. אם לא כל המאשרים הנדרשים אישרו את התמונה, Binary Authorization חוסם את הפריסה וכותב ליומן הביקורת.

defaultAdmissionRule:
  evaluationMode: REQUIRE_ATTESTATION
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  requireAttestationsBy:
  - projects/example-project/attestors/secure-build

clusterAdmissionRules

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

clusterAdmissionRules:
  CLUSTER_SPECIFIER:
    ADMISSION_RULE

כאשר CLUSTER_SPECIFIER הוא מזהה המשאב של האשכול שהכלל חל עליו בפורמט location.name (לדוגמה, us-east1-a.prod-cluster).

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

clusterAdmissionRules:
  us-east1-a.prod-cluster:
    evaluationMode: REQUIRE_ATTESTATION
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    requireAttestationsBy:
    - projects/example-project/attestors/secure-build
    - projects/example-project/attestors/prod-qualified

אוספים של צמתים

ADMISSION_RULE

ADMISSION_RULE הוא אוסף של צמתים שמציינים את האילוצים של הכלל בפורמט הבא:

evaluationMode: EVAL_MODE
enforcementMode: ENFORCEMENT_MODE
requireAttestationsBy:
- ATTESTOR
- ...

גם defaultAdmissionRule וגם clusterAdmissionRule מפנים לאוסף הזה.

evaluationMode

המאפיין evaluationMode מציין את הפעולה ש-Binary Authorization מבצע כדי להעריך אם לפרוס קובץ אימג' של קונטיינר. הערכים האפשריים הם:

  • ALWAYS_ALLOW: תמיד לאפשר פריסה של תמונות שנבדקו על ידי הכלל הזה
  • ALWAYS_DENY: דחייה תמיד של פריסת תמונות שנבדקו על ידי הכלל הזה
  • REQUIRE_ATTESTATION: דרישה שאחד או יותר מהמאשרים יאשרו את השחרור לפני הפריסה

אם evaluationMode הוא REQUIRE_ATTESTATION, עליך לספק הפניה לנותני האישור הנדרשים ב-requireAttestationsBy.

enforcementMode

המאפיין enforcementMode מציין את הפעולה ש-Binary Authorization מבצע אם קובץ אימג' של קונטיינר לא עומד במגבלות שמוגדרות בכלל. הערכים האפשריים הם:

  • ENFORCED_BLOCK_AND_AUDIT_LOG: חוסם את הפריסה וכותב ליומן הביקורת.
  • DRYRUN_AUDIT_LOG_ONLY: מאפשר פריסה של תמונות שלא עומדות בדרישות וכותב פרטים על ההפרה ביומן הביקורת.

רוב כללי הייצור משתמשים במצב האכיפה ENFORCED_BLOCK_AND_AUDIT_LOG. ‫DRYRUN_AUDIT_LOG_ONLY משמש בעיקר לבדיקת מדיניות בסביבה שלכם לפני שהיא נכנסת לתוקף.

requireAttestationsBy

requireAttestationsBy מציינת גורם מאמת (attestor) אחד או יותר שצריכים לאשר את השחרור לפני שאפשר לפרוס קובץ אימג' של קונטיינר. הדבר נדרש רק לכללי REQUIRE_ATTESTATION. הפורמט של הצומת הזה הוא:

requireAttestationsBy:
  - projects/PROJECT_ID/attestors/ATTESTOR_NAME
  - ...

כאשר PROJECT_ID הוא שם הפרויקט שבו מוגדרים המאשרים, ו-ATTESTOR_NAME הוא שם המאשר שנדרש לחתום על הגרסה.

בדוגמה הבאה אפשר לראות איך מציינים מאמתים:

requireAttestationsBy:
- projects/example-project/attestors/secure-build
- projects/example-project/attestors/prod-qualified