סריקה אוטומטית של חבילות

במאמר הזה מוסבר איך להפעיל את Container Scanning API, להעביר קובץ אימג' ל-Artifact Registry ולראות את רשימת נקודות החולשה שנמצאו בקובץ האימג'.

ב-Artifact Analysis, פרטי הפגיעות מאוחסנים כהערות. מופע נוצר לכל מופע של הערה שמשויכת לתמונה. למידע נוסף, קראו את המאמרים סקירה כללית ותמחור.

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

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry and Container Scanning APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry and Container Scanning APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. 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.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. יוצרים מאגר ב-Artifact Registry ומעבירים אליו חבילה עם קוד האפליקציה. אם אתם לא מכירים את ניהול החבילות ב-Artifact Registry, כדאי לקרוא את הנושאים הבאים:
    1. אחסון חבילות Java ב-Artifact Registry
    2. אחסון חבילות Node.js ב-Artifact Registry
    3. אחסון חבילות Python ב-Artifact Registry

הפעלת ה-API הזה מפעילה גם סריקה של חבילות שפה ב-Artifact Registry. סוגי החבילות הנתמכים

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות לצפייה בתוצאות הסריקה של החבילה, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:

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

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

הצגת נקודות החולשה בחבילה

הכלי Artifact Analysis סורק חבילות חדשות כשהן מועלות ל-Artifact Registry. בסריקה הזו נשלף מידע על החבילה ועל יחסי התלות שלה.

אתם יכולים לראות את המקרים של פגיעויות בתמונות שלכם ב-Artifact Registry באמצעות מסוף Google Cloud , Google Cloud CLI או Container Analysis API. אם בתמונה יש נקודות חולשה, אפשר לקבל את הפרטים שלהן.

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

‫Artifact Analysis מעביר לארכיון מטא-נתונים שלא השתנו במשך יותר מ-90 יום. אפשר להעריך את המטא-נתונים האלה רק באמצעות ה-API. כדי לסרוק מחדש תמונה עם מטא-נתונים לא עדכניים או מטא-נתונים שהועברו לארכיון, צריך לשלוף את התמונה. רענון המטא-נתונים יכול להימשך עד 24 שעות. אי אפשר לסרוק מחדש חבילות עם מטא-נתונים לא עדכניים או כאלה שהועברו לארכיון.

הצגת מקרים במסוף Google Cloud

כדי לראות את נקודות החולשה בחבילה:

  1. מקבלים את רשימת המאגרים.

    פתיחת הדף Repositories

  2. ברשימת המאגרים, לוחצים על מאגר.

  3. ברשימת החבילות, לוחצים על שם החבילה.

    הסכומים הכוללים של נקודות החולשה בכל חבילה מוצגים בעמודה Vulnerabilities.

    חבילה שנסרקה עם נקודות חולשה

  4. כדי לראות את רשימת נקודות החולשה של חבילה, לוחצים על הקישור בעמודה Vulnerabilities.

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

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

    בטבלת נקודות החולשה מפורטים השמות של נקודות החולשה והחשיפות הנפוצות (CVE) של כל נקודת חולשה שנמצאה, רמת החומרה בפועל, הניקוד ב-Common Vulnerability Scoring System‏ (CVSS), תיקונים (אם יש), שם החבילה שמכילה את נקודת החולשה וסוג החבילה. אפשר לסנן ולמיין את הקבצים האלה כדי לבדוק קובץ ספציפי, ספרייה או סוג קובץ לפי סיומת הקובץ. Google Cloud בטבלה הזו מוצגות עד 1,200 נקודות פגיעות בכל דף.

  5. כדי לראות פרטים על CVE ספציפי, לוחצים על שם ה-CVE.

  6. כדי לראות פרטים על המקרים שבהם נמצאה פגיעות, כמו מספר הגרסה והמיקום שנפגע, לוחצים על הצגה או על הצגת הפגיעות שתוקנה בשורה עם שם הפגיעות. טקסט הקישור הוא View (הצגה) עבור פגיעויות ללא תיקון, ו-View Fixed (הצגת תיקונים) עבור פגיעויות שבהן הוחל תיקון.

צפייה במופעים באמצעות gcloud

כדי לראות את המופעים של החבילות ב-Artifact Registry, מריצים את הפקודה gcloud artifacts versions describe:

gcloud artifacts versions describe VERSION \
    --location=LOCATION --repository=REPOSITORY --package=PACKAGE --show-package-vulnerability

