במאמר הזה מוסבר איך להפעיל את Container Scanning API, להעביר קובץ אימג' ל-Artifact Registry ולראות את רשימת נקודות החולשה שנמצאו בקובץ האימג'.
ב-Artifact Analysis, פרטי הפגיעות מאוחסנים כהערות. מופע נוצר לכל מופע של הערה שמשויכת לתמונה. מידע נוסף זמין במאמרים בנושא סקירה כללית ותמחור.
לפני שמתחילים
-
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 and Container Scanning 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.
-
הגדירו שה-CLI של gcloud ישתמש בזהות המאוחדת שלכם.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init - יוצרים מאגר Docker ב-Artifact Registry ומעבירים בדחיפה קובץ אימג' של קונטיינר עם קוד Go למאגר. אם אתם לא מכירים את Artifact Registry, כדאי לעיין במדריך למתחילים ל-Docker.
למידע על שימוש ב-Cloud Build כדי ליצור קונטיינרים לאפליקציות Go, אפשר לעיין במאמר בנושא יצירת אפליקציות Go.
צפייה בנקודות החולשה בתמונה
הכלי Artifact Analysis סורק תמונות חדשות כשהן מועלות אל Artifact Registry. בסריקה הזו נחלץ מידע על החבילות במאגר.
אתם יכולים לראות את המקרים של פגיעויות בתמונות שלכם ב-Artifact Registry באמצעות מסוף Google Cloud , Google Cloud CLI או Container Analysis API. אם בתמונה יש נקודות חולשה, אפשר לקבל את הפרטים שלהן.
Artifact Analysis ממשיך לסרוק תמונות וחבילות כל עוד הן נמשכו ב-30 הימים האחרונים. אחרי 30 יום, המטא-נתונים של תמונות וחבילות שנסרקו לא יתעדכנו יותר, והתוצאות יהיו ישנות.
בניתוח ארטיפקטים, מטא-נתונים שלא עודכנו במשך יותר מ-90 יום נשמרים בארכיון. אפשר להעריך את המטא-נתונים האלה בארכיון רק באמצעות ה-API. כדי לסרוק מחדש תמונה עם מטא-נתונים לא עדכניים או עם מטא-נתונים שנשמרו בארכיון, צריך לשלוף את התמונה. רענון המטא-נתונים יכול להימשך עד 24 שעות. אי אפשר לסרוק מחדש חבילות עם מטא-נתונים לא עדכניים או כאלה שהועברו לארכיון.
צפייה במקרים במסוף Google Cloud
כדי לראות את נקודות החולשה בתמונה:
מקבלים את רשימת המאגרים.
ברשימת המאגרים, לוחצים על מאגר.
ברשימת התמונות, לוחצים על שם התמונה.
הסכומים הכוללים של נקודות החולשה לכל תקציר תמונה מוצגים בעמודה Vulnerabilities.
כדי לראות את רשימת נקודות החולשה בתמונה, לוחצים על הקישור בעמודה Vulnerabilities (נקודות חולשה).
בקטע תוצאות הסריקה מוצג סיכום של סוגי החבילות שנסרקו, נקודות החולשה הכוללות, נקודות החולשה שיש להן תיקונים זמינים, נקודות החולשה שאין להן תיקונים ורמת החומרה האפקטיבית.
בטבלת נקודות החולשה מפורטים השם של נקודת החולשה הנפוצה (CVE) שנמצאה, חומרת הבעיה, הציון של Common Vulnerability Scoring System (CVSS), תיקונים (אם יש), שם החבילה שמכילה את נקודת החולשה וסוג החבילה.
במסוףGoogle Cloud מוצגות עד 1,200 נקודות חולשה בכל דף בטבלה הזו. אתם יכולים לסנן ולמיין את הקבצים האלה כדי לבדוק קובץ ספציפי, ספרייה, שכבה או סוג קובץ לפי סיומת הקובץ.
כדי לראות פרטים על CVE ספציפי, לוחצים על השם של ה-CVE.
כדי לראות את פרטי המופע של הפגיעות, כמו מספר הגרסה והמיקום המושפע, בשורה עם שם הפגיעות לוחצים על הצגה או על הצגת הפגיעות שתוקנה. טקסט הקישור הוא View (הצגה) עבור פגיעויות ללא תיקון, ו-View Fixed (הצגת תיקון) עבור פגיעויות שבוצע בהן תיקון.
צפייה בפגיעויות בשכבה ספציפית
Artifact Analysis מספק מטא-נתונים ספציפיים לשכבה כדי לעזור לכם לזהות איזו חבילה מכילה נקודות חולשה, ואיזו פקודת Docker build הציגה את השכבה הזו.כדי לראות את המטא-נתונים של הפגיעות לפי שכבה במסוף Google Cloud :
ב-Artifact Registry, פותחים את רשימת המאגרים.
בדף Repositories (מאגרי מידע), לוחצים על מאגר מידע.
בדף Repository Details (פרטי המאגר), לוחצים על תמונה.
ברשימת גרסאות התמונות, לוחצים על תקציר תמונה.
בדף הפרטים של התקציר של התמונה, לוחצים על הכרטיסייה Vulnerabilities.
כשמטא-נתונים מבוססי-שכבות זמינים, בכרטיסייה Layer ב-Artifact Analysis מוצגת רשימה של שכבות שאפשר לבחור מתוכה:
כדי לראות את רשימת השכבות, לוחצים על התפריט הנפתח של השכבות.
תיפתח רשימה נפתחת עם רשימה ממוספרת של שכבות. שכבה 0 מייצגת את השכבה התחתונה, וכל שכבה שמגיעה אחריה מבוססת על השכבה הקודמת. מוצגות רק שכבות שזוהו בהן נקודות חולשה.
לכל שכבה, Artifact Analysis מציג את פקודת Docker ששימשה ליצירת השכבה ואת מספר הפגיעויות שנמצאו בשכבה הזו.
כדי לקבל מידע נוסף על נקודות החולשה בשכבה מסוימת, בוחרים שכבה מהרשימה.
טבלת נקודות החולשה מתעדכנת ומוצגות בה רק נקודות החולשה שנמצאו בשכבה שנבחרה. אפשר להחיל עוד מסננים או לבדוק פגיעויות ספציפיות.
כדי לראות מידע מפורט יותר על פגיעות, לוחצים על הצגה או על הצגת התיקון לצד הפגיעות.
בחלונית הצדדית Vulnerability details מוצגים מיקומי הקבצים שבהם יש חבילות עם נקודות חולשה.
בטבלה מיקומי קבצים, מעבירים את העכבר מעל סימן השאלה כדי לפתוח מטא-נתונים נוספים של השכבה.
בתיבת דו-שיח מוצגים אינדקס השכבה, פקודת בניית השכבה, תקציר השכבה ותמונת הבסיס שבה אפשר לטפל בנקודת החולשה.
צפייה במקרים באמצעות gcloud
כדי לראות את המופעים של קובצי אימג' ב-Artifact Registry, מריצים את הפקודה
gcloud artifacts docker images list:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
כאשר:
- LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
- PROJECT_ID הוא מזהה הפרויקט במסוף. Google Cloud
- REPOSITORY הוא שם המאגר שבו מאוחסן האימג'.
- IMAGE_ID הוא שם האימג' במאגר. אי אפשר לציין תג תמונה באמצעות הפקודה הזו.
כברירת מחדל, הפקודה מחזירה את 10 התוצאות האחרונות. כדי להציג מספר שונה של תוצאות, משתמשים בדגל --show-occurrences-from.
לדוגמה, הפקודה הבאה מחזירה את 25 התוצאות האחרונות:
gcloud artifacts docker images list --show-occurrences-from=25 \
us-central1-docker.pkg.dev/my-project/my-repo/my-image
הפלט אמור להיראות כך:
פלט של תמונה לדוגמה
{
"name": "projects/my-project/locations/us-central1/occurrences/22d3edfb-34f2-4d3f-be08-fd90c549f010",
"resource": {
"uri": "https://us-central1-docker.pkg.dev/my-project/my-repo/golang-nginx@sha256:5b54ef20748417ccdb0b87afedf98c44e699e2f59bd6cv48cbdc1ca2e72c80e3"
},
"noteName": "projects/my-project/locations/us-central1/notes/CVE-2005-2541",
"kind": "VULNERABILITY",
"createTime": "2025-01-21T15:57:01.238832Z",
"updateTime": "2025-01-21T15:57:01.238832Z",
"vulnerability": {
"severity": "CRITICAL",
"cvssScore": 10,
"packageIssue": [
{
"affectedLocation": {
"cpeUri": "cpe:/o:debian:debian_linux:12",
"package": "tar",
"version": {
"name": "1.34+dfsg",
"revision": "1.2+deb12u1",
"kind": "NORMAL"
}
},
"fixedLocation": {
"cpeUri": "cpe:/o:debian:debian_linux:12",
"package": "tar",
"version": {
"kind": "MAXIMUM"
}
},
"packageType": "OS",
"effectiveSeverity": "LOW",
"file_location": [
{
"file_path": "/var/lib/dpkg/status",
"layerDetails": {
"index": 0,
"diffID": "sha256:123",
"buildCommand": "FROM golang:example_sha256",
"BaseImages": [
{
"name": "library/golang",
},
],
},
},
],
}
],
"shortDescription": "CVE-2005-2541",
"longDescription": "NIST vectors: AV:N/AC:L/Au:N/C:C/I:C/A:C",
"relatedUrls": [
{
"url": "https://security-tracker.debian.org/tracker/CVE-2005-2541",
"label": "More Info"
}
],
"effectiveSeverity": "LOW",
"cvssVersion": "CVSS_VERSION_2",
"cvssV2": {
"baseScore": 10,
"attackVector": "ATTACK_VECTOR_NETWORK",
"attackComplexity": "ATTACK_COMPLEXITY_LOW",
"authentication": "AUTHENTICATION_NONE",
"confidentialityImpact": "IMPACT_COMPLETE",
"integrityImpact": "IMPACT_COMPLETE",
"availabilityImpact": "IMPACT_COMPLETE"
}
}
}
סינון מקרים של נקודות חולשה
כדי לסנן מקרים של פגיעות, משתמשים בפרמטר --occurrence-filter:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
--occurrence-filter=FILTER_EXPRESSION
כאשר:
- LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
- PROJECT_ID הוא מזהה הפרויקט במסוף. Google Cloud
- REPOSITORY הוא שם המאגר שבו מאוחסן האימג'.
- IMAGE_ID הוא שם האימג' במאגר.
- FILTER_EXPRESSION היא דוגמה לביטוי סינון בפורמט שמוסבר במאמר סינון מקרים של פגיעויות.
הצגת נקודות חולשה בשכבה ספציפית
אפשר להשתמש בשדהlayerDetails כדי לזהות איזו שכבה ספציפית הציגה חבילה פגיעה, ולראות מידע נוסף על השכבה הזו. לדוגמה, הפלט הבא של layerDetails לתמונה:
"layerDetails": {
"index": 0,
"diffID": "sha256:123",
"buildCommand": "FROM golang:example_sha256",
"BaseImages": [
{
"name": "library/golang",
},
],
}
בפלט רואים שמספר השכבה בתמונה הוא 0,
עם גיבוב שכבה של sha256:123.
פקודת ה-build של Docker שמשמשת ליצירת השכבה הזו היא FROM golang:example_sha256, והשכבה נמצאת גם בתמונת הבסיס library/golang.
צפייה במופעים באמצעות ה-API
כדי לקבל רשימה של מקרים בפרויקט:
curl -X GET -H "Content-Type: application/json" -H \
"Authorization: Bearer $(gcloud auth print-access-token)" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences
כדי לקבל סיכום של נקודות חולשה בפרויקט:
curl -X GET -H "Content-Type: application/json" -H \
"Authorization: Bearer $(gcloud auth print-access-token)" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences:vulnerabilitySummary
כדי לקבל פרטים על מופע ספציפי:
curl -X GET -H "Content-Type: application/json" -H \
"Authorization: Bearer $(gcloud auth print-access-token)" \
https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID
צפייה בפגיעויות ב-Cloud Build
אם אתם משתמשים ב-Cloud Build, תוכלו לראות את נקודות החולשה של התמונות גם בחלונית הצדדית תובנות אבטחה במסוף Google Cloud .
בחלונית הצדדית Security insights מוצגת סקירה כללית של מידע על אבטחת בנייה של ארטיפקטים שמאוחסנים ב-Artifact Registry. מידע נוסף על חלונית הצד ועל האופן שבו אפשר להשתמש ב-Cloud Build כדי להגן על שרשרת האספקה של התוכנה זמין במאמר הצגת תובנות לגבי אבטחת ה-build.
סינון מופעים
אפשר להשתמש במחרוזות סינון בפקודות gcloud וב-Artifact Analysis API כדי לסנן מקרים לפני הצגתם. בקטעים הבאים מתוארים מסנני החיפוש הנתמכים.
צפייה במקרים מסוג מסוים
אפשר להשתמש בערך kind כדי לסנן לפי סוג המופע. אפשר לראות את הסוגים הזמינים.
בדוגמאות הבאות מוסבר איך לסנן מקרים של פגיעות בחבילות:
gcloud
ב-CLI של gcloud, מריצים את הפקודה הבאה:
gcloud artifacts docker images list --show-occurrences \
--occurrence-filter='kind="PACKAGE_VULNERABILITY"' --format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
כאשר:
-
PACKAGE_VULNERABILITYהוא סוג המופע. - LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
- PROJECT_ID הוא מזהה הפרויקט במסוף. Google Cloud
- REPOSITORY הוא שם המאגר שבו מאוחסן האימג'.
- IMAGE_ID הוא שם האימג' במאגר.
API
בשאילתת ה-API, משתמשים בביטוי המסנן הבא:
kind="PACKAGE_VULNERABILITY" AND resourceUrl="RESOURCE_URL"
כאשר:
-
DEPLOYMENTהוא סוג המופע. - RESOURCE_URL היא כתובת ה-URL המלאה של התמונה בפורמט
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/IMAGE@sha256:HASH:- LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
- PROJECT_ID הוא מזהה הפרויקט במסוף. Google Cloud
- REPOSITORY הוא שם המאגר שבו מאוחסן האימג'.
- IMAGE_ID הוא שם האימג' במאגר. אי אפשר לציין תג תמונה באמצעות הפקודה הזו.
אפשר להשתמש בפונקציה hasPrefix כדי לסנן עם היקף רחב יותר.
לדוגמה, המסננים הבאים מיועדים למקרים של סוג מסוים של חבילה בכמה גרסאות שלה:
kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")
כאשר:
- RESOURCE_URL_PREFIX מציין מחרוזת משנה מכתובת URL של משאב.
- כדי לסנן את כל הגרסאות של תמונה, משמיטים את ה-digest של התמונה. משתמשים בפורמט:
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@ - כדי לסנן את כל התמונות בפרויקט, מציינים רק את מיקום המשאב והפרויקט. משתמשים בפורמט:
https://LOCATION-docker.pkg.dev/PROJECT_ID/
- כדי לסנן את כל הגרסאות של תמונה, משמיטים את ה-digest של התמונה. משתמשים בפורמט:
צפייה במקרים של נקודות חולשה
אפשר לראות רשימות של מקרים של פגיעויות באמצעות gcloud CLI או Artifact Analysis API.
gcloud
כדי לאחזר רשימה של מקרים של פגיעות בתמונה, אפשר לסנן לפי VULNERABILITY סוג המקרה:
gcloud artifacts docker images list \
--show-occurrences \
--occurrence-filter='kind="VULNERABILITY"' \
--format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
כאשר:
-
VULNERABILITYהוא סוג המופע. - LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
- PROJECT_ID הוא מזהה הפרויקט במסוף. Google Cloud
- REPOSITORY הוא שם המאגר שבו מאוחסן האימג'.
- IMAGE_ID הוא שם האימג' במאגר.
API
בשאילתת ה-API, משתמשים בביטוי המסנן הבא:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
כאשר:
- ENCODED_RESOURCE_URL הוא הנתיב המקודד לתמונה. מידע על קידוד זמין במאמר בנושא קידוד כתובות URL.
מידע נוסף על השימוש ב-API זמין במאמר projects.occurrences.get.
סינון לפי סוג החבילה
כדי להגביל את תוצאות הסריקה של נקודות החולשה לסוג חבילה אחד, מריצים את הפקודה הבאה ב-CLI של gcloud:
gcloud artifacts docker images list /
--show-occurrences /
--occurrence-filter='kind="VULNERABILITY" AND packageType="PACKAGE_TYPE"' /
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
כאשר:
-
VULNERABILITYהוא סוג המופע. - PACKAGE_TYPE הוא סוג חבילת השפה של האפליקציה.
סוגי המיקומים הזמינים הם:
COMPOSER,GO,MAVEN,NPM,NUGET,PYTHON,RUBYGEMSו-RUST. - LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
- PROJECT_ID הוא מזהה הפרויקט במסוף. Google Cloud
- REPOSITORY הוא שם המאגר שבו מאוחסן האימג'.
- IMAGE_ID הוא שם האימג' במאגר. אי אפשר לציין תג תמונה באמצעות הפקודה הזו.
הצגת תמונות שמשויכות לפתק ספציפי
אפשר לאחזר רשימה של משאבים שמשויכים למזהה הערה ספציפי. לדוגמה, אתם יכולים להציג רשימה של תמונות עם נקודת תורפה ספציפית של CVE.
כדי להציג רשימה של כל התמונות בפרויקט שמשויכות להערה מסוימת, משתמשים במסנן הבא:
gcloud
gcloud artifacts docker images list /
--show-occurrences /
--occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
LOCATION-docker.pkg.dev/PROJECT_ID
כאשר:
-
goog-vulnzהואPROVIDER_PROJECT_IDלניתוח פגיעויות ב-Artifact Analysis. אם אתם משתמשים ב-Artifact Analysis בפרויקט בהתאמה אישית, אתם יכולים להחליף את הערך הזה במזהה פרויקט הספק שלכם. - LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
- PROJECT_ID הוא מזהה הפרויקט במסוף. Google Cloud
- NOTE_ID הוא המזהה של ההערה. לדוגמה, כשרואים נקודת חולשה בתוצאות הסריקה של Artifact Analysis, בדרך כלל נעשה שימוש בפורמט של מזהה CVE שדומה ל-
CVE-2019-12345.
API
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=noteProjectId%3D%22goog-vulnz%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22%20AND%20noteId%3D%22NOTE_ID%22
כאשר:
-
goog-vulnzהואPROVIDER_PROJECT_IDלניתוח פגיעויות ב-Artifact Analysis. אם אתם משתמשים ב-Artifact Analysis בפרויקט בהתאמה אישית, אתם יכולים להחליף את הערך הזה במזהה פרויקט הספק שלכם. - ENCODED_RESOURCE_URL הוא הנתיב המקודד לתמונה. מידע על קידוד זמין במאמר בנושא קידוד כתובות URL.
- NOTE_ID הוא המזהה של ההערה. לדוגמה, כשרואים נקודת חולשה בתוצאות הסריקה של Artifact Analysis, בדרך כלל נעשה שימוש בפורמט של מזהה CVE שדומה ל-
CVE-2019-12345.
כדי לבדוק אם יש הערה ספציפית בתמונה מסוימת, משתמשים במסנן הבא:
gcloud
gcloud artifacts docker images list /
--show-occurrences /
--occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
כאשר:
- LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
- PROJECT_ID הוא מזהה הפרויקט במסוף. Google Cloud
- REPOSITORY הוא שם המאגר שבו מאוחסן האימג'.
- IMAGE_ID הוא שם האימג' במאגר. אי אפשר לציין תג תמונה באמצעות הפקודה הזו.
API
בשילתת ה-API, מוסיפים את ביטוי הסינון הבא:
resourceUrl="RESOURCE_URL" AND noteProjectId="goog-vulnz" \ AND noteId="NOTE_ID"
כאשר:
- RESOURCE_URL היא כתובת ה-URL המלאה של התמונה בפורמט
http://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/IMAGE@sha256:HASH. -
goog-vulnzהואPROVIDER_PROJECT_IDלניתוח פגיעויות ב-Artifact Analysis. - NOTE_ID הוא המזהה של ההערה. הערות שקשורות לאבטחה מופיעות בדרך כלל בפורמט
CVE-2019-12345.
המאמרים הבאים
שימוש בהתראות Pub/Sub כדי לקבל התראות על פגיעויות ומטא-נתונים אחרים.
Kritis Signer מאפשר ליצור אישורים של Binary Authorization כחלק מצינור עיבוד הנתונים לבנייה. הכלי הזה יכול ליצור אישורים של Binary Authorization על סמך תוצאות של סריקת נקודות חולשה. מידע נוסף זמין במאמר יצירת אישורים באמצעות Kritis Signer.