כשיוצרים אמצעי בקרה מותאם אישית בענן, משתמשים בביטויים של Common Expression Language (CEL) כדי ליצור את הכללים שמעריכים את המאפיינים של המשאב שנסרק.
הביטויים יכולים להיות בדיקות של ערך יחיד או ביטויים מורכבים יותר שבודקים כמה ערכים או תנאים. בכל מקרה, הביטוי צריך להחזיר ערך בוליאני false כדי להפעיל את הממצא.
ביטויי CEL שמעריכים מאפייני משאבים צריכים לעמוד בכללים הבאים:
המאפיינים שאתם מציינים בביטוי CEL צריכים להיות מאפיינים של המשאב שנסרק, כפי שמוגדר בהגדרת ה-API של סוג המשאב.
כל הערכים מסוג enum בביטוי CEL צריכים להיות מיוצגים כמחרוזות. לדוגמה, הביטוי הבא הוא ביטוי תקין עבור סוג המשאב
cloudkms.googleapis.com/CryptoKeyVersion:resource.data.state = "PENDING_GENERATION"
התוצאה של ביטויי ה-CEL שאתם מגדירים במאפיין
conditionחייבת להיות בוליאנית. ממצא מופעל רק אם התוצאה היאfalse.
כדי למצוא את השם של משאב, אפשר לעיין במאמר בנושא סוגי נכסים.
מידע נוסף על CEL זמין במאמרים הבאים:
דוגמאות לביטויי CEL
בטבלה הבאה מפורטות כמה ביטויי CEL שאפשר להשתמש בהם כדי להעריך מאפייני משאבים.
| סוג המשאב | תיאור | ביטוי CEL |
|---|---|---|
cloudkms.googleapis.com/CryptoKey |
בדיקת תקופת רוטציית המפתחות ב-Cloud KMS | has(resource.data.rotationPeriod) && resource.data.rotationPeriod < duration('60h') |
compute.googleapis.com/Network |
התאמת כלל קישור בין רשתות VPC שכנות (peering) לרשתות שכנות | resource.data.selfLink.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default') || resource.data.peerings.exists(p, p.network.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/shared$')) |
cloudfunctions.googleapis.com/CloudFunction |
איך מאפשרים רק תנועת כניסה פנימית לפונקציית Cloud Run | has(resource.data.ingressSettings) && resource.data.ingressSettings.matches('ALLOW_INTERNAL_ONLY') |
compute.googleapis.com/Instance |
שם המשאב תואם לתבנית | resource.data.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$') |
serviceusage.googleapis.com/Service |
אפשר להפעיל רק ממשקי API שקשורים לאחסון | resource.data.state == 'ENABLED' && !( resource.data.name.matches('storage-api.googleapis.com') || resource.data.name.matches('bigquery-json.googleapis.com') || resource.data.name.matches('bigquery.googleapis.com') || resource.data.name.matches('sql-component.googleapis.com') || resource.data.name.matches('spanner.googleapis.com'))
|
sqladmin.googleapis.com/Instance
|
מתירים רק כתובות IP ציבוריות שמופיעות ברשימת ההיתרים | (resource.data.instanceType == 'CLOUD_SQL_INSTANCE' && resource.data.backendType == 'SECOND_GEN' && resource.data.settings.ipConfiguration.ipv4Enabled ) && (resource.data.ipAddresses.all(ip, ip.type != 'PRIMARY' || ip.ipAddress.matches('IP_ADDRESS')))
|
dataproc.googleapis.com/Cluster |
בודקים אם מזהי הפרויקטים באשכול Dataproc מכילים את מחרוזות המשנה testing או development |
has(resource.data.projectId) && !resource.data.projectId.contains('testing') || !resource.data.projectId.contains('development') |