In diesem Thema erfahren Sie, wie Sie Asset-Änderungen mit einer benutzerdefinierten Bedingung überwachen können. Weitere Informationen zu Echtzeitbenachrichtigungen finden Sie unter Allgemein.
Überblick
Wenn Sie für einen bestimmten Inhalt nur eine bestimmte Art von Änderung anzeigen möchten, können Sie Ihrem Feed eine Bedingung hinzufügen.
Das condition
-Objekt ist optional. Wenn ein Feed kein condition
-Objekt hat, empfängt das konfigurierte Ziel alle Änderungen an den Assets.
Das Objekt condition
hat die folgende Struktur:
"condition": {
"title": "...",
"description": "...",
"expression": "..."
}
Title
und description
sind optional. Mithilfe dieser Felder können Sie die Bedingung ermitteln und beschreiben.
Das Feld expression
definiert den Ausdruck, der zum Auswerten der Benachrichtigung in Common Expression Language (CEL) verwendet wird. Der Bedingungsausdruck kann mehrere Anweisungen enthalten und Anweisungen werden mit Logikoperatoren gemäß der CEL-Sprachspezifikation kombiniert.
CEL verwenden
Common Expression Language (CEL) ist die Ausdruckssprache, die zur Angabe einer Feedbedingung verwendet wird, und zwar speziell attributbasierte logische Ausdrücke. Weitere Informationen finden Sie in der CEL-Spezifikation und der zugehörigen Sprachdefinition.
In einer Feedbedingung wird CEL verwendet, um boolesche Entscheidungen auf der Grundlage von Attributdaten zu treffen. Ein Bedingungsausdruck besteht aus einer oder mehreren Anweisungen, die mithilfe logischer Operatoren (&&
, ||
) verbunden sind. Jede Anweisung drückt eine attributbasierte Kontrollregel aus, die für TemporalAsset
gilt, um zu bestimmen, ob die Benachrichtigung gesendet wird.
Die folgenden CEL-Features sind für Feedbedingungen am wichtigsten:
Variablen:In Bedingungen werden Variablen verwendet, um ein bestimmtes Attribut wie
temporal_asset.deleted
(vom Typ Boolesch) odertemporal_asset.asset.name
(vom TypString
) auszudrücken. Diese Variablen werden je nach Kontext während der Laufzeit mit Werten gefüllt.Operatoren:Jeder Datentyp, z. B.
String
, unterstützt eine Reihe von Operatoren, mit denen logische Ausdrücke erstellt werden können. Meist werden Operatoren verwendet, um den in einer Variablen enthaltenen Wert mit einem Literalwert wietemporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345"
zu vergleichen. Wenn in diesem Beispiel der Eingabewert vontemporal_asset.asset.name
//cloudresourcemanager.googleapis.com/projects/12345
ist, wird der Ausdruck alstrue
ausgewertet.Funktionen:Eine Funktion ist ein zusammengesetzter Operator für Datentypen, die komplexere Operationen unterstützen. In Bedingungsausdrücken gibt es vordefinierte Funktionen, die in Verbindung mit bestimmten Datentypen genutzt werden können.
temporal_asset.asset.name.contains("keyword")
verwendet beispielsweise eineString
-Enthält-Funktion und wird mittrue
ausgewertet, wenn der Wert vontemporal_asset.asset.name
„keyword“ enthält.Logische Operatoren:Bedingungen unterstützen logische Operatoren, mit denen komplexe logische Ausdrücke aus einfachen Ausdrucksanweisungen erstellt werden können:
&&
und||
. Diese logischen Operatoren ermöglichen die Verwendung mehrerer Eingabevariablen in einem Bedingungsausdruck. Beispiel:temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020
verknüpft zwei einfache Anweisungen, die beide erfüllt sein müssen, um ein Gesamtbewertungsergebnistrue
zu erhalten.
Weitere Informationen zu CEL-Features finden Sie in der Sprachdefinition.
Bedingungsvariablen verwenden
Mithilfe von Bedingungsvariablen können Sie Bedingungen für verschiedene Attribute erstellen. Unterstützte Bedingungsvariablen sind:
- temporal_asset::aktuelle Asset-Änderung im TemporalAsset-Format. Wenn die Bedingung als wahr ausgewertet wird, wird
TemporalAsset
an das konfigurierte Ziel gesendet.
Beispiele für Bedingungsausdrücke
Der folgende Bedingungsausdruck sendet Benachrichtigungen zu Erstellungsereignissen:
temporal_asset.deleted == false &&
temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
Der folgende Bedingungsausdruck sendet Benachrichtigungen für Ressourcen, die sich in den Ordnern 12345
und 23456
befinden:
"folders/12345" in temporal_asset.asset.ancestors ||
"folders/23456" in temporal_asset.asset.ancestors
Der folgende Bedingungsausdruck sendet Benachrichtigungen, wenn neue zulässige Regeln zu Firewalls hinzugefügt werden, vorausgesetzt, asset_type
ist im Feed bereits auf compute.googleapis.com/Firewall
gesetzt.
size(temporal_asset.asset.resource.data.allowed) >
size(temporal_asset.prior_asset.resource.data.allowed)
Der folgende Bedingungsausdruck sendet Benachrichtigungen für VM-Instanzen mit dem Maschinentyp n1-standard-1
, unter der Annahme, dass asset_type
im Feed bereits auf compute.googleapis.com/Instance
gesetzt ist.
temporal_asset.asset.resource.data.machineType.endsWith('/machineTypes/n1-standard-1')
Der folgende Bedingungsausdruck sendet Benachrichtigungen für Storage-Buckets mit beliebigen IAM-Richtlinien für allUsers
, unter der Annahme, dass asset_type
auf storage.googleapis.com/Bucket
und content_type
auf IAM_POLICY
festgelegt ist.
temporal_asset.asset.iam_policy.bindings.exists(b, b.members.exists(m, m == "allUsers"))
Der folgende Bedingungsausdruck sendet eine Benachrichtigung, wenn ein Storage-Bucket mit einem test
-Schlüssel im Label gelöscht wird:
temporal_asset.deleted == true && temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.PRESENT && "test" in temporal_asset.prior_asset.resource.data.labels
Bekannte Einschränkungen
Die meisten Variablennamen in Bedingungsausdrücken sind in „snake_case” dargestellt. Einzige Ausnahme sind die Variablennamen der Unterfelder von
data
im Objekt Resource, die in camelCase dargestellt sind.Bedingungsausdrücke haben eine Längenbeschränkung von 3.000 Zeichen.
Einige Validierungen für Bedingungsausdrücke werden während der Erstellung/Aktualisierung des Feeds durchgeführt. Solche Validierungen sind jedoch nicht umfassend, insbesondere für Bedingungen mit dem Feld
temporal_asset.asset.resource.data
, die einen dynamischen Typ haben. Wir empfehlen, einfache Feedbedingungen mit dem richtigenasset_type
im Feed anzugeben. Wenn Validierungsfehler während der Bewertung auftreten, wird keine Benachrichtigung gesendet und Fehler werden protokolliert. Logs aufrufenBei dynamischen Typen in
temporal_asset.asset.resource.data
lösen Bedingungen für fehlende Felder Laufzeitfehler aus und die Benachrichtigung wird nicht veröffentlicht. Wenn beispielsweise für die Bedingungtemporal_asset.asset.resource.data.name != "my_name"
das Feldname
fehlt, schlägt die Bewertung fehl und Sie erhalten keine Benachrichtigungen. Wenn Ihre Bedingung nur für bestimmte Felder gilt, prüfen Sie, ob sie auch wirklich vorhanden ist, damit sie ordnungsgemäß ausgewertet wird.Statische Enum-Typen können entweder als vollständig qualifizierte Pfadnamen oder als rohe Ganzzahlen dargestellt werden. Die folgenden Ausdrücke sind beispielsweise für
prior_asset_state
gültig:temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
und
temporal_asset.prior_asset_state == 3
Dynamische Enum-Typen in
temporal_asset.asset.resource.data
werden als Rohstrings dargestellt. Der folgende Ausdruck ist beispielsweise für den Inhaltstypcloudresourcemanager.googleapis.com/Project
gültig:temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"