שימוש ב-breakglass‏ (GKE, ‏ Distributed Cloud)

בדף הזה מוסבר איך להשתמש ב-breakglass עם Binary Authorization.

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

במדריך הזה אנחנו יוצאים מנקודת הנחה שהגדרתם את Binary Authorization.

סקירה כללית

אתם משתמשים ב-breakglass כדי לפרוס קובץ אימג' של קונטיינר ש-Binary Authorization חוסם.

התכונה Breakglass מספקת פתרון חירום שמאפשר לעקוף את האכיפה של מדיניות Binary Authorization כדי לאפשר פריסה של תמונות, גם כאלה שהמדיניות לא מאפשרת.

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

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

כדי להפעיל את breakglass, מוסיפים שדה label למפרט של ה-Pod עם דגל המדיניות break-glass.

הדגמה של אירוע breakglass

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

עדכון המדיניות של Binary Authorization לדחיית כל הבקשות לפריסה

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

מסוף Google Cloud

  1. נכנסים לדף Binary Authorization במסוף Google Cloud .

    מעבר אל Binary Authorization

  2. לוחצים על עריכת המדיניות.

  3. בדף Edit policy, בקטע Project default rule, רושמים את מצב ההערכה המקורי ולוחצים על Disallow all images.

  4. לוחצים על שמירת המדיניות.

gcloud

  1. כדי לשמור את המדיניות הקיימת בפרויקט הנוכחי, מריצים את הפקודה הבאה:

    gcloud container binauthz policy export > SAVE_POLICY_YAML
    

    מחליפים את SAVE_POLICY_YAML בנתיב של קובץ הייצוא – לדוגמה, /tmp/save_policy.yaml.

  2. יוצרים קובץ מדיניות:

    cat > TEST_POLICY_YAML << EOM
    admissionWhitelistPatterns:
    defaultAdmissionRule:
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      evaluationMode: ALWAYS_DENY
    globalPolicyEvaluationMode: DISABLE
    EOM
    

    מחליפים את TEST_POLICY_YAML בנתיב לקובץ, לדוגמה, /tmp/policy.yaml.

  3. מייבאים את המדיניות:

    gcloud container binauthz policy import TEST_POLICY_YAML
    

    מחליפים את TEST_POLICY_YAML בנתיב לקובץ, לדוגמה, /tmp/policy.yaml.

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

ניסיון לפרוס תמונה

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

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

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: breakglass-pod
    spec:
      containers:
      - name: container-name
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. יצירת הפוד באמצעות kubectl:

    kubectl create -f /tmp/create_pod.yaml
    

    מוצגת שגיאה שמציינת שהתמונה נחסמה בגלל המדיניות. השגיאה דומה לזו:

    Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "breakglass-pod" is forbidden: image policy webhook backend denied one or more images: Image gcr.io/google-samples/hello-app denied by Binary Authorization default
    admission rule. Denied by always_deny admission rule`.

הפעלת breakglass ופריסה מחדש

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

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

  1. יוצרים קובץ תצורה בפורמט YAML.

    הפקודה הבאה יוצרת את הקובץ שמכיל את התווית break-glass ופרטים אחרים שנדרשים ליצירת ה-Pod:

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      labels:
        image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. יוצרים את הפוד באמצעות kubectl:

    kubectl create -f /tmp/create_pod.yaml
    

    שימו לב לפלט: pod/pod-name created

חיפוש רשומה של breakglass ביומני הביקורת של Cloud

צפייה באירועי Breakglass ביומני ביקורת של Cloud.

קובצי PodSpec ישנים יותר שמציינים annotations: alpha.image-policy.k8s.io/break-glass גם מפעילים את התכונה 'שבירת זכוכית' ומפיקים רשומות ביומן. השימוש בהערה הזו כבר לא מומלץ, אבל הוא עדיין נתמך כדי לשמור על תאימות לאחור.

הסרת המשאבים

כדי למחוק את ה-Pod ולהשבית את breakglass:

  1. מוחקים את ה-Pod:

      kubectl delete -f /tmp/create_pod.yaml
      

    מוודאים שקיבלתם פלט כמו pod <var>pod-name</var> deleted.

  2. מסירים את הבלוק label ממפרט ה-Pod.

  3. איפוס המדיניות:

    מסוף Google Cloud

    1. נכנסים לדף Binary Authorization במסוף Google Cloud .

      מעבר אל Binary Authorization

    2. לוחצים על עריכת המדיניות.

    3. בדף Edit policy (עריכת מדיניות), בקטע Project default rule (כלל ברירת המחדל של הפרויקט), מאפסים את מצב ההערכה להגדרה הקודמת.

    4. לוחצים על שמירת המדיניות.

    gcloud

    1. מייבאים מחדש את המדיניות המקורית.

        gcloud container binauthz policy import SAVE_POLICY_YAML
      

      מחליפים את SAVE_POLICY_YAML בנתיב לקובץ שיצרתם קודם במדריך הזה.

    המדיניות שלך תאופס.

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