כתיבת כללים לאמצעי בקרה מותאמים אישית בענן
כשיוצרים אמצעי בקרה מותאם אישית בענן, משתמשים בביטויי 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 |
איך מאפשרים רק תעבורת נתונים נכנסת (ingress) פנימית לפונקציית 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 |
בודקים אם מזהי הפרויקטים באשכול Managed Service for Apache Spark מכילים את מחרוזות המשנה testing או development |
has(resource.data.projectId) && !resource.data.projectId.contains('testing') && !resource.data.projectId.contains('development') |