Assetänderungen mit Bedingungen überwachen

In diesem Thema erfahren Sie, wie Sie Asset-Änderungen mit einer benutzerdefinierten Bedingung überwachen. Weitere Informationen zu Benachrichtigungen in Echtzeit finden Sie unter Allgemeines Thema.

Übersicht

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 für boolesche Entscheidungen basierend auf Attributdaten verwendet. Ein Bedingungsausdruck besteht aus einer oder mehreren Anweisungen, die mit logischen Operatoren (&&, || oder !) verknüpft werden. Jede Anweisung drückt eine attributbasierte Steuerungsregel aus, die auf TemporalAsset angewandt wird, um festzustellen, ob die Benachrichtigung gesendet wird.

Die folgenden CEL-Features sind für Feedbedingungen am wichtigsten:

  • Variablen: Bedingungen verwenden Variablen, um ein bestimmtes Attribut auszudrücken, z. B. temporal_asset.deleted (vom Typ "Boolescher Wert") oder temporal_asset.asset.name (vom Typ "String"). Diese Variablen werden zur Laufzeit anhand des Kontextes mit Werten gefüllt.
  • Operatoren: Jeder Datentyp (z. B. String) unterstützt eine Reihe von Operatoren, mit denen ein logischer Ausdruck erstellt werden kann. Meist werden Operatoren verwendet, um den Wert einer Variablen mit einem Literalwert wie temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345" zu vergleichen. Wenn der Eingabewert von temporal_asset.asset.name in diesem Beispiel //cloudresourcemanager.googleapis.com/projects/12345 ist, wird der Ausdruck als true ausgewertet.
  • Funktionen: Eine Funktion ist ein komplexer Operator für Datentypen, die komplexere Vorgänge unterstützen. In Bedingungsausdrücken gibt es vordefinierte Funktionen, die in Verbindung mit bestimmten Datentypen genutzt werden können. Beispiel: temporal_asset.asset.name.contains("keyword") verwendet eine String-Funktion und wird als true ausgewertet, wenn der Wert von temporal_asset.asset.name „keyword” enthält.
  • Logische Operatoren: Conditions unterstützt drei 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: In temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020 werden zwei einfache Anweisungen verknüpft, die beide erfüllt sein müssen, damit die Auswertung insgesamt true ergibt.

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: Die aktuelle Asset-Änderung im TemporalAsset-Format. Wenn die Bedingung als „true” ausgewertet wird, wird TemporalAsset an das konfigurierte Ziel gesendet.

Beispiele für Bedingungsausdrücke

Der folgende Bedingungsausdruck sendet Benachrichtigungen zu Erstellungsereignissen:

!temporal_asset.deleted &&
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"))

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.

  • Für Bedingungsausdrücke gilt 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"