Oracle Cloud Infrastructureドキュメント

フィルタを使用したイベントの照合

このトピックでは、自動化を構築するためのルールでのパターン・フィルタによるイベントの照合方法について説明します。

バックグラウンド

フィルタリングを理解するには、実際のイベント・メッセージの構造をレビューすると役に立ちます。 「イベント」は、JSONオブジェクトを使用してイベントを表します。 これはイベントです: 

{
	"cloudEventsVersion": "0.1",
	"eventID": "<unique_ID>",
	"eventType": "com.oraclecloud.objectstorage.deletebucket",
	"source": "objectstorage",
	"eventTypeVersion": "1.0",
	"eventTime": "2019-01-10T21:19:24Z",
	"schemaURL": null,
	"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"
		}
	}
}

すべてのイベントに関する注意事項は、次の2つです: 

  • イベントはすべて同じ最上位属性セットを持ち、これらはイベント・エンベロープと呼ばれます。 例外が1つあり、これらの最上位属性のほとんどはフィルタの作成に有用ではありません。 例外はeventTypeです。これは、ペイロードに含まれるイベントのタイプを識別します。
  • イベントのペイロードはdata属性内に表示されます。 このフィールドの情報は、イベントを生成したサービスおよびリクエストしたイベント・タイプによって異なります。 ペイロード内の情報は、あるイベントをフィルタによって別のイベントから分離する場合に役立ちます。

エンベロープの詳細は、「イベント・メッセージの内容」を参照してください。 イベントを生成するすべてのサービスのリストについては、「イベントを生成するサービス」を参照してください。

フィルタによるイベント一致

ルールでは、フィルタを使用してイベントを選択し、それらをアクション・リソースに配信します。 ルールは、イベントと同様に、JSONオブジェクトとして表されます。 フィルタはルールの属性で、属性はconditionです。 フィルタは、イベントに一致するか、一致しないかのいずれかです。

フィルタに関する注意事項は次のとおりです:

  • フィルタで指定されていないフィールドは無視されます。 2つの中カッコを持つすべてのイベント・メッセージに一致する有効なフィルタを作成できます。
  • フィルタでイベントを照合するには、フィルタにリストされているすべてのフィールド名がイベントに含まれている必要があります。 フィールド名は、イベントで使用されているのと同じネスト構造でフィルタに表示される必要があります。
  • ルールは、作成するコンパートメントのイベントおよび子コンパートメントに適用されます。 つまり、ルールによって指定されたフィルタは、同じコンパートメントまたは子コンパートメントのリソースから発行されたイベントのみと一致します。
  • ワイルドカード照合はアスタリスク(*)文字でサポートされています。 「フィルタでのワイルドカード照合の例」も参照してください。

単純フィルタの例

次のフィルタは、コンパートメントのすべてのイベントおよびルールを作成する子コンパートメントと一致します。

{
... 

	"condition": "{ }"

}

フィールドをフィルタに追加すると、フィルタが一致するイベントを制限します。 たとえば、次のフィルタはdeletebucketイベントのみに一致します。

{
...

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

複数のイベント・タイプのフィルタを作成するには、eventTypeで配列を使用します。 次のフィルタはdeletebucketおよびcreatebucketイベントと一致します。

{
...

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

イベント・ペイロード属性を含むフィルタの例

次のフィルタは、ページの上部のイベントと一致します。 1つ目は、イベントに2つのフィールドと両方のフィールドが表示されるため、イベントにはNoPublicAccessタイプが表示されるため、2つ目のフィールドが指定されます。

注意点として重要なのは、フィルタ内のフィールド名がイベントのネスト構造と一致している方法です。

{
...

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

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

次のフィルタでは、このページの最上部のイベントはいずれも一致しません。 最初の理由は、フィルタがイベントで見つからないPublicAccessTypeを指定するためです。 2つ目は、イベントで異なるバケットの名前を指定するためです。

{
...

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

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

フィルタの配列の例

フィルタの配列は、フィルタのいずれかの値がイベントの値と一致する場合にイベントを照合します。 次のフィルタは、イベント内のバケットの名前がフィルタの配列に含まれているため、ページの上部のイベントと一致します。

{
...

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

eventType (またはトップレベル・フィールド)で配列を使用したり、前述の例に示すようにイベント・ペイロードを使用することも、イベント・ペイロードとトップレベル・フィールドの両方を使用することもできます。

{
...

	"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"
			}
		}
	}"
}

フィルタでのワイルドカード照合の例

次に、ワイルドカードとフィルタの一致について考慮する点をいくつか示します。

  • 属性値にはワイルドカードのみを使用します。 キーの一致にはアスタリスクを使用できません。
  • アスタリスクのみの属性値は、関連付けられた属性名のすべての値と一致しますが、nullには一致しません。
  • フィルタでは、ピリオド文字に特殊な意味はありません。

アスタリスクは文字列の開始時、中間、または末尾に追加できます。 この後に続くすべてのフィルタは、ページの上部にあるイベントに一致します。

  • displayNameでは、最初のワイルドカードはバケット・ネーミング・パターンと一致するため、照合されます。
  • 2つ目は、publicAccessTypeでワイルドカードが使用されるために一致します。 ワイルドカードを使用するため、最初の2つのフィルタは、バケットからのイベントと同様のネーミング・パターンを照合し、パブリック・アクセスの有無にかかわらずバケットからのイベントを含みます。
  • 3番目のバケット・イベントは、イベント・タイプにすべてのタイプのバケット・イベントが含まれるため一致しています。
{

...
	"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"
			}
		}
	}"
}