Ereignisse mit Filtern abgleichen

Stimmen Sie Ereignisse mit Musterfiltern in Regeln ab, um eine Automatisierung zu erstellen.

Hintergrund

Um das Filtern zu verstehen, ist es hilfreich, die Struktur einer tatsächlichen Ereignisnachricht zu untersuchen. Events verwendet JSON-Objekte zur Darstellung von Ereignissen. Dies ist ein Ereignis:

{
	"cloudEventsVersion": "0.1",
	"eventID": "<unique_ID>",
	"eventType": "com.oraclecloud.objectstorage.deletebucket",
	"source": "objectstorage",
	"eventTypeVersion": "1.0",
	"eventTime": "2019-01-10T21:19:24Z",
	"contentType": "application/json",
	"extensions": {
		"compartmentId": "ocid1.compartment.oc1..<unique_ID>"
	},
	"data": {
		"compartmentId": "ocid1.compartment.oc1..<unique_ID>",
		"compartmentName": "example_name",
		"resourceName": "my_bucket",
		"resourceId": "ocid1.compartment.oc1..<unique_ID>",
		"availabilityDomain": "NfHZ:PHX-AD-2",
		"freeFormTags": {
			"Department": "Finance"
		},
		"definedTags": {
			"Operations": {
				"CostCenter": "42"
			}
		},
		"additionalDetails": {
			"namespace": "example_namespace",
			"publicAccessType": "NoPublicAccess",
			"eTag": "f8ffb6e9-f602-460f-a6c0-00b5abfa24c7"
		}
	}
}

Merken Sie sich bei Ereignissen zwei wichtige Punkte:

  • Alle Ereignisse haben dieselbe Gruppe von Attributen der höchsten Ebene, die als Ereignis-Envelope bezeichnet werden. Mit einer Ausnahme eignen sich die meisten dieser Attribute der höchsten Ebene nicht zum Erstellen von Filtern. Die Ausnahme ist eventType, das den in der Payload enthaltenen Ereignistyp identifiziert.
  • Die Payload des Ereignisses wird innerhalb des Attributs data angezeigt. Die Informationen in diesem Feld hängen davon ab, welcher Service das Ereignis erzeugt hat und welcher Ereignistyp angefordert wird. Die Informationen in der Payload eignen sich, um ein Ereignis mit einem Filter von einem anderen zu isolieren.

Weitere Informationen zum Envelope finden Sie unter Inhalt einer Ereignisnachricht. Eine Liste aller Services, die Ereignisse erzeugen, finden Sie unter Services, die Ereignisse erzeugen.

Ereignisabgleich mit Filtern

Regeln verwenden Filter, um Ereignisse auszuwählen und sie zur Zustellung an Aktionsressourcen weiterzuleiten. Eine Regel wird, ähnlich wie ein Ereignis, als JSON-Objekt dargestellt. Der Filter ist ein Attribut der Regel, und der Name des Attributs lautet condition. Ein Filter kann einem Ereignis entsprechen oder nicht.

Hier einige wichtige Punkte zu Filtern:

  • Felder, die in einem Filter nicht aufgeführt werden, werden ignoriert. Mit zwei geschweiften Klammern können Sie einen gültigen Filter erstellen, der mit allen Ereignisnachrichten übereinstimmt.
  • Damit ein Filter mit einem Ereignis übereinstimmt, muss das Ereignis alle im Filter aufgelisteten Feldnamen enthalten. Feldnamen müssen im Filter mit derselben Verschachtelungsstruktur angezeigt werden, die auch im Ereignis verwendet wird.
  • Regeln gelten für Ereignisse in dem Compartment, in dem Sie sie erstellen, sowie für alle untergeordneten Compartments. Dies bedeutet, dass ein von einer Regel angegebener Filter nur Ereignisse abgleicht, die von Ressourcen in demselben Compartment oder allen untergeordneten Compartments ausgegeben werden.
  • Das Sternchen (*) als Platzhalterzeichen wird unterstützt. Siehe Beispiele für Platzhalter in Filtern.

Beispiele für einfache Filter

Der folgende Filter entspricht jedem Ereignis im Compartment und in allen untergeordneten Compartments, in denen Sie die Regel erstellen.

{
... 

	"condition": "{ }"

}

Wenn Sie dem Filter Felder hinzufügen, begrenzen Sie die Ereignisse, mit denen der Filter übereinstimmen kann. Beispiel: Der folgende Filter stimmt nur mit dem Ereignis deletebucket überein.

{
...

	"condition": "{
		"eventType": "com.oraclecloud.objectstorage.deletebucket"
	}"
}

Um einen Filter für mehr als einen Ereignistyp zu erstellen, verwenden Sie ein Array in eventType. Der folgende Filter stimmt mit den Ereignissen deletebucket und createbucket überein.

