בדף הזה מוסבר איך אפשר לאבטח פריסות של תמונות ב-Cloud Run וב-Google Kubernetes Engine באמצעות Cloud Build.
כך מגדירים את Binary Authorization כדי לבדוק הצהרות על build ולחסום פריסות של תמונות שלא נוצרו על ידי Cloud Build. התהליך הזה יכול לצמצם את הסיכון לפריסת תוכנה לא מורשית.
לפני שמתחילים
מפעילים את ממשקי ה-API של Cloud Build, Binary Authorization ו-Artifact Registry.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםכדי להשתמש בדוגמאות של שורת הפקודה במדריך הזה, צריך להתקין ולהגדיר את Google Cloud SDK.
שליטה בפריסות באמצעות Binary Authorization
מדיניות ב-Binary Authorization היא קבוצת כללים ששולטים על הפריסה של תמונות. אתם יכולים להגדיר כלל שידרוש אישורים עם חתימה דיגיטלית.
Cloud Build יוצר וחותם על אישורים בזמן הבנייה. באמצעות built-by-cloud-build Binary Authorization, אפשר לאמת את ההצהרות ולפרוס רק קובצי אימג' שנוצרו על ידי Cloud Build.
כדי ליצור את built-by-cloud-build attestor בפרויקט, מריצים build בפרויקט הזה.
כדי לאפשר פריסה רק של תמונות שנבנו על ידי Cloud Build, מבצעים את השלבים הבאים:
המסוף
נכנסים לדף Binary Authorization במסוף Google Cloud :
בכרטיסייה מדיניות, לוחצים על עריכת המדיניות.
בתיבת הדו-שיח Edit Policy (עריכת מדיניות), בוחרים באפשרות Allow only images that have been approved by all of the following attestors (אפשר להשתמש רק בתמונות שאושרו על ידי כל המאשרים הבאים).
לוחצים על הוספת מאשרים.
בתיבת הדו-שיח הוספת מאשרים:
- בוחרים באפשרות Add by project and attestor name ומבצעים את השלבים הבאים:
- בשדה Project name, מזינים את הפרויקט שבו מריצים את Cloud Build.
- לוחצים על השדה שם המאשר ורואים שהמאשר
built-by-cloud-buildזמין. - לחץ על
built-by-cloud-build.
אפשר גם ללחוץ על הוספה לפי מזהה משאב של גורם מאמת (attestor). בשדה מזהה משאב המאמת, מזינים
projects/PROJECT_ID/attestors/built-by-cloud-buildמחליפים את
PROJECT_IDבפרויקט שבו מריצים את Cloud Build.
- בוחרים באפשרות Add by project and attestor name ומבצעים את השלבים הבאים:
לוחצים על הוספת מאשר אחד.
לוחצים על שמירת המדיניות.
gcloud
מייצאים את המדיניות הקיימת לקובץ באמצעות הפקודה הבאה:
gcloud container binauthz policy export > /tmp/policy.yamlעורכים את קובץ המדיניות.
עורכים אחד מהכללים הבאים:
defaultAdmissionRuleclusterAdmissionRulesistioServiceIdentityAdmissionRuleskubernetesServiceAccountAdmissionRules
מוסיפים בלוק
requireAttestationsByלכלל אם הוא לא קיים כבר.בבלוק
requireAttestationsBy, מוסיפיםprojects/PROJECT_ID/attestors/built-by-cloud-buildמחליפים את
PROJECT_IDבפרויקט שבו מריצים את Cloud Build.שומרים את קובץ המדיניות.
מייבאים את קובץ המדיניות.
gcloud container binauthz policy import /tmp/policy.yamlקובץ מדיניות לדוגמה שמכיל את ההפניה אל
built-by-cloud-build-attestor:defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/PROJECT_ID/attestors/built-by-cloud-build name: projects/PROJECT_ID/policyמחליפים את
PROJECT_IDבמזהה הפרויקט שבו מריצים את Cloud Build.
אפשר לראות שגיאות במדיניות בהודעות היומן של Binary Authorization עבור GKE או Cloud Run.
שימוש במצב פרימטר לבדיקות
במצב פרימטר לבדיקות, Binary Authorization בודק את התאימות למדיניות בלי לחסום את הפריסה בפועל. במקום זאת, הודעות סטטוס בנושא עמידה בדרישות המדיניות נרשמות ביומן ב-Cloud Logging. אפשר להשתמש ביומנים האלה כדי לקבוע אם מדיניות החסימה פועלת בצורה תקינה ולזהות תוצאות חיוביות שגויות.
כדי להפעיל הרצה יבשה:
המסוף
נכנסים לדף Binary Authorization במסוף Google Cloud .
לוחצים על עריכת המדיניות.
בכלל ברירת המחדל או בכלל ספציפי, בוחרים באפשרות מצב הרצה יבשה.
לוחצים על שמירת המדיניות.
gcloud
מייצאים את מדיניות Binary Authorization לקובץ YAML:
gcloud container binauthz policy export > /tmp/policy.yamlבכלי לעריכת טקסט, מגדירים את
אסור להשתמש בהן וההפרות מתועדות.enforcementModeל-DRYRUN_AUDIT_LOG_ONLYושומרים את הקובץ.כדי לעדכן את המדיניות, מייבאים את הקובץ באמצעות הפעלת הפקודה הבאה:
gcloud container binauthz policy import /tmp/policy.yaml
אפשר לראות שגיאות במדיניות בהודעות היומן של Binary Authorization עבור GKE או Cloud Run
מגבלות
שירותי Cloud Build ו-Binary Authorization צריכים להיות באותו פרויקט. אם אתם מריצים את פלטפורמת הפריסה בפרויקט אחר, אתם צריכים להגדיר תפקידי IAM להגדרה של כמה פרויקטים, ולהפנות לפרויקט Cloud Build כשאתם מוסיפים את מאמת
built-by-cloud-buildב-Binary Authorization.Cloud Build לא יוצר אישורים כשמעבירים בדחיפה קובצי אימג' ל-Artifact Registry באמצעות שלב build מפורש
docker push. חשוב לוודא שאתם מבצעים push ל-Artifact Registry באמצעות השדהimagesבשלב ה-build שלdocker build. מידע נוסף עלimagesזמין במאמר דרכים שונות לאחסון תמונות ב-Artifact Registry.צריך להשתמש בקובצי הגדרות נפרדים לבנייה עבור צינור עיבוד הנתונים לבנייה וצינור עיבוד הנתונים לפריסה. הסיבה לכך היא ש-Cloud Build יוצר אישורים רק אחרי שצינור ה-Build מסתיים בהצלחה. לאחר מכן, Binary Authorization יבדוק את האישור לפני פריסת התמונה.
הפעלת אישורים במאגרי כתובות פרטיים
כברירת מחדל, Cloud Build לא יוצר אישורים של Binary Authorization עבור build במאגרי build פרטיים. כדי ליצור אישורים, מוסיפים את האפשרות requestedVerifyOption: VERIFIED לקובץ הגדרות ה-build:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
requestedVerifyOption: VERIFIED
אחרי שמוסיפים את requestedVerifyOption, Cloud Build מפעיל יצירת אישורים ומטא-נתונים של מקור לתמונה.
הצגת המטא-נתונים של המאמת
גורם מאמת (attestor) נוצר בפעם הראשונה שמריצים build בפרויקט. מזהה המאשר הוא מהצורה projects/PROJECT_ID/attestors/built-by-cloud-build, כאשר PROJECT_ID הוא מזהה הפרויקט.
אפשר לבדוק את המטא-נתונים של מאמת הבנייה באמצעות הפקודה הבאה:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build
מחליפים את PROJECT_ID בפרויקט שבו מריצים את Cloud Build.
הפלט מכיל מידע על הגורם המעיד ועל המפתחות הציבוריים התואמים. לדוגמה:
name": "projects/PROJECT_ID/attestors/built-by-cloud-build",
"userOwnedDrydockNote": {
"noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build",
"publicKeys": [
{
"id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1",
"pkixPublicKey": {
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n",
"signatureAlgorithm": "ECDSA_P256_SHA256"
}
},
...
}
],
"delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com"
},
"updateTime": "2021-09-24T15:26:44.808914Z",
"description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"
המאמרים הבאים
- מידע על Binary Authorization