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

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