מדריך מהיר: מעקב אחרי אבטחת Pod באמצעות אימות רציף

איך מתחילים להשתמש בתיקוף רציף (CV) של Binary Authorization עם מדיניות מבוססת-בדיקות במדריך הזה לשימוש מהיר, משתמשים בבדיקות של CV כדי לאמת באופן רציף את הפעלת ה-Pods בתנאים הבאים:

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

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

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

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

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

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם ב- Google Cloud :

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  7. מפעילים את Binary Authorization ואת Google Kubernetes Engine APIs, אם הם עדיין לא מופעלים:

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  8. התקינו את ה-CLI של Google Cloud.

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

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

    gcloud init
  11. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם ב- Google Cloud :

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  12. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

  13. מפעילים את Binary Authorization ואת Google Kubernetes Engine APIs, אם הם עדיין לא מופעלים:

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  14. מתקינים את כלי שורת הפקודה kubectl.
  15. אם כללי המדיניות של Binary Authorization ואשכולות GKE נמצאים בפרויקטים שונים, ודאו ש-Binary Authorization מופעל בשני הפרויקטים.

יצירת מדיניות פלטפורמה

כדי להגדיר מדיניות של CV GKE:

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

    cat << EOF > /tmp/my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - trustedDirectoryCheck:
            trustedDirPatterns:
            - us-central1-docker.pkg.dev/my-project/my-directory
          displayName: My trusted directory check
        - imageFreshnessCheck:
            maxUploadAgeDays: 30
          displayName: My image freshness check
        displayName: My trusted directory and image freshness check set
    EOF
    

    המדיניות הזו בודקת את התנאים הבאים:

    • התמונות של ה-Pods מאוחסנות במאגר Artifact Registry בשם us-central1-docker.pkg.dev/my-project/my-directory.

    • התמונות של ה-Pods הועלו למאגרי Artifact Registry או Container Registry ב-30 הימים האחרונים.

  2. יוצרים את מדיניות הפלטפורמה:

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

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫POLICY_ID: מזהה לבחירתכם
    • ‫POLICY_PROJECT_ID: מזהה הפרויקט של המדיניות

יצירה או עדכון של אשכול

כדי להפעיל את CV באשכול, אפשר ליצור אשכול חדש או לעדכן אשכול קיים.

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

    gcloud beta container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --binauthz-evaluation-mode=POLICY_BINDINGS \
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
        --project=CLUSTER_PROJECT_ID
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫CLUSTER_NAME: שם האשכול
    • ‫LOCATION: המיקום. לדוגמה: us-central1 או asia-south1
    • ‫POLICY_PROJECT_ID: המזהה של הפרויקט שבו מאוחסנת המדיניות
    • ‫POLICY_ID: מזהה המדיניות
    • ‫CLUSTER_PROJECT_ID: מזהה הפרויקט של האשכול

    מחכים שהאשכול ייווצר.

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

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --binauthz-evaluation-mode=POLICY_BINDINGS \
        --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
        --project=CLUSTER_PROJECT_ID
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫CLUSTER_NAME: שם האשכול
    • ‫LOCATION: המיקום. לדוגמה: us-central1 או asia-south1
    • ‫POLICY_PROJECT_ID: המזהה של הפרויקט שבו מאוחסנת המדיניות
    • ‫POLICY_ID: מזהה המדיניות
    • ‫CLUSTER_PROJECT_ID: מזהה הפרויקט של האשכול

    ממתינים עד שהאשכול יעודכן.

פריסת קובץ אימג'

  1. משיגים את פרטי הכניסה של kubectl:

    gcloud container clusters get-credentials CLUSTER_NAME
    
  2. פריסת תמונה:

    kubectl run hello-app \
        --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    

    התמונה us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 עברה את בדיקת הטריות כי היא הועלתה למאגר ב-30 הימים האחרונים. אבל התמונה לא עומדת בדרישות של בדיקת הספרייה המהימנה כי היא לא נמצאת ב-us-central1-docker.pkg.dev/my-project/my-directory. כתוצאה מכך, ב-Cloud Logging נוצרות רשומות יומן של TrustedDirectoryCheck.

