הגדרת כללי מדיניות של Artifact Guard

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

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

לפני שיוצרים מדיניות של הגנה על ארטיפקטים, צריך להפעיל את הגנה על ארטיפקטים ב-Security Command Center ולקבל את התפקיד הנדרש בניהול זהויות והרשאות גישה (IAM).

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

אם אתם מתכננים להשתמש ב-CLI של gcloud כדי לנהל מדיניות או מחברי CI/CD, כדאי לעיין בדרישות המוקדמות לשימוש ב-CLI של gcloud.

הפעלת הגנה על ארטיפקטים

פועלים לפי השלבים במאמר הגדרת שירותים של Security Command Center כדי להפעיל את הגנה על ארטיפקטים.

התפקיד הנדרש

כדי לקבל את ההרשאות שדרושות לשימוש ב-Artifact Guard, צריך לבקש מהאדמין להקצות לכם את תפקיד ניהול הזהויות והרשאות הגישה (IAM) הבא בפרויקט או בארגון:

  • אדמין של הערכת Artifact Scan Guard (roles/artifactscanguard.policyEvaluator)

אפשר להקצות את התפקיד הזה באמצעות מסוף Google Cloud או על ידי הפעלת הפקודה הבאה ב-CLI של gcloud:

פרויקט

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/artifactscanguard.policyEvaluator"

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט.
  • ‫SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות.

ארגון

  gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/artifactscanguard.policyEvaluator"

מחליפים את מה שכתוב בשדות הבאים:

  • ‫ORGANIZATION_ID: מזהה הארגון.
  • ‫SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות.

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

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

דרישות מוקדמות ל-CLI של gcloud

כדי לנהל מדיניות או מחברי CI/CD באמצעות ה-CLI של gcloud, צריך לוודא שהסביבה שלכם עומדת בדרישות הבאות:

  • גרסת ה-CLI של gcloud היא 559.0.0 ומעלה.
  • הפרויקט מוגדר כפרויקט ההגדרות.

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

gcloud components update --version=559.0.0
gcloud config set project PROJECT_ID

מחליפים את PROJECT_ID במזהה הפרויקט.

הוספה של כלל מדיניות

המסוף

