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

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

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

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

אחרי כן, תוכלו ליצור מדיניות במסוףGoogle Cloud או באמצעות Google Cloud CLI.

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

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

תפקיד נדרש

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

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

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

פרויקט

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

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

  • PROJECT_ID
  • YOUR_SERVICE_ACCOUNT_EMAIL

ארגון

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

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

  • ORGANIZATION_ID
  • YOUR_SERVICE_ACCOUNT_EMAIL

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

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

יצירת מדיניות במסוף Google Cloud

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

  1. במסוף Google Cloud , עוברים אל Security > Rules (אבטחה > כללים) ולוחצים על Create artifact guard policy (יצירת מדיניות להגנה על ארטיפקטים) או על Create policy (יצירת מדיניות).

  2. מזינים מזהה מדיניות ותיאור למדיניות, ואז לוחצים על המשך.

  3. בחירת היקפי מדיניות ופעולות:

    • פלטפורמת CI/CD

      • בחירת מחברים: המחברים שאליהם המדיניות הזו צריכה להיות משויכת. המדיניות הזו תיבדק בכל בנייה של CI/CD שמשויכת למחברים שנבחרו.
      • פעולה במקרה של הפרת מדיניות: בוחרים את הפעולה שתתבצע במקרה של הפרת מדיניות.
        • Block builds failing the policy (חסימת גרסאות build שלא עומדות בדרישות המדיניות)
        • העברת בנייה עם התראות: תוצאות ההערכה של מדיניות הסורק של CI/CD מוצגות בצינורות העיבוד המחוברים.
    • מרשם

      • Container Analysis: האפשרות הזו רלוונטית רק לארגונים, ולא לפרויקטים. מוסיפים את הפרויקטים שרוצים שהמדיניות הזו תחול עליהם. Google Cloud
      • מאגרי Artifact Registry: בוחרים את המאגרים שרוצים שהמדיניות הזו תחול עליהם. הם צריכים להיות מאגרי Artifact Registry תקינים. אם לא תציינו ערך בשדה הזה, המדיניות תחול על כל המאגרים.
      • פעולה בהתאם למדיניות: בוחרים את הפעולה שתתבצע במקרה של הפרת המדיניות.
        • ביקורת בלבד: המדיניות מוערכת והפרות מתועדות למטרות ביקורת בלי לחסום את המשאב. כדי לראות הפרות, צריך להפעיל את ה-API באמצעות ListArtifactPoliciesEvaluations ו-GetArtifactPoliciesEvaluation.
        • בקרת כניסה: אם מתרחשת הפרה בזמן הערכת המדיניות, המשאב נחסם.
          • הגדרת מדיניות של Binary Authorization למצב הרצת בדיקה: מידע נוסף זמין במאמר בנושא הפעלת מצב הרצת בדיקה.
          • Binary Authorization Projects: רלוונטי רק לארגונים, לא לפרויקטים. מוסיפים את הפרויקטים שרוצים להחיל עליהם את בקרת הגישה. Google Cloud
          • אשכולות GKE: אם השדה הזה נשאר ריק, בקרה על אישור בקשות מוחלת על כל אשכולות GKE.
          • החלפת מדיניות Binary Authorization: צריך לסמן את התיבה הזו כדי לעדכן את מדיניות Binary Authorization לצורך בקרת כניסה.
    • זמן ריצה

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

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

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

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

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

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

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

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

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

יצירת כלל מדיניות באמצעות Google Cloud CLI

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

דרישות מוקדמות ל-Google Cloud CLI

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

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

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

פקודות של Google Cloud CLI

create

gcloud alpha scc artifact-guard policies create \
    (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \
    --policy-file-path=PATH_TO_FILE
  • 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)}
  • PATH_TO_FILE: הנתיב המקומי למסמך ה-YAML שמכיל את הגדרת המדיניות. בקטע קובץ YAML במסמך הזה מוסבר על המבנה של קובץ YAML.

get

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)}

list

gcloud alpha scc artifact-guard policies list PARENT
  • PARENT: ארגון או פרויקט. הפורמטים הקבילים של משאב האב כוללים:
    • {organizations/ORGANIZATION_ID/locations/LOCATION}
    • {projects/PROJECT_NUMBER/locations/LOCATION}

