כתיבת כללים לאמצעי בקרה מותאמים אישית בענן

כשיוצרים אמצעי בקרה מותאם אישית בענן, משתמשים בביטויי 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')

המאמרים הבאים