כאשר:

  • ‫VERSION היא גרסת החבילה שאת המופעים שלה אתם רואים.
  • ‫LOCATION הוא המיקום של המאגר, באזור אחד או במספר אזורים.
  • ‫REPOSITORY הוא שם המאגר שבו מאוחסנת החבילה.
  • ‫PACKAGE הוא שם החבילה במאגר. אי אפשר לציין תג חבילה באמצעות הפקודה הזו.

צפייה במקרים באמצעות ה-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

סינון מופעים

אפשר להשתמש במחרוזות סינון בפקודות gcloud וב-Artifact Analysis API כדי לסנן מקרים לפני הצגתם. בקטעים הבאים מתוארים מסנני החיפוש הנתמכים.

הצגת מופעים מסוג ספציפי

אפשר להשתמש בערך kind כדי לסנן לפי סוג המופע. לרשימת הסוגים הזמינים

בדוגמאות הבאות מוסבר איך לסנן מופעים של נקודות חולשה בחבילות:

gcloud

ב-Google Cloud CLI אין תמיכה בסינון מופעים בסריקה מבוססת-חבילות.

API

בשאילתת ה-API, משתמשים בביטוי הסינון הבא:

kind="PACKAGE_VULNERABILITY" AND resourceUrl="RESOURCE_URL"

כאשר:

  • ‫PACKAGE_VULNERABILITY הוא סוג המופע.
  • ‫RESOURCE_URL היא כתובת ה-URL המלאה של החבילה בפורמט projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID/packages/PACKAGE_ID/PACKAGE_TYPE/VERSION_ID:
    • ‫PROJECT_ID הוא מזהה הפרויקט Google Cloud במסוף.
    • ‫LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
    • ‫REPOSITORY הוא שם המאגר שבו מאוחסן האימג'.
    • ‫PACKAGE_ID הוא שם החבילה שבה התמונה מאוחסנת.
    • ‫PACKAGE_TYPE הוא סוג חבילת השפה של האפליקציה. הסוגים הזמינים הם: pythonPackages,‏ mavenArtifacts ו-npmPackages.
    • ‫VERSION הוא מספר הגרסה של החבילה.

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

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

kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")

כאשר:

  • ‫RESOURCE_URL_PREFIX מציין מחרוזת משנה מכתובת URL של משאב.
    • כדי לסנן לפי כל הגרסאות של חבילה, משמיטים את הגרסה. משתמשים בפורמט:projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID
    • כדי לסנן את כל החבילות בפרויקט, מציינים רק את מיקום המשאב ואת הפרויקט. צריך להשתמש בפורמט: projects/PROJECT_ID/locations/LOCATION

הצגת מקרים של נקודות חולשה

אפשר לראות רשימות של מקרים של פגיעויות באמצעות ה-CLI של gcloud או Artifact Analysis API.

gcloud

כדי לאחזר רשימה של מקרים של פגיעות בחבילה, משתמשים בדגל --show-package-vulnerability:

gcloud artifacts versions describe VERSION_ID --repository=REPOSITORY_ID
  --package=GROUP_ID:ARTIFACT_ID --show-package-vulnerability

כאשר:

  • ‫VERSION הוא מספר הגרסה של החבילה.
  • ‫REPOSITORY הוא שם המאגר שבו מאוחסנת החבילה.
  • ‫GROUP_ID הוא מזהה הקבוצה של החבילה.
  • ‫ARTIFACT_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.

איך רואים תמונות שמשויכות לפתק ספציפי

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

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

gcloud

ב-Google Cloud CLI אין תמיכה בסינון מופעים בסריקה מבוססת-חבילות.

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

ב-Google Cloud CLI אין תמיכה בסינון מופעים בסריקה מבוססת-חבילות.

API

בשאילתת ה-API, מוסיפים את ביטוי הסינון הבא:

resourceUrl="RESOURCE_URL" AND noteProjectId="goog-vulnz" \
AND noteId="NOTE_ID"

כאשר:

  • ‫RESOURCE_URL היא כתובת ה-URL המלאה של החבילה בפורמט projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID/packages/PACKAGE_ID/PACKAGE_TYPE/VERSION_ID.
  • ‫goog-vulnz הוא PROVIDER_PROJECT_ID לניתוח פגיעויות ב-Artifact Analysis.
  • ‫NOTE_ID הוא המזהה של ההערה. הערות שקשורות לאבטחה מופיעות בדרך כלל בפורמט CVE-2019-12345.

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