עדכון מדיניות ב-Binary Authorization
במאמר הזה מוסבר איך להחריג תמונות בכללי מדיניות של Binary Authorization.
במסמך הזה, מעדכנים את המדיניות כדי להחריג קובצי אימג' של קונטיינרים ב-Artifact Registry מאכיפת Binary Authorization, ומגדירים את כלל ברירת המחדל כך שלא תותר פריסה של כל הקונטיינרים האחרים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Binary Authorization APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Binary Authorization APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init - אם אתם לא משתמשים ב-Cloud Shell, אתם צריכים להתקין את
kubectl.
יצירת אשכול עם Binary Authorization מופעל
יוצרים אשכול GKE עם Binary Authorization מופעל. זהו האשכול שבו רוצים להפעיל את קובצי האימג' של הקונטיינרים שפרסתם.
מסוף Google Cloud
נכנסים לדף Clusters של GKE במסוףGoogle Cloud .
במסוף מוצגת רשימה של אשכולות GKE בפרויקט Google Cloud שלכם.
לוחצים על יצירת אשכול.
מזינים
test-clusterבשדה שם.
בוחרים באפשרות Zonal באפשרויות של Location Type.
בוחרים באפשרות
us-central1-aמהרשימה הנפתחת Zone.לוחצים על הקישור אבטחה כדי להציג את החלונית אבטחה.
בחלונית אבטחה, בוחרים באפשרות הפעלת הרשאה בינארית.
בוחרים באפשרות אכיפה בלבד.
לוחצים על יצירה.
gcloud
מריצים את הפקודה gcloud container clusters create עם הסימון --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE.
gcloud container clusters create \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--zone us-central1-a \
test-cluster
צפייה במדיניות ברירת המחדל
כברירת מחדל, מדיניות Binary Authorization מוגדרת כך שכל קובצי האימג' של קונטיינרים יכולים להיפרס.
מסוף Google Cloud
כדי לראות את מדיניות ברירת המחדל:
נכנסים לדף Binary Authorization במסוף Google Cloud .
פרטי המדיניות מוצגים במסוף.
לוחצים על עריכת המדיניות.
בקטע Project Default Rule, האפשרות Allow All Images מסומנת.
gcloud
כדי לראות את מדיניות ברירת המחדל, מייצאים את קובץ ה-YAML של המדיניות באופן הבא:
gcloud container binauthz policy export
כברירת מחדל, הקובץ מכיל את התוכן הבא:
globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
evaluationMode: ALWAYS_ALLOW
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/<var>PROJECT_ID</var>/policy
API בארכיטקטורת REST
כדי לראות את מדיניות ברירת המחדל, מאחזרים אותה בפורמט JSON באופן הבא:
curl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "x-goog-user-project: ${PROJECT_ID}" \
"https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
ה-API בארכיטקטורת REST מחזיר את הפלט הבא:
{
"name": "projects/PROJECT_ID/policy",
"globalPolicyEvaluationMode": "ENABLE",
"defaultAdmissionRule": {
"evaluationMode": "ALWAYS_ALLOW",
"enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
}
}
אפשר להשתמש רק בתמונות שפטורות מאישור
בקטע הזה מוסבר איך לשנות את המדיניות כדי להחריג תמונות ולא לאפשר פריסה של תמונות אחרות.
מסוף Google Cloud
כדי לשנות את המדיניות:
חוזרים לדף Binary Authorization במסוף Google Cloud .
לוחצים על עריכת המדיניות.
בוחרים באפשרות Disallow All Images (איסור שימוש בכל התמונות).
בקטע Images exempt from deployment rules (תמונות שפטורות מכללי הפריסה), מרחיבים את Image paths (נתיבי תמונות).
לוחצים על הוספת נתיבי תמונות.
Artifact Registry
בשדה נתיב תמונה חדש, מדביקים את הנתיב הבא ממאגר Artifact Registry:
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0לוחצים על סיום כדי לשמור את נתיב התמונה.
לוחצים על שמירת המדיניות.
gcloud
כדי לשנות את המדיניות כך שתאפשר גישה לתמונות לדוגמה מ-Artifact Registry, צריך לבצע את הפעולות הבאות:
מייצאים את קובץ ה-YAML של המדיניות:
gcloud container binauthz policy export > /tmp/policy.yaml
בכלי לעריכת טקסט, משנים את
evaluationModeמ-ALWAYS_ALLOWל-ALWAYS_DENYומוסיפים תמונות שפטורות מבדיקה ל-admissionWhitelistPatterns.כדי להחריג את התמונות הבאות לדוגמה מ-Artifact Registry, משנים את קובץ ה-YAML של המדיניות כך:
admissionWhitelistPatterns: - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/<var>PROJECT_ID</var>/policyמייבאים את קובץ ה-YAML של המדיניות בחזרה ל-Binary Authorization:
gcloud container binauthz policy import /tmp/policy.yaml
API בארכיטקטורת REST
כדי לשנות את המדיניות:
יוצרים קובץ טקסט עם המדיניות המעודכנת בפורמט JSON:
cat > /tmp/policy.json << EOM { "name": "projects/${PROJECT_ID}/policy", "admissionWhitelistPatterns": [ { "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" } ], "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_DENY", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } } EOMשולחים את המדיניות המעודכנת אל ה-API בארכיטקטורת REST:
curl -X PUT \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/policy.json \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
בדיקת המדיניות
כדי לבדוק את המדיניות על ידי פריסת תמונה שהוספתם לרשימת ההיתרים Exempt image, צריך לבצע את הפעולות הבאות:
פורסים תמונה שפטורה מאימות באשכול.
מסוף Google Cloud
פריסת תמונה שפטורה מאימות:
נכנסים לדף Clusters של GKE במסוףGoogle Cloud .
לוחצים על פריסה.
במסוף מוצגת בקשה להזנת פרטים על הפריסה.
בוחרים באפשרות Existing Container Image (תמונת מאגר תגים קיימת).
מזינים את הנתיב של קובץ האימג' של הקונטיינר.
Artifact Registry
כדי לפרוס תמונה מ-Artifact Registry, מזינים את הפקודה הבאה:
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0לוחצים על Continue.
מזינים
hello-serverבשדה שם האפליקציה.לוחצים על פריסה.
kubectl
Artifact Registry
פריסת התמונה מ-Artifact Registry:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
מוודאים שהתמונה הורשתה לפריסה:
מסוף Google Cloud
כדי לוודא שהתמונה נפרסה, מבצעים את הפעולות הבאות:
- עוברים לדף GKE.
- עוברים לדף Workloads.
עומס העבודה
hello-serverמופיע עם סמל ירוק, שמציין שהוא פועל.kubectl
כדי לוודא שהתמונה הורשתה לפריסה, מזינים את הפקודה הבאה:
kubectl get pods
התמונה תפעל.
מחיקת הפוד.
מסוף Google Cloud
בדף Workloads ב-GKE:
בוחרים את עומס העבודה hello-server.
לוחצים על Delete.
כשמופיעה בקשה למחוק משאבים, לוחצים על מחיקה.
kubectl
kubectl delete pod hello-server
הסרת המשאבים
כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים:
מוחקים את האשכול שיצרתם ב-GKE:
המסוף
כדי למחוק את האשכול:
נכנסים לדף Clusters של GKE במסוףGoogle Cloud .
בוחרים את אשכול
test-clusterולוחצים על מחיקה.
gcloud
כדי למחוק את האשכול, מזינים את הפקודה הבאה:
gcloud container clusters delete \
--zone=us-central1-a \
test-cluster
המאמרים הבאים
- מידע נוסף על מתן פטור לתמונות, כולל שימוש בתווים כלליים כדי לתת פטור לכמה תמונות, זמין במאמר מתן פטור לתמונות.
- במדריכים הבאים מוסבר איך להגדיר ולאכוף מדיניות שדורשת אישורים:
- אפשר גם לקרוא את המשאבים שלנו בנושא DevOps ולעיין בתוכנית המחקר DevOps Research and Assessment (DORA).