delete

gcloud alpha scc artifact-guard policies delete \
    (POLICY --location=LOCATION (--organization=ORGANIZATION_ID | --project=PROJECT_NUMBER)) \
    [--etag=ETAG]
  • 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)}
  • etag: אופציונלי. לבקרת בו-זמניות. הבקשה תמשיך רק אם ה-etag של המשאב תואם.

update

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]
  • 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)}
  • PATH_TO_FILE: הנתיב המקומי למסמך ה-YAML שמכיל את הגדרת השדות שצריך לעדכן.
  • allow_missing: ערך בוליאני אופציונלי. אם true, נוצרת מדיניות חדשה אם המדיניות שצוינה לא קיימת.
  • update-mask: רשימה מופרדת בפסיקים של שדות לעדכון. מחרוזת ריקה או '*' מציינות עדכון מלא של המדיניות. השדות התקפים לעדכון המסכה כוללים:
    • display_name
    • description
    • scope
    • enablement_state
    • vulnerability_policy
    • annotations

קובץ YAML

קובץ 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

ביצועים ומגבלות

  • מספר מקסימלי של כללי מדיניות לכל משאב הורה: במשאב הורה (ארגון או פרויקט) אפשר להגדיר עד 1,000 כללי מדיניות. כולל את כל סוגי כללי המדיניות בנושא אבטחה שהוגדרו ב-Artifact Guard.
  • מספר מקסימלי של מדיניות בנושא פגיעויות לכל משאב אב: במסגרת מגבלת המדיניות הכוללת, יש מגבלה על מספר המדיניות שמתמקדת בממצאי פגיעויות. למשאב אב (ארגון או פרויקט) יכולים להיות עד 500 כללי מדיניות שמטרתם לטפל בפגיעויות.
  • מספר המדיניות המקסימלי לכל צינור עיבוד נתונים: לכל צינור עיבוד נתונים של CI/CD שבו משולבות מדיניות של Artifact Guard לאכיפה בזמן הבנייה, מותר להשתמש במקסימום 100 כללי מדיניות.
  • מספר העדכונים המקסימלי למדיניות בשבוע: לכל מדיניות אפשר לבצע עד 100 עדכונים בשבוע.
  • מספר מקסימלי של מחברי צינורות לכל מדיניות: לכל מדיניות יכולים להיות משויכים עד 100 מחברי צינורות.
  • מספר ה-CVE המקסימלי שניתן להחריג ולהגביל לכל מדיניות: כל מדיניות יכולה להחריג ולהגביל עד 100 CVE.
  • מספר החבילות המקסימלי המותר והמוגבל לכל מדיניות: כל מדיניות יכולה לאפשר ולהגביל עד 100 חבילות.

הגבלות נוספות מפורטות במאמר פתרון בעיות.

פתרון בעיות

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

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

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

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

שם תיאור חובה מגבלות ערכים לדוגמה
הורה הגדרה של היקף ההחלה של המדיניות. כן יש תמיכה רק במדיניות במיקום 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, באופן הבא:

// 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. מוודאים שהתבניות תואמות לפורמטים תקינים של מאגרי Artifact Registry. Google Cloud
מזהה הפרויקט חייב להיות מזהה פרויקט תקין ב-GCP... מזהה פרויקט לא תקין סופק בהיקף של Registry או Runtime. צריך לציין מזהי פרויקטים תקינים. Google Cloud
צריך לציין פעולת אכיפה השדה enforcementAction חסר בצינור או בהיקף של זמן ריצה. מגדירים את פעולת האכיפה (לדוגמה, AUDIT_ONLY, BLOCK_BUILD (Pipeline only) או BLOCK_DEPLOYMENT (Runtime only)).
מספר הפוליסות לכל ארגון חורג מהמגבלה... הגעת למספר המדיניות המקסימלי (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 בבקשה. הדגל הזה מורה לשירות לבצע את כל האימותים בלי לבצע שינויים.

רזולוציה: מגדירים את 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 התמיכה.