כדי ליצור מדיניות להגנה על ארטיפקטים במסוף Google Cloud :

  1. במסוף Google Cloud , עוברים אל Security > Rules (אבטחה > כללים) ולוחצים על Create artifact guard policy (יצירת מדיניות להגנה על ארטיפקטים) או על Create policy (יצירת מדיניות).
  2. מזינים מזהה מדיניות ותיאור למדיניות, ואז לוחצים על המשך.
  3. בוחרים את היקף המדיניות ואת הפעולות:
    • פלטפורמת CI/CD
      • בחירת מחברים: בוחרים את המחברים שרוצים לשייך למדיניות הזו. הסורק מעריך את המדיניות הזו לכל בניית CI/CD שמשויכת למחברים שנבחרו.
      • פעולה לפי המדיניות: בוחרים את הפעולה שתתבצע במקרה של הפרת המדיניות.
        • חסימת גרסאות build שלא עומדות בדרישות המדיניות: אם המדיניות לא עומדת בדרישות, הגרסה נחסמת.
        • העברת גרסאות build עם התראות: בצינורות עיבוד נתונים מחוברים של build מוצגות תוצאות ההערכה של מדיניות הסורק של CI/CD.
    • Registry
      • Container Analysis: ההגדרה הזו רלוונטית רק לארגונים, ולא לפרויקטים. מוסיפים את Google Cloud הפרויקטים שרוצים להחיל עליהם את המדיניות הזו.
      • מאגרי Artifact Registry: בוחרים את המאגרים שרוצים להחיל עליהם את המדיניות הזו. הם צריכים להיות מאגרי Artifact Registry תקינים. אם משאירים את השדה ריק, הגנה על ארטיפקטים מחיל את המדיניות על כל המאגרים.
      • פעולה לפי מדיניות: בוחרים את הפעולה שתתבצע במקרה של הפרת המדיניות.
        • בדיקה בלבד: הגנה על ארטיפקטים מעריכה את המדיניות ומתעדת הפרות לצורכי בדיקה, בלי לחסום את המשאב.
        • בקרת כניסה: אם מתרחשת הפרה במהלך הערכת המדיניות, בקרת הכניסה חוסמת את פריסת המשאב.
          • הגדרת מדיניות של Binary Authorization למצב פרימטר לבדיקות: מידע נוסף על מצב פרימטר לבדיקות זמין במאמר הפעלת מצב פרימטר לבדיקות.
          • Binary Authorization Projects: ההגדרה הזו חלה רק על ארגונים, ולא על פרויקטים. מוסיפים Google Cloud את הפרויקטים שבהם רוצים להחיל בקרת גישה.
          • אשכולות GKE: אם השדה הזה יישאר ריק, בקרת הגישה תחול על כל אשכולות GKE.
          • החלפת מדיניות Binary Authorization: מסמנים את התיבה הזו כדי לעדכן את מדיניות Binary Authorization לצורך בקרת כניסה.
    • Runtime
      • פרויקטים של זמן ריצה: ההגדרה הזו חלה רק על ארגונים ולא על פרויקטים. מוסיפים פרויקטים של זמן ריצה שמכילים אשכולות GKE.
      • אשכולות GKE: בוחרים את אשכולות GKE שבהם רוצים להחיל את המדיניות הזו. אם לא מציינים ערך, הגנה על ארטיפקטים מחיל את המדיניות על כל אשכולות GKE בפרויקטים שנבחרו.
  4. מגדירים את כלל המדיניות. כלל מדיניות הוא קבוצת קריטריונים שקובעת אילו נקודות חולשה וחבילות מותרות בסביבה שלכם. כלל מדיניות כולל את הפרטים הבאים:
    • סף חומרה: הגדרת רמת החומרה המינימלית של פגיעות שתיכלל בהערכת המדיניות. כדי שנקודות חולשה ייכללו בדוח, הן צריכות לעמוד בסף הזה או לעבור אותו.

      לדוגמה, אם מגדירים את הכלל ל-Medium, ההערכה תכלול את כל הפגיעויות ברמות Medium, ‏ High ו-Critical.

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

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

    • סטטוס נקודת החולשה: מציינים אם לכלול רק נקודות חולשה שיש להן תיקון. כך אפשר לתת עדיפות לתיקון על ידי מיקוד לכל נקודות החולשה או רק לאלה שאפשר לתקן.
    • חריגים והגבלות: בקטעים האלה אפשר ליצור חריגים או חסימות ספציפיים שמבטלים את המדיניות הכללית.
      • CVEs שמוחרגים: אפשר לציין CVEs שמוגדרים כמקובלים בסביבה שלכם למשך זמן מסוים. האפשרות הזו שימושית להטמעה של פתרונות זמניים. אפשר להגדיר תאריך תפוגה לחריגים האלה. אחרי התאריך הזה, נקודת החולשה כבר לא תהיה מותרת ותגרום לכך שהמדיניות לא תעמוד בדרישות.
      • CVEs מוגבלים: מציינים CVEs לחסימה תמיד, בלי קשר לדירוג החומרה שלהם. האפשרות הזו שימושית במיוחד לציון פגיעויות שמציגות סיכון ייחודי לאפליקציה או לתשתית הספציפית שלכם.
      • Allowed packages: List packages considered secure. אפשר להגדיר את גרסת החבילה, אחרת כל הגרסאות מורשות.
      • חבילות מוגבלות: רשימת החבילות שרוצים להגביל. חבילות מוגבלות גורמות לכשל בהחלת המדיניות. אפשר להגדיר גרסת חבילה. אחרת, כל הגרסאות מוגבלות.
  5. לוחצים על יצירה.

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

‫CLI של gcloud

כדי ליצור מדיניות באמצעות ה-CLI של gcloud, מריצים את הפקודה הבאה:

gcloud alpha scc artifact-guard policies create \
    (POLICY_ID --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \
    --policy-file-path=PATH_TO_FILE

מחליפים את מה שכתוב בשדות הבאים:

  • ‫POLICY_ID: מזהה של המדיניות (לדוגמה, my-policy).
  • ‫LOCATION: המיקום של Security Command Center שבו מאוחסנים הנתונים. יש תמיכה רק ב-global.
  • ‫ORGANIZATION_ID: מזהה הארגון.
  • ‫PROJECT_NUMBER: מספר הפרויקט.
  • ‫PATH_TO_FILE: הנתיב המקומי למסמך ה-YAML שמכיל את הגדרת המדיניות. בקטע קובץ YAML במסמך הזה מוסבר על המבנה של קובץ YAML.

עדכון מדיניות

המסוף

כדי לעדכן מדיניות של הגנה על ארטיפקטים ב- Google Cloud console, פועלים לפי השלבים הבאים:

  1. במסוף Google Cloud , עוברים אל Security > Rules (אבטחה > כללים).
  2. בטבלת הכללים, לוחצים על שם המדיניות שרוצים לערוך.
  3. בדף פרטי המדיניות, לוחצים על עריכה או משנים את השדות שרוצים לעדכן, כמו היקף, כללי פגיעות או מצב ההפעלה.
  4. לוחצים על שמירה או על עדכון.

‫CLI של gcloud

כדי להציג כללי מדיניות קיימים ולעדכן אותם באמצעות ה-CLI של gcloud, משתמשים בפקודות הבאות:

הצגת רשימת כללי המדיניות

gcloud alpha scc artifact-guard policies list PARENT

מחליפים את מה שכתוב בשדות הבאים:

‫PARENT: ארגון או פרויקט. הפורמטים הקבילים של משאב האב כוללים:
  • organizations/ORGANIZATION_ID/locations/LOCATION
  • projects/PROJECT_NUMBER/locations/LOCATION

תיאור מדיניות

gcloud alpha scc artifact-guard policies describe \
    (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER))

מחליפים את מה שכתוב בשדות הבאים:

‫POLICY: המזהה המלא של המדיניות, באחד מהפורמטים הבאים:
  • organizations/ORGANIZATION_ID/locations/LOCATION/policies/POLICY_ID
  • projects/PROJECT_NUMBER/locations/LOCATION/policies/POLICY_ID
  • POLICY_ID --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)

עדכון מדיניות