{
...

	"condition": "{
		"eventType": [
			"com.oraclecloud.objectstorage.deletebucket",
			"com.oraclecloud.objectstorage.createbucket"
		]
	}"
}

Beispiele für Filter mit Ereignis-Payload-Attributen

Die beiden folgenden Filter stimmen mit dem Ereignis am Anfang der Seite überein. Der erste, da der Filter zwei Felder angibt und beide Felder im Ereignis erscheinen; der zweite, da der "NoPublicAccess"-Typ im Ereignis erscheint.

Achten Sie darauf, wie die Feldnamen im Filter mit der Verschachtelungsstruktur des Ereignisses übereinstimmen.

{
...

	"condition": "{
		"data": {
			"compartmentName": "example_name",
			"resourceName": "my_bucket"
		}
	}"
}
{
...

	"condition": "{
		"data": {
			"additionalDetails": {
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

Keiner der folgenden Filter stimmt mit dem Ereignis am Anfang der Seite überein. Der erste, da der Filter einen "PublicAccess"-Typ angibt, der nicht im Ereignis vorhanden ist. Der zweite, da das Ereignis einen Namen für einen anderen Bucket angibt.

{
...

	"condition": "{
		"data": {
			"compartmentName": "example_name",
			"resourceName": "my_bucket",
			"additionalDetails": {
				"publicAccessType": "PublicAccess"
			}
		}
	}"
}
{
...

	"condition": "{
		"data": {
			"additionalDetails": {
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

Beispiele für Arrays in Filtern

Arrays in Filtern stimmen mit Ereignissen überein, wenn einer der Werte im Filter mit einem Wert in einem Ereignis übereinstimmt. Der folgende Filter stimmt mit dem Ereignis am Anfang der Seite überein, weil der Name des Buckets im Ereignis in einem Array im Filter enthalten ist.

{
...

	"condition": "{
		"data": {
			"resourceName": [
				"my_bucket_2",
				"my_bucket_1",
				"my_bucket"
			],
			"additionalDetails": {
				"namespace": "example_namespace",
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

Sie können ein Array in eventType (oder jedem anderen Feld der obersten Ebene), die Ereignis-Payload, wie im vorherigen Beispiel dargestellt, oder beides verwenden.

{
...

	"condition": "{
		"eventType": [
			"com.oraclecloud.objectstorage.deletebucket",
			"com.oraclecloud.objectstorage.createbucket"
		],
		"data": {
			"resourceName": [
				"my_bucket_2",
				"my_bucket_1",
				"my_bucket"
			],
			"additionalDetails": {
				"namespace": "example_namespace",
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

Beispiele für Platzhalter in Filtern

Folgende Punkte sollten Sie bei Platzhaltern in Filtern beachten.

  • Verwenden Sie den Platzhalter nur in Attributwerten. Sie können das Sternchensymbol nicht für den Abgleich in Schlüsseln verwenden.
  • Ein Attributwert mit nur einem Sternchen entspricht allen Werten für den zugehörigen Attributnamen, jedoch nicht null.
  • Das Punktzeichen hat keine besondere Bedeutung in einem Filter.

Sie können das Sternchensymbol am Anfang einer Zeichenfolge, in der Mitte oder am Ende hinzufügen. Jeder der folgenden Filter stimmt mit dem Ereignis am Anfang der Seite überein.

  • Der erste, da der Platzhalter in displayName mit dem Benennungsmuster des Buckets übereinstimmt.
  • Die zweite, da publicAccessType einen Platzhalter verwendet. Aufgrund der Verwendung des Platzhalters würden diese ersten beiden Filter auch mit Ereignissen aus Buckets mit einem ähnlichen Benennungsmuster übereinstimmen und Ereignisse aus Buckets mit oder ohne öffentlichen Zugriff einbeziehen.
  • Der dritte Filter stimmt mit dem Ereignis überein, weil der Ereignistyp alle Typen von Bucket-Ereignissen beinhaltet.
{

...
	"condition": "{

		"data": {
			"resourceName": "my_bucket*",
			"additionalDetails": {
				"namespace": "example_namespace",
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}
{
...

	"condition": "{

		"data": {
			"resourceName": [
				"my_bucket_2",
				"my_bucket_1",
				"my_bucket"
			],
			"additionalDetails": {
				"namespace": "example_namespace",
				"publicAccessType": "*"
			}
		}
	}"
}
{
...

	"condition": "{
		"eventType": "com.oraclecloud.objectstorage.*bucket",

		"data": {
			"resourceName": [
				"my_bucket_2",
				"my_bucket_1",
				"my_bucket"
			],
			"additionalDetails": {
				"namespace": "example_namespace",
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}