Asset-Änderungen mit Bedingungen überwachen

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) oder temporal_asset.asset.name (vom Typ String) 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 wie temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345" zu vergleichen. Wenn in diesem Beispiel der Eingabewert von temporal_asset.asset.name //cloudresourcemanager.googleapis.com/projects/12345 ist, wird der Ausdruck als true 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 eine String-Enthält-Funktion und wird mit true ausgewertet, wenn der Wert von temporal_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 Gesamtbewertungsergebnis true 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 richtigen asset_type im Feed anzugeben. Wenn Validierungsfehler während der Bewertung auftreten, wird keine Benachrichtigung gesendet und Fehler werden protokolliert. Logs aufrufen

  • Bei 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 Bedingung temporal_asset.asset.resource.data.name != "my_name" das Feld name 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 Inhaltstyp cloudresourcemanager.googleapis.com/Project gültig:

    temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"