gcloud alpha scc artifact-guard policies update \
    (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \
    --policy-file-path=PATH_TO_FILE [--allow-missing] \
    [--update-mask=UPDATE_MASK]

‫--allow_missing הוא סימון אופציונלי. אם התג הזה כלול, נוצרת מדיניות חדשה אם המדיניות שצוינה לא קיימת.

מחליפים את מה שכתוב בשדות הבאים:

‫UPDATE-MASK: רשימה מופרדת בפסיקים של שדות לעדכון. מחרוזת ריקה או * מציינות עדכון מלא של המדיניות. השדות התקינים למסיכת העדכון כוללים את השדות הבאים:
  • display_name
  • description
  • scope
  • enablement_state
  • vulnerability_policy
  • annotations

אימות המדיניות

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

מחיקת מדיניות

המסוף

כדי למחוק מדיניות הגנה על ארטיפקטים במסוף Google Cloud :

  1. במסוף Google Cloud , עוברים אל Security > Rules (אבטחה > כללים).
  2. בטבלת הכללים, לוחצים על לצד המדיניות שרוצים למחוק ובוחרים באפשרות מחיקה.
  3. פועלים לפי ההנחיות לאישור כדי למחוק את המדיניות. לוחצים על ביטול כדי לבטל את הפעולה.

‫CLI של gcloud

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

gcloud alpha scc artifact-guard policies delete \
    (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \
    [--etag=ETAG]

מחליפים את מה שכתוב בשדות הבאים:

‫ETAG: תג ישות אופציונלי שמשמש לבקרת בו-זמניות. אם מספקים ערך, הבקשה תמשיך רק אם הערך של etag במשאב תואם.

קובץ YAML

כשמשתמשים ב-CLI של gcloud כדי ליצור או לנהל מדיניות של הגנה על ארטיפקטים, קובץ ה-YAML צריך להיות לפי התבנית הזו:

  displayName: <Human-readable display name for the policy>
  description: <Description of the policy>

  vulnerabilityPolicy: # (at least one of these rules must be defined)
    exemptedCves:
      - id: <cve-id-1>
        gracePeriodExpirationTime: <optional-grace-period-expiration-time>
      - id: <cve-id-2>
        gracePeriodExpirationTime: <optional-grace-period-expiration-time>

    maxAllowedSeverity: <The maximum severity allowed in the detected
    vulnerabilities. The severity values can be LOW, MEDIUM, HIGH, CRITICAL>

    maximumAllowedVulnerabilities: <The maximum number of vulnerabilities that
    can be detected>

    excludeUnfixable: <Whether to exclude the vulnerabilities without an
    available fix from the purview of the policy evaluation>

    restrictedCves:
      - <restricted-cve-id-1>
      - <restricted-cve-id-2>

    allowedPackages:
      - name: <allowed_package_name_1>
        version: <optional_version_of_allowed_package_1. If unspecified, all the
        versions of the package are allowed>
      - name: <allowed_package_name_2>
        version: <optional_version_of_allowed_package_2>

    restrictedPackages:
      - name: <restricted_package_name_1>
        version: <optional_version_of_restricted_package_1. If unspecified, all
        the versions of the package are restricted>
      - name: <restricted_package_name_2>
        version: <optional_version_of_restricted_package_2>

  scope:
    pipeline:
      connectorIds:
        - <connector_id_1>
        - <connector_id_2>
      enforcementAction: <action to take in case the policy evaluation fails.
      The supported values are AUDIT_ONLY or BLOCK_BUILD>

    registry:
      projectIds:
        - <project_id_1>
      garRepositoryNamePatterns:
        - <repository_name_pattern_1>
      imageNamePatterns:
        - <image_name_pattern_1>
      enforcementAction: <AUDIT_ONLY or ADMISSION_CONTROL>
      admissionControl:
        deploymentProjectIds:
          - <project_id_1>
        gkeClusterNames:
          - <cluster_name_1>
        dryRun: <bool>
        overrideBinauthzPolicy: <bool>

    runtime:
        deploymentProjectIds:
          - <project_id_1>
        gkeClusterNames:
          - <cluster_name_1>
        dryRun: <bool>
        overrideBinauthzPolicy: <bool>
        enforcementAction: <AUDIT_ONLY or BLOCK_DEPLOYMENT>

  enablementState: <The enablement state of the policy. The supported values are
  ACTIVE, INACTIVE>

הנה דוגמה לקובץ מדיניות של הגנה על ארטיפקטים:

  displayName: 'A sample policy'
  description: Vulnerability Policy
  vulnerabilityPolicy:
    exemptedCves:
      - id: CVE-2022-40897
        gracePeriodExpirationTime: '2026-09-10T18:58:08Z'
      - id: CVE-2024-6345
    maxAllowedSeverity: MEDIUM
    maximumAllowedVulnerabilities: 5
    excludeUnfixable: true
    restrictedCves:
      - CVE-2013-4392
      - CVE-2024-4143
    allowedPackages:
      - name: systemd
        version: '257.7'
      - name: util-linux
    restrictedPackages:
      - name: ncurses
        version: 6.5+20250216
      - name: setuptools
  scope:
    pipeline:
      connectorIds:
        - organizations/123/locations/global/connectors/demoConnector
      enforcementAction: BLOCK_BUILD
    registry:
      projectIds:
        - projects/my-registry-project-id
        - projects/another-registry-project
      garRepositoryNamePatterns:
        - us-west1-docker.pkg.dev/my-registry-project-id/my-repo
        - gcr.io/team-a/internal-artifacts
      imageNamePatterns:
        - my-repo/service-a:.*
        - my-repo/service-b:v1\..*
      enforcementAction: ADMISSION_CONTROL
      admissionControl:
        deploymentProjectIds:
          - projects/my-deployment-project
        gkeClusterNames:
          - //container.googleapis.com/projects/my-deployment-project/locations/us-central1/clusters/gke-cluster-a
          - //container.googleapis.com/projects/my-deployment-project/locations/us-central1/clusters/gke-cluster-b
        dryRun: true
        overrideBinauthzPolicy: true
    runtime:
      deploymentProjectIds:
        - projects/my-deployment-project
      gkeClusterNames:
        - //container.googleapis.com/projects/my-deployment-project/locations/us-central1/clusters/gke-cluster-a
        - //container.googleapis.com/projects/my-deployment-project/locations/us-central1/clusters/gke-cluster-b
      dryRun: false
      overrideBinauthzPolicy: false
      enforcementAction: BLOCK_DEPLOYMENT
  enablementState: ACTIVE

פתרון בעיות

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

שדות כלליים של מדיניות

שם תיאור חובה מגבלות ערכים לדוגמה
הורה הגדרה של היקף ההחלה של המדיניות. כן יש תמיכה רק במדיניות במיקום global.
  • organizations/123/locations/global
  • projects/123/locations/global
מזהה מדיניות מזהה ייחודי של המדיניות. כן עד 100 תווים. השם חייב להתחיל באות, להסתיים בתו אלפאנומרי ולהכיל רק אותיות, מספרים, מקפים או קווים תחתונים. my-policy-1
שם לתצוגה שם של המדיניות שקריא לאנשים. לא עד 63 תווים. מומלץ שיהיה ייחודי. My vulnerability policy
תיאור תיאור של המדיניות. לא עד 2,048 תווים. Checks for critical vulnerabilities.
סוג המדיניות סוג המדיניות שמוגדרת. כן יש תמיכה רק ב-vulnerability_policy. vulnerability_policy
מצב ההפעלה מצב ההפעלה של המדיניות. כן הערך חייב להיות ACTIVE או INACTIVE. ACTIVE

מדיניות בנושא נקודות חולשה

שם תיאור ערכים מרובים מגבלות ערכים לדוגמה
maximumAllowedVulnerabilities המספר המקסימלי של נקודות חולשה שמותרות לפני הפרה של המדיניות. לא אם מגדירים את הערך, הוא חייב להיות מספר לא שלילי. 10
maxAllowedSeverity רמת החומרה המקסימלית של נקודות החולשה שמותרות על ידי המדיניות. לא הערך חייב להיות LOW, MEDIUM, HIGH או CRITICAL.
exemptedCves רשימה של נקודות חולשה נפוצות (CVE) שהוחרגו מהמדיניות הזו. כן עד 100 רשומות. כל מזהה צריך להיות בפורמט CVE-YYYY-NNNN. אם מציינים תאריך סיום של תקופת החסד, הוא חייב להיות חותמת זמן תקינה. אי אפשר להחפיף עם restrictedCves. - id: CVE-2024-12345
gracePeriodExpirationTime: 2027-01-01T00:00:00Z
- id: CVE-2025-4000
restrictedCves רשימת CVEs שאסורים באופן מפורש על ידי המדיניות הזו. כן עד 100 רשומות. כל מזהה צריך להיות בפורמט CVE-YYYY-NNNN. אי אפשר לחפוף עם exemptedCves. - CVE-2024-54321
- CVE-2025-5001
allowedPackages רשימה של חבילות שמותרות, שעשויות לבטל כללים אחרים. כן עד 100 רשומות. שמות החבילות לא יכולים להיות ריקים. לא יכולה להיות התנגשות עם restrictedPackages. - name: nginx
version: 1.0
- name: python
version: 3.12.4
restrictedPackages רשימת חבילות שאסורות באופן מפורש. כן עד 100 רשומות. שמות החבילות לא יכולים להיות ריקים. לא יכולה להיות התנגשות עם allowedPackages. - name: npm
version: 9.0.0
excludeUnfixable האם להחריג נקודות חולשה שאין להן תיקון זמין. לא בוליאני. ברירת המחדל היא false. true
exemptionDaysPostDisclosure מספר הימים שבהם פגיעות לא נכללות אחרי תאריך החשיפה שלהן. לא אם מגדירים את הערך, הוא חייב להיות מספר לא שלילי. ברירת המחדל היא 0. 30

היקף המדיניות

היקף הפייפליין

שם תיאור חובה מגבלות ערכים לדוגמה
connectorIds רשימה של מזהי מחברים שהמדיניות חלה עליהם במהלך סריקה של צינור עיבוד נתונים של CI/CD. כן מינימום ערך אחד, מקסימום 100 ערכים. הארגון או הפרויקט שלכם צריכים להיות רשומים בסריקת CI/CD. כל מזהה צריך להיות בפורמט הנכון, להיות שייך לארגון או לפרויקט שלכם ולהפנות למחבר קיים.
  • organizations/123/locations/global/connectors/connector-1
  • projects/123/locations/global/connectors/connector-1
enforcementAction הפעולה שתתבצע אם תהיה הפרה של המדיניות. כן הערך חייב להיות AUDIT_ONLY או BLOCK_BUILD. BLOCK_BUILD

היקף המרשם

שם תיאור חובה מגבלות ערכים לדוגמה
projectIds רשימה של מזהי פרויקטים שהמדיניות חלה עליהם. לא לפחות כרטיס אחד. כל מזהה חייב להיות מזהה פרויקט Google Cloud חוקי. projects/123, projects/456
garRepositoryNamePatterns רשימה של Google Cloud תבניות שמות של מאגרי Artifact Registry. לא עד 100 ערכים. חייב להיות תבנית תקינה של מאגר Google Cloud Artifact Registry. us-west1-docker.pkg.dev/my-project/my-repo, gcr.io/team-a/*
imageNamePatterns דפוסי ביטויים רגולריים לשמות תמונות מלאים. לא עד 100 ערכים. חייב להיות ביטוי רגולרי תקין. 'my-repo/service-a:.*', 'my-repo/service-b:v1..*'
enforcementAction הפעולה שתתבצע אם תהיה הפרה של המדיניות. כן הערך חייב להיות AUDIT_ONLY או ADMISSION_CONTROL. ADMISSION_CONTROL
admissionControl פרטי ההגדרות של בקרת הכניסה. לא חובה אם הערך של enforcementAction הוא ADMISSION_CONTROL.

היקף זמן הריצה

היקף זמן הריצה מאפשר להגנה על ארטיפקטים לעקוב אחרי קובצי אימג' של קונטיינרים שפועלים בסביבת GKE. כשמחילים מדיניות על ההיקף הזה, הממצאים של נקודות חולשה ב-Security Command Center כוללים מטא-נתונים של מדיניות לגבי תמונות שפריסתן בוצעה בפרויקטים או באשכולות שצוינו.

שם תיאור חובה מגבלות ערכים לדוגמה
projectIds רשימה של מזהי פרויקטים שבהם נפרסו אשכולות GKE והופעלה הערכת פגיעויות. כן צריך לבחור את האפשרות הזו ברמת הארגון. projects/my-gke-deployment-123
gkeClusterNames אשכולות GKE ספציפיים שצריך להעריך את המדיניות לגביהם. לא אפשר לבחור את ההגדרה הזו ברמת הארגון או הפרויקט. projects/prod-env/locations/us-central1/clusters/main-cluster

אם קובץ אימג' של קונטיינר שפועל באשכול GKE בפיקוח מפרה מדיניות, מתווספים מטא-נתונים של ArtifactGuardPolicies להודעת ממצאי נקודות החולשה ב-Security Command Center, באופן הבא:

```none // Added to the SCC 'message Finding' ArtifactGuardPolicies artifact_guard_policies = X;

message ArtifactGuardPolicies { string resource_id = 1; // e.g., //us-docker.pkg.dev/google-samples/containers/gke/security/... repeated Policy failing_policies = 2; }

message Policy { enum Type { TYPE_UNSPECIFIED = 0; VULNERABILITY = 1; } Type type = 1; string policy_id = 2; // e.g., organizations/3392779/locations/global/policies/prod-policy string failure_reason = 3; // e.g., severity=HIGH AND max_vuln_count=2 } ```

פעולת אכיפה

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

מחיקת מדיניות

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

שגיאות נפוצות

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

Error Message Hint הסיבה פתרון
נדרש הורה השדה parent (הורה) חסר בבקשה. צריך לספק הורה תקף באחד מהפורמטים הבאים:
  • organizations/{org_id}/locations/global
  • parents/{project_number}/locations/global
חובה להזין הגדרת מדיניות אובייקט המדיניות חסר בבקשה. צריך לספק אובייקט מדיניות תקין בבקשה.
האורך המקסימלי של השם המוצג הוא... השם המוצג ארוך מ-63 תווים. צריך לקצר את השם המוצג ל-63 תווים או פחות.
האורך המקסימלי של התיאור הוא... התיאור הזה חורג ממגבלת האורך המותר של 2,048 תווים. צריך לקצר את התיאור ל-2,048 תווים או פחות.
חובה לציין את סוג המדיניות חסר סוג מדיניות (לדוגמה, vulnerabilityPolicy) בבקשה. מוסיפים מדיניות vulnerabilityPolicy או סוג מדיניות אחר למדיניות.
מצב ההפעלה לא תקין נעשה שימוש במצב הפעלה לא תקין או שהוצא משימוש. אפשר להשתמש ב-ACTIVE או ב-INACTIVE.
חובה לציין היקף לא הוגדר היקף (Pipeline,‏ Registry או Runtime). צריך להוסיף למדיניות לפחות היקף תקף אחד.
שם ה-CVE חייב להיות בפורמט... מזהה CVE ב-exemptedCves או ב-restrictedCves לא תקין. חשוב לוודא שכל מזהי ה-CVE הם בפורמט CVE-YYYY-NNNN.
לא ניתן להחריג את CVE ... ולהגביל אותו אותו מזהה CVE קיים גם ב-exemptedCves וגם ב-restrictedCves. מסירים את ה-CVE מאחת מהרשימות.
שם החבילה לא יכול להיות ריק לחבילה ב-allowedPackages או ב-restrictedPackages אין שם. נותנים שם לכל החבילות.
package ... cannot be allowed and restricted אותה חבילה מופיעה גם ב-allowedPackages וגם ב-restrictedPackages. מסירים את החבילה מאחת הרשימות.
חובה לציין מזהי מחברים השדה connectorIds חסר בהיקף של צינור. צריך לציין לפחות מזהה מחבר אחד.
מזהה המחבר צריך להיות בפורמט... הפורמט של מזהה המחבר שגוי. חשוב לוודא שהמזהים הם באחד מהפורמטים הבאים:
  • organizations/{org_id}/locations/global/connectors/{connector_id}
  • projects/{project_number}/locations/{location}/connectors/{connector_id}
מזהה המחבר ... לא קיים מזהה המחבר שצוין לא קיים. מוודאים שהמחבר קיים או מסירים אותו מהרשימה.
התבנית של שם מאגר GAR צריכה להיות... צוינה תבנית מאגר לא חוקית בהיקף של Registry. חשוב לוודא שהתבניות תואמות לפורמטים תקינים של מאגרי Google Cloud Artifact Registry.
מזהה הפרויקט חייב להיות מזהה פרויקט תקין ב-GCP... מזהה פרויקט לא תקין סופק בהיקף של Registry או Runtime. צריך לציין מזהי פרויקטים Google Cloud תקינים.
צריך לציין פעולת אכיפה השדה enforcementAction חסר בצינור או בהיקף של זמן ריצה. מגדירים את פעולת האכיפה. לדוגמה, AUDIT_ONLY,‏ BLOCK_BUILD (פייפליין בלבד) או BLOCK_DEPLOYMENT (זמן ריצה בלבד).
מספר הפוליסות לכל ארגון חורג מהמגבלה... הגעת למספר המקסימלי של כללי מדיניות (1,000) בארגון שלך. כדי ליצור מדיניות חדשה, צריך למחוק מדיניות שלא בשימוש.
number of vulnerability policies ... exceeds the limit... הגעתם למספר המקסימלי של כללי מדיניות בנושא פגיעויות (500). כדאי למחוק מדיניות בנושא פגיעויות שלא בשימוש לפני שיוצרים מדיניות חדשה.
מספר כללי המדיניות לכל צינור חורג מהמגבלה... מחבר משויך ליותר מ-100 כללי מדיניות. צריך לצמצם את מספר כללי המדיניות שמשויכים למחבר.
number of policy revisions ... exceeds the limit... עדכנת מדיניות יותר מ-100 פעמים ב-7 ימים. צריך לחכות או להקטין את תדירות העדכונים.

בעיות נפוצות בתפעול

בנוסף לבעיות באימות תוכן המדיניות, יכולות להיות בעיות במישור הבקרה הבסיסי שלGoogle Cloud . הבעיות האלה יכולות להשפיע על בקשות API, על פעולות ממושכות ועל מצבי משאבים, ובדרך כלל הן מופיעות כקודי שגיאה ספציפיים או כהתנהגות חריגה.

שגיאה תסמינים איך פותרים את הבעיה
שינוי בו-זמני ‫UpdatePolicy או DeletePolicy נכשל עם קוד השגיאה ABORTED וההודעה "Provided etag is out of date". פתרון בעיות: השגיאה הזו מתרחשת כשהערך של etag בבקשה לא תואם לגרסת השרת הנוכחית של המדיניות, מה שמצביע על שינוי שבוצע על ידי בקשה אחרת.

פתרון: צריך לקרוא שוב את המדיניות כדי לקבל את ה-etag העדכני, ואז לנסות שוב לשלוח את הבקשה עם ה-etag החדש.
הבקשה אומתה אבל לא בוצעה בקשה של CreatePolicy, UpdatePolicy או DeletePolicy מוחזרת בהצלחה, אבל לא רואים שינוי במשאב. פתרון בעיות: בדרך כלל, השגיאה הזו מתרחשת כשמגדירים את הערך validate_only: true בבקשה. הדגל הזה מורה לשירות לבצע את כל האימותים בלי לבצע שינויים.

Resolution: מגדירים את הערך validate_only ל-false או משמיטים את השדה מהבקשה.
עדכון יוצר מדיניות חדשה בקשת UpdatePolicy יוצרת מדיניות במקום להחזיר שגיאה מסוג 'לא נמצא' אם המדיניות לא קיימת. פתרון בעיות: זו ההתנהגות הצפויה כש-allow_missing: true נכלל ב-UpdatePolicyRequest.

פתרון: אם רוצים לעדכן רק מדיניות קיימת, צריך להגדיר את allow_missing לערך false או להשמיט את השדה.
ההרשאה נדחתה או שממשק ה-API לא הופעל הבקשות נכשלות ומוצגת השגיאה PERMISSION_DENIED או הודעת שגיאה כמו "Artifact Guard API has not been used in the project before or it is disabled." פתרון בעיות: יכול להיות שה-API מושבת, או שאין למשתמש שקורא ל-API הרשאות מספיקות.

פתרון: בפרויקט Google Cloud , מפעילים את Artifact Guard API ‏ (artifactscanguard.googleapis.com). מוודאים שלמשתמש או לחשבון השירות שמבצעים את הפעולה יש את תפקידי ה-IAM הנדרשים.
הזמן הקצוב לתפוגה של פעולה בקשה שמחזירה פעולה ממושכת (LRO) נמשכת יותר מדי זמן או נכשלת עם DEADLINE_EXCEEDED. פתרון בעיות: יכול להיות שהשגיאה הזו מעידה על האטה זמנית או על בעיה בשירות לקצה העורפי.

פתרון: שליחת שאילתה לסטטוס של LRO. אם הפעולה נכשלת או אם חלף הזמן הקצוב לתגובה, צריך לנסות אותה שוב אחרי כמה רגעים. אם הבעיה נמשכת, כדאי לבדוק את Google Cloud לוח הבקרה של הסטטוס כדי לראות אם יש אירועים שמתרחשים כרגע, או לפנות אל Google Cloud התמיכה.