שימוש בסריקה על פי דרישה כחלק מפייפליין Cloud Build מאפשר לכם לחסום גרסאות build אם בקובץ אימג' של קונטיינר יש נקודות חולשה ברמת חומרה שתואמת לרמה מוגדרת מראש.
במדריך הזה נלמד איך להשתמש ב-Cloud Build כדי ליצור קובץ אימג' של קונטיינר מקוד המקור, לסרוק אותו כדי לזהות פגיעויות, לבדוק את רמות החומרה של הפגיעויות ולהעביר את קובץ האימג' בדחיפה ל-Artifact Registry אם לא נמצאו פגיעויות ברמת חומרה ספציפית.
מומלץ ליצור Google Cloud פרויקט חדש לצורך המדריך הזה, ולבצע את השלבים בסביבה מבודדת.
מטרות
- יצירת קובץ אימג' באמצעות Cloud Build.
- סורקים את התמונה שנוצרה באמצעות סריקה לפי דרישה.
- הערכה של רמות נקודות החולשה המקובלות.
- אחסון התמונה ב-Artifact Registry.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון 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 On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. 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 On-Demand Scanning, Cloud Build, and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init
התפקידים הנדרשים
חשבון השירות שבו משתמשים ב-Cloud Build צריך לכלול את התפקידים הבאים:
אדמין של סריקה על פי דרישה (
roles/ondemandscanning.admin)בעל הרשאת כתיבה ב-Artifact Registry (
roles/artifactregistry.writer)
לחשבון השירות שמוגדר כברירת מחדל ב-Cloud Build יש את ההרשאות הנדרשות למאגרי Artifact Registry באותו פרויקט. אם המאגרים נמצאים באותו פרויקט שבו אתם משתמשים ב-Cloud Build, אתם צריכים להעניק רק את התפקיד On-Demand Scanning Admin (אדמין של סריקה לפי דרישה).
אם אתם משתמשים בחשבון שירות שסופק על ידי המשתמש עבור Cloud Build, אתם צריכים להעניק את שני התפקידים.
הכנת קובץ המקור
במדריך הזה תיצרו תמונה מקובץ Docker. קובץ Dockerfile הוא קובץ מקור שמכיל הוראות ל-Docker ליצירת אימג'.
פותחים חלון של Terminal, יוצרים ספרייה חדשה בשם
ods-tutorialועוברים אליה:mkdir ods-tutorial && cd ods-tutorialיוצרים קובץ בשם
Dockerfileעם התוכן הבא:# Debian10 image FROM gcr.io/google-appengine/debian10:latest # Ensures that the built image is always unique RUN apt-get update && apt-get -y install uuid-runtime && uuidgen > /IAMUNIQUE
יצירת מאגר Artifact Registry
מגדירים את מזהה הפרויקט לאותו פרויקט שבו הפעלתם את ממשקי ה-API:
gcloud config set project PROJECT_IDיוצרים מאגר Docker בשם
ods-build-repoבמיקוםus-central1:gcloud artifacts repositories create ods-build-repo --repository-format=docker \ --location=us-central1 --description="Repository for scan and build"מוודאים שהמאגר נוצר בהצלחה:
gcloud artifacts repositories list
יצירה וסריקה
בקטע הזה תריצו את צינור עיבוד הנתונים שלכם באמצעות קובץ הגדרות build. קובץ תצורת build מורה ל-Cloud Build איך לבצע כמה משימות על סמך המפרט שלכם.
בתיקייה
ods-tutorial/, יוצרים את הקובץcloudbuild.yamlעם התוכן הבא:steps: - id: build name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker build -t us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest -f ./Dockerfile . && docker image inspect us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest --format \ '{{index .RepoTags 0}}@{{.Id}}' > /workspace/image-digest.txt && cat image-digest.txt - id: scan name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images scan us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest \ --format='value(response.scan)' > /workspace/scan_id.txt - id: severity check name: gcr.io/google.com/cloudsdktool/cloud-sdk entrypoint: /bin/bash args: - -c - | gcloud artifacts docker images list-vulnerabilities $(cat /workspace/scan_id.txt) \ --format='value(vulnerability.effectiveSeverity)' | if grep -Exq $_SEVERITY; \ then echo 'Failed vulnerability check' && exit 1; else exit 0; fi - id: push name: gcr.io/cloud-builders/docker entrypoint: /bin/bash args: - -c - | docker push us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest images: ['us-central1-docker.pkg.dev/$_PROJECT_ID/ods-build-repo/ods-test:latest']הקובץ הזה כולל את המיקום והמאגר שנוצרו קודם ב-Artifact Registry. אם מחליטים להשתמש בערכים שונים, צריך לשנות את הקובץ
cloudbuild.yamlבהתאם. הערכים שלPROJECT_IDושלSEVERITYמועברים לסקריפט בפקודת ה-build.מציינים את הרמות של הפגיעות
SEVERITYשרוצים לחסום ומתחילים את הבנייה.אפשר להשתמש בערכים הבאים עבור
SEVERITY:CRITICALHIGHMEDIUMLOW
אפשר לציין כמה רמות חומרה באמצעות ביטוי רגולרי.
בדוגמה הבאה, מציינים את ערכי החומרה
CRITICALו-HIGH. ההוראה הזו גורמת ל-Cloud Build לבדוק אם יש נקודות חולשה שמסווגות ברמת החומרהHIGHומעלה.gcloud builds submit --substitutions=_PROJECT_ID=PROJECT_ID,_SEVERITY='"CRITICAL|HIGH"' \ --config cloudbuild.yamlכאשר:
- PROJECT_ID הוא מזהה הפרויקט.
- SEVERITY מאפשרת להגדיר את רמות החומרה שרוצים לחסום. אם הסריקה על פי דרישה מוצאת נקודות חולשה שתואמות לאחת מרמות החומרה שצוינו, ה-build ייכשל.
הסבר על התוצאות
כשמגדירים את הערך של SEVERITY ל-CRITICAL|HIGH, אחרי שהסריקה לפי דרישה סורקת פגיעויות, היא בודקת אם יש פגיעויות ברמה HIGH וברמה החמורה יותר CRITICAL. אם לא נמצאו פגיעויות תואמות בתמונה, הבנייה תצליח ו-Cloud Build יעביר את התמונה ל-Artifact Registry.
הפלט אמור להיראות כך:
DONE
--------------------------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
abb3ce73-6ae8-41d1-9080-7d74a7ecd7bc 2021-03-15T06:50:32+00:00 1M48S gs://ods-tests_cloudbuild/source/1615791031.906807-a648d10faf4a46d695c163186a6208d5.tgz us-central1-docker.pkg.dev/ods-tests/ods-build-repo/ods-test (+1 more) SUCCESS
אם סריקה לפי דרישה מוצאת פגיעויות מסוג HIGH או CRITICAL בתמונה, שלב ה-build scan נכשל, שלבי ה-build הבאים לא מתחילים ו-Cloud Build לא מעביר תמונה ל-Artifact Registry.
הפלט אמור להיראות כך:
Step #2 - "severity check": Failed vulnerability check
Finished Step #2 - "severity check"
ERROR
ERROR: build step 2 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 1
יכול להיות שהתוצאות שלכם יהיו שונות, כי קוד המקור לדוגמה הוא הפצת Linux שזמינה לציבור, debian10:latest. העדכונים של הפצות Linux ונתוני הפגיעות שקשורים אליהן מתבצעים באופן שוטף.
במאמר אבטחת שרשרת אספקת התוכנה אפשר לקרוא על כלים נוספים ושיטות מומלצות שיעזרו לכם להגן על שרשרת אספקת התוכנה. Google Cloud
למידע נוסף על שיטות מומלצות לניהול פגיעויות ב-Linux, אפשר להשתמש בהדרכה בחינם באינטרנט שמספקת Linux Foundation. מידע נוסף זמין במאמר בנושא פיתוח תוכנה מאובטחת.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבים בודדים
לפני שמסירים את המאגר, צריך לוודא שכל התמונות שרוצים לשמור זמינות במיקום אחר.
כדי למחוק את המאגר:
המסוף
פותחים את הדף Repositories במסוף Google Cloud .
ברשימת המאגרים, בוחרים במאגר
ods-build-repo.לוחצים על Delete.
gcloud
כדי למחוק את המאגר ods-build-repo, מריצים את הפקודה הבאה:
gcloud artifacts repositories delete ods-build-repo --location=us-central1