צפייה ביומנים

הרשומה ביומן מופיעה ב-Cloud Logging תוך 24 שעות אחרי הפריסה של ה-Pod, אבל יכול להיות שהיא תופיע תוך כמה שעות.

כדי לראות את היומן ב-Cloud Logging, משתמשים במסנן הבא:

logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation"
"policyName"

היומן של Pod hello-app דומה ליומן שבהמשך. יכול להיות שחלק מהשדות יהיו שונים בהתאם למזהה הפרויקט, לשם האשכול וכו'.

{
  "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
  "jsonPayload": {
    "podEvent": {
      "endTime": "2022-11-22T01:14:30.430151Z",
      "policyName": "projects/1234567890/platforms/gke/policies/my-policy",
      "images": [
        {
          "result": "DENY",
          "checkResults": [
            {
              "explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
              "checkSetName": "Default check set",
              "checkSetIndex": "0",
              "checkName": "My trusted directory check",
              "verdict": "NON_CONFORMANT",
              "checkType": "TrustedDirectoryCheck",
              "checkIndex": "0"
            }
          ],
          "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
        }
      ],
      "verdict": "VIOLATES_POLICY",
      "podNamespace": "default",
      "deployTime": "2022-11-22T01:06:53Z",
      "pod": "hello-app"
    },
    "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "project_id": "my-project",
      "location": "us-central1-a",
      "cluster_name": "my-cluster"
    }
  },
  "timestamp": "2022-11-22T01:44:28.729881832Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
  "receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}

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

  • ‫policyName: מדיניות הפלטפורמה שבה השתמש CV כשזיהה את ההפרה
  • ‫checkResults: בלוק של תוצאות שכולל את השדות הבאים:

    • explanation: הודעת שגיאה
    • ‫checkSetName: הערך של displayName עבור קבוצת הבדיקה
    • ‫checkSetIndex: האינדקס של קבוצת הבדיקות במדיניות
    • ‫checkName: השם של הבדיקה
    • ‫checkIndex: האינדקס של הבדיקה בערכת הבדיקות
    • ‫verdict: התוצאה שהובילה ליצירת רשומה ביומן, במקרה הזה NOT_CONFORMANT כי הבדיקה לא עברה.

חלק מהבדיקות יכולות לכלול מידע נוסף שיעזור לכם להבין למה הבדיקה לא עברה.

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

הסרת המשאבים

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

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

אתם יכולים להשבית את המעקב אחרי פגיעויות קריטיות, או גם את Binary Authorization וגם את המעקב אחרי פגיעויות קריטיות באשכול.

השבתה של Binary Authorization באשכול

כדי להשבית את האכיפה של CV ושל Binary Authorization באשכול, מריצים את הפקודה הבאה:

gcloud beta container clusters update CLUSTER_NAME \
    --binauthz-evaluation-mode=DISABLED \
    --location=LOCATION \
    --project=CLUSTER_PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: שם האשכול
  • ‫LOCATION: המיקום של האשכול
  • ‫CLUSTER_PROJECT_ID: מזהה הפרויקט של האשכול

השבתת מעקב אחרי מדיניות שמבוססת על בדיקות באשכול

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

gcloud beta container clusters update CLUSTER_NAME  \
    --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
    --location=LOCATION \
    --project="CLUSTER_PROJECT_ID"

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: שם האשכול
  • ‫LOCATION: המיקום של האשכול
  • ‫CLUSTER_PROJECT_ID: מזהה הפרויקט של האשכול

שימו לב: --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE שווה לדגל הישן יותר --enable-binauthz.

מחיקת המדיניות

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

gcloud beta container binauthz policy delete POLICY_ID \
    --platform=gke \
    --project="POLICY_PROJECT_ID"

מחליפים את מה שכתוב בשדות הבאים:

  • ‫POLICY_ID: מזהה המדיניות
  • ‫POLICY_PROJECT_ID: מזהה הפרויקט של המדיניות

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