במאמר הזה נסביר איך ליצור ולנהל מדיניות של הגנה על ארטיפקטים. סקירה כללית של השירות, התכונות והיתרונות שלו מופיעה במאמר סקירה כללית על הגנה על ארטיפקטים.
לפני שמתחילים
כדי ליצור מדיניות של הגנה על ארטיפקטים, צריך להפעיל את התכונה הזו ב-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_IDYOUR_SERVICE_ACCOUNT_EMAIL
ארגון
gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
--member="serviceAccount:YOUR_SERVICE_ACCOUNT_EMAIL" \
--role="roles/artifactscanguard.policyEvaluator" \
מחליפים את מה שכתוב בשדות הבאים:
ORGANIZATION_IDYOUR_SERVICE_ACCOUNT_EMAIL
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
מידע נוסף על תפקידים של הגנה על ארטיפקטים זמין במאמר תפקידים והרשאות של הגנה על ארטיפקטים.
יצירת מדיניות במסוף Google Cloud
כדי ליצור מדיניות להגנה על ארטיפקטים במסוף Google Cloud :
במסוף Google Cloud , עוברים אל Security > Rules (אבטחה > כללים) ולוחצים על Create artifact guard policy (יצירת מדיניות להגנה על ארטיפקטים) או על Create policy (יצירת מדיניות).
מזינים מזהה מדיניות ותיאור למדיניות, ואז לוחצים על המשך.
בחירת היקפי מדיניות ופעולות:
פלטפורמת 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 לצורך בקרת כניסה.
- ביקורת בלבד: המדיניות מוערכת והפרות מתועדות למטרות ביקורת בלי לחסום את המשאב. כדי לראות הפרות, צריך להפעיל את ה-API באמצעות
זמן ריצה
- פרויקטים בזמן ריצה: רלוונטי רק לארגונים, לא לפרויקטים. מוסיפים פרויקטים של זמן ריצה שמכילים אשכולות GKE.
- אשכולות GKE: בוחרים את אשכולות GKE שעליהם רוצים להחיל את המדיניות הזו. אם השדה הזה יישאר ריק, המדיניות תחול על כל אשכולות GKE בפרויקטים שנבחרו.
מגדירים את כלל המדיניות. כלל מדיניות הוא קבוצה של קריטריונים שקובעים אילו פגיעויות וחבילות מותרות בסביבה שלכם. כלל מדיניות כולל את הפרטים הבאים:
סף חומרה: הגדרת רמת החומרה המינימלית של פגיעות שתיכלל בהערכת המדיניות. כדי שנקודות החולשה ייכללו, הן צריכות לעמוד בסף הזה או לעבור אותו.
לדוגמה, אם מגדירים את הכלל ל-Medium, כל הפגיעויות ברמות Medium, High ו-Critical ייכללו בהערכה.
סף מספר הפגיעויות: הגדרת המספר המקסימלי של פגיעויות שמותרות אחרי שמחילים את מסנני המדיניות האחרים. הפרה של המדיניות מתרחשת רק אם מספר נקודות החולשה הספציפיות והמסוננות האלה חורג מהמגבלה.
לדוגמה, אם מגדירים סף חומרה של גבוה, לא כוללים נקודות חולשה שאין תיקונים זמינים עבורן ומגדירים סף ספירה של חמש, הבנייה תיכשל אם היא מכילה יותר מחמש נקודות חולשה שניתנות לתיקון ורמת הסיכון שלהן היא גבוהה או קריטית.
סטטוס נקודת החולשה: מציינים אם לכלול רק נקודות חולשה שיש להן תיקון זמין. כך אפשר לתעדף את התיקון על ידי בחירת כל נקודות החולשה או רק אלה שאפשר לתקן.
חריגים והגבלות: בקטעים האלה אפשר ליצור אישורים או חסימות ספציפיים שמבטלים את המדיניות הכללית.
- CVEs שמוחרגים: מציינים CVEs שנחשבים מקובלים בסביבה שלכם למשך תקופה מסוימת. האפשרות הזו שימושית להטמעת פתרונות זמניים. אפשר להגדיר תאריך תפוגה לחריגים האלה. אחרי התאריך הזה, נקודת החולשה כבר לא מותרת וגורמת לכך שהמדיניות לא תעמוד בדרישות.
- CVEs מוגבלים: מציינים CVEs לחסימה תמידית, ללא קשר לדירוג החומרה שלהם. האפשרות הזו שימושית במיוחד לציון פגיעויות שמציגות סיכון ייחודי לאפליקציה או לתשתית הספציפית שלכם.
- חבילות מותרות: רשימת חבילות שנחשבות מאובטחות. אפשר להגדיר את גרסת החבילה, אחרת כל הגרסאות מותרות.
- חבילות מוגבלות: רשימת החבילות שרוצים להגביל. חבילות מוגבלות גורמות לכשל במדיניות. אפשר להגדיר את גרסת החבילה, אחרת כל הגרסאות מוגבלות.
לוחצים על יצירה.
המדיניות הזמינה של הגנה על ארטיפקטים מפורטת בטבלה בדף כללים.
יצירת כלל מדיניות באמצעות 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_namedescriptionscopeenablement_statevulnerability_policyannotations
קובץ 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. |
|
| מזהה מדיניות | מזהה ייחודי של המדיניות. | כן | עד 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-12345gracePeriodExpirationTime: 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: nginxversion: 1.0- name: pythonversion: 3.12.4 |
| restrictedPackages | רשימת חבילות שאסורות באופן מפורש. | כן | עד 100 רשומות. שמות החבילות לא יכולים להיות ריקים. לא יכולה להיות התנגשות עם
allowedPackages. |
- name: npmversion: 9.0.0 |
| excludeUnfixable | האם להחריג נקודות חולשה שאין להן תיקון זמין. | לא | בוליאני. ערך ברירת המחדל הוא false. |
true |
| exemptionDaysPostDisclosure | מספר הימים שבהם פגיעות לא נכללות אחרי תאריך החשיפה שלהן. | לא | אם מגדירים את המאפיין, הערך שלו חייב להיות מספר לא שלילי. ערך ברירת המחדל הוא 0. |
30 |
היקף המדיניות
היקף הפייפליין
| שם | תיאור | חובה | מגבלות | ערכים לדוגמה |
|---|---|---|---|---|
| connectorIds | רשימה של מזהי מחברים שהמדיניות חלה עליהם במהלך סריקה של צינור עיבוד נתונים של CI/CD. | כן | מינימום ערך אחד, מקסימום 100 ערכים. הארגון או הפרויקט שלכם צריכים להיות מוגדרים לסריקת CI/CD. כל מזהה צריך להיות בפורמט הנכון, להיות שייך לארגון או לפרויקט שלכם ולהפנות למחבר קיים. |
|
| 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 (הורה) חסר בבקשה. | צריך לספק הורה תקין באחד מהפורמטים הבאים:
|
| חובה להגדיר מדיניות | אובייקט המדיניות חסר בבקשה. | צריך לספק אובייקט מדיניות תקין בבקשה. |
| האורך המקסימלי של השם המוצג הוא... | השם המוצג ארוך מ-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 חסר בהיקף של צינור. |
צריך לציין לפחות מזהה מחבר אחד. |
| מזהה המחבר צריך להיות בפורמט... | הפורמט של מזהה המחבר שגוי. | חשוב לוודא שהמזהים הם באחד מהפורמטים הבאים:
|
| מזהה המחבר ... לא קיים | מזהה המחבר שצוין לא קיים. | מוודאים שהמחבר קיים או מסירים אותו מהרשימה. |
| התבנית של שם מאגר 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 התמיכה. |