Regeln für benutzerdefinierte Cloud-Kontrollen schreiben
Wenn Sie eine benutzerdefinierte Cloud-Steuerung erstellen, verwenden Sie Common Expression Language (CEL)-Ausdrücke, um die Regeln zu erstellen, mit denen die Eigenschaften der gescannten Ressource ausgewertet werden.
Ihre Ausdrücke können Prüfungen eines einzelnen Werts oder komplexere zusammengesetzte Ausdrücke sein, mit denen mehrere Werte oder Bedingungen geprüft werden. In jedem Fall muss der Ausdruck in einen booleschen Wert false aufgelöst werden, um ein Ergebnis auszulösen.
CEL-Ausdrücke, die Ressourceneigenschaften auswerten, müssen den folgenden Regeln entsprechen:
Die Eigenschaften, die Sie in einem CEL-Ausdruck angeben, müssen Eigenschaften der gescannten Ressource sein, wie in der API-Definition des Ressourcentyps definiert.
Alle Enums in einem CEL-Ausdruck müssen als Strings dargestellt werden. Das ist beispielsweise ein gültiger Ausdruck für den Ressourcentyp
cloudkms.googleapis.com/CryptoKeyVersion:resource.data.state = "PENDING_GENERATION"
Das Ergebnis der CEL-Ausdrücke, die Sie in der Eigenschaft
conditiondefinieren, muss ein boolescher Wert sein. Ein Ergebnis wird nur ausgelöst, wenn das Ergebnisfalseist.
Informationen zum Ermitteln des Namens einer Ressource finden Sie unter Asset-Typen.
Weitere Informationen zu CEL finden Sie hier:
Beispiel-CEL-Ausdrücke
In der folgenden Tabelle sind einige CEL-Ausdrücke aufgeführt, mit denen Sie Ressourcenattribute auswerten können.
| Ressourcentyp | Beschreibung | CEL-Ausdruck |
|---|---|---|
cloudkms.googleapis.com/CryptoKey |
Cloud KMS-Schlüsselrotationszeitraum prüfen | has(resource.data.rotationPeriod) && resource.data.rotationPeriod < duration('60h') |
compute.googleapis.com/Network |
Virtual Private Cloud-Peering-Regel mit Netzwerk-Peers abgleichen | 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 |
Nur internen eingehenden Traffic für eine Cloud Run-Funktion zulassen | has(resource.data.ingressSettings) && resource.data.ingressSettings.matches('ALLOW_INTERNAL_ONLY') |
compute.googleapis.com/Instance |
Der Ressourcenname entspricht dem Muster | resource.data.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$') |
serviceusage.googleapis.com/Service |
Nur die Aktivierung von speicherbezogenen APIs zulassen | 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
|
Nur öffentliche IP-Adressen auf der Zulassungsliste zulassen | (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 |
Prüfen, ob Projekt-IDs in einem Managed Service for Apache Spark-Cluster die Teilstrings testing oder development enthalten |
has(resource.data.projectId) && !resource.data.projectId.contains('testing') && !resource.data.projectId.contains('development') |