Regeln für benutzerdefinierte Cloud-Kontrollen schreiben

Wenn Sie eine benutzerdefinierte Cloud-Steuerung erstellen, verwenden Sie CEL-Ausdrücke (Common Expression Language), 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 beiden Fällen muss der Ausdruck in einen booleschen Wert false aufgelöst werden, damit ein Ergebnis ausgelöst wird.

CEL-Ausdrücke, mit denen Ressourceneigenschaften ausgewertet werden, müssen den folgenden Regeln entsprechen:

  • Die Attribute, die Sie in einem CEL-Ausdruck angeben, müssen Attribute der gescannten Ressource sein, wie in der API-Definition des Ressourcentyps definiert.

  • Alle Enums in einem CEL-Ausdruck müssen als Strings dargestellt werden. Der folgende Ausdruck ist beispielsweise für den Ressourcentyp cloudkms.googleapis.com/CryptoKeyVersion gültig:

    resource.state = "PENDING_GENERATION"
  • Das Ergebnis der CEL-Ausdrücke, die Sie im Attribut condition definieren, muss ein boolescher Wert sein. Ein Ergebnis wird nur ausgelöst, wenn das Ergebnis false ist.

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.rotationPeriod) && resource.rotationPeriod < duration('60h')
compute.googleapis.com/Network Virtual Private Cloud-Peering-Regel mit Netzwerk-Peers abgleichen resource.selfLink.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default') || resource.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.ingressSettings) && resource.ingressSettings.matches('ALLOW_INTERNAL_ONLY')
compute.googleapis.com/Instance Der Ressourcenname entspricht dem Muster resource.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$')
serviceusage.googleapis.com/Service Nur die Aktivierung von speicherbezogenen APIs zulassen resource.state == 'ENABLED' && !( resource.name.matches('storage-api.googleapis.com') || resource.name.matches('bigquery-json.googleapis.com') || resource.name.matches('bigquery.googleapis.com') || resource.name.matches('sql-component.googleapis.com') || resource.name.matches('spanner.googleapis.com'))
sqladmin.googleapis.com/Instance Nur öffentliche IP-Adressen auf der Zulassungsliste zulassen (resource.instanceType == 'CLOUD_SQL_INSTANCE' && resource.backendType == 'SECOND_GEN' && resource.settings.ipConfiguration.ipv4Enabled ) && (resource.ipAddresses.all(ip, ip.type != 'PRIMARY' || ip.ipAddress.matches('IP_ADDRESS')))
dataproc.googleapis.com/Cluster Prüfen, ob Projekt-IDs in einem Dataproc-Cluster die Teilstrings testing oder development enthalten has(resource.projectId) && !resource.projectId.contains('testing') || !resource.projectId.contains('development')