高度なイベントセレクタを使用してデータイベントをフィルタする - AWS CloudTrail

高度なイベントセレクタを使用してデータイベントをフィルタする

このセクションでは、高度なイベントセレクタを使用して、データイベントをログ記録するための詳細なセレクタを作成する方法について説明します。これにより、目的のデータイベントのみをログに記録することができるようになり、コストを管理できます。

例:

  • eventName フィールドにフィルターを追加することで、特定の API コールを含めることも除外することもできます。

  • resources.ARN フィールドにフィルターを追加することで、特定のリソースのログ記録を含めることも除外することもできます。例えば、S3 データイベントをログに記録している場合、証跡の S3 バケットのログ記録を除外することができます。

  • readOnly フィールドにフィルターを追加することで、書き込み専用イベントのみまたは読み取り専用イベントのみをログに記録することができます。

次の表は、データイベントをフィルタリングするためにサポートされているフィールドを示しています。各 CloudTrail イベントタイプでサポートされているフィールドのリストについては、「AWS CloudTrail API リファレンス」の「AdvancedEventSelector」を参照してください。

フィールド 必要 有効な演算子: [Description] (説明)

eventCategory

あり

Equals

このフィールドは、データイベントを記録するように Data に設定されています。

resources.type

あり

Equals

このフィールドは、データイベントを記録するリソースタイプを選択する際に使用します。データイベントテーブルには、使用可能な値が表示されます。

readOnly

なし

Equals

これは、readOnly 値に基づいてデータイベントを含めるまたは除外するために使用するオプションのフィールドです。値が true の場合は読み取りイベントのログのみを記録します。値が false の場合は書き込みイベントのログのみを記録します。このフィールドを追加しない場合、CloudTrail は読み取りと書き込みの両方のイベントのログを記録します。

eventName

なし

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

これは、PutBucket または GetSnapshotBlock などの CloudTrail にログ記録されるデータイベントを、含めるか除外するために使用するオプションのフィールドです。

AWS CLI を使用している場合、各値をカンマで区切ることで複数の値を指定できます。

コンソールを使用している場合、フィルタリングする各 eventName に対して条件を作成することで、複数の値を指定できます。

resources.ARN

なし

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

これは、resources.ARN を指定することで、特定のリソースのデータイベントを除外するか含めるために使用するオプションのフィールドです。resources.ARN には任意の演算子を使用することができますが、Equals または NotEquals を使用する場合、指定した resources.type の有効なリソースの ARN と値が完全に一致する必要があります。特定の S3 バケット内のすべてのオブジェクトのすべてのデータイベントをログ記録するには、StartsWith 演算子を使用し、一致する値としてバケット ARN のみを含めます。

AWS CLI を使用している場合、各値をカンマで区切ることで複数の値を指定できます。

コンソールを使用している場合、フィルタリングする各 resources.ARN に対して条件を作成することで、複数の値を指定できます。

eventSource

なし

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

これを使用して、特定のイベントソースを含めたり除外したりできます。eventSource は通常、スペースなしのサービス名の短縮形に .amazonaws.com を付けたものです。例えば、eventSource Equalsec2.amazonaws.com に設定して、Amazon EC2 データイベントのみをログに記録できます。

eventType

なし

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

含めるまたは除外するイベントタイプ。例えば、このフィールドを NotEquals AwsServiceEvent に設定して、AWS のサービス イベントを除外できます。

sessionCredentialFromConsole

なし

Equals

NotEquals

AWS マネジメントコンソール セッションから発生したイベントを含めるか、除外します。このフィールドは、true の値で Equals または NotEquals に設定できます。

userIdentity.arn

なし

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

特定の IAM アイデンティティによって実行されたアクションのイベントを含めるか、除外します。詳細については、CloudTrail userIdentity 要素を参照してください。

CloudTrail コンソールを使用してデータイベントのログを記録するには、証跡またはイベントデータストアを作成または更新するときに、[データイベント] オプションを選択し、目的の [リソースタイプ] を選択します。[データイベント] テーブルには、CloudTrail コンソールで選択できるリソースタイプが表示されます。

コンソール上での [SNS トピック] リソースタイプの選択。

AWS CLI でデータイベントをログに記録するには、eventCategoryData と等しくなり、resources.type の値がデータイベントをログに記録するリソースタイプの値と等しくなるように --advanced-event-selector パラメータを設定します。[データイベント] テーブルには、使用可能なリソースタイプが一覧表示されます。

例えば、すべての Cognito アイデンティティプールのデータイベントをログに記録する場合は、次のように --advanced-event-selectors パラメータを設定します。

--advanced-event-selectors '[ { "Name": "Log Cognito data events on Identity pools", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::Cognito::IdentityPool"] } ] } ]'

上記の例では、すべてのアイデンティティプールの Cognito データイベントがログに記録されます。さらに高度なイベントセレクタを絞り込んで、eventNamereadOnlyresources.ARN フィールドでフィルタリングし、特定の関心のあるイベントをログに記録したり、関心のないイベントを除外したりすることができます。

複数のフィールドに基づいてデータイベントをフィルタリングするように、高度なイベントセレクタを設定することができます。例えば、次の例に示すように、すべての Amazon S3 PutObject および DeleteObject API コールはログに記録して、特定の S3 バケットのイベントログは除外するように高度なイベントセレクタを設定することができます。amzn-s3-demo-bucket をバケットの名前に置き換えてください。

--advanced-event-selectors '[ { "Name": "Log PutObject and DeleteObject events for all but one bucket", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventName", "Equals": ["PutObject","DeleteObject"] }, { "Field": "resources.ARN", "NotStartsWith": ["arn:aws:s3:::amzn-s3-demo-bucket/"] } ] } ]'

フィールドには複数の条件を含めることもできます。複数の条件を評価する方法については、「CloudTrail がフィールドの複数の条件を評価する方法」を参照してください。

高度なイベントセレクタを使用すれば、管理イベントとデータイベントの両方をログに記録できます。複数のリソースタイプのデータイベントのログを記録するには、データイベントのログを記録するリソースタイプごとにフィールドセレクタステートメントを追加します。

注記

ベーシックなイベントセレクターまたは高度なイベントセレクターのいずれかを使用できますが、両方を使用することはできません。高度なイベントセレクターを証跡に適用すると、既存の基本的なイベントセレクターは上書きされます。

セレクタは、* のようなワイルドカードの使用をサポートしていません。複数の値を 1 つの条件と一致させるには、StartsWithEndsWithNotStartsWith、または NotEndsWith を使用して、イベントフィールドの先頭または末尾を明示的に一致させることができます。

CloudTrail がフィールドの複数の条件を評価する方法

高度なイベントセレクタの場合、CloudTrail は フィールドの複数の条件を次のように評価します。

  • DESELECT 演算子は AND で複数条件を評価します。DESELECT 演算子の条件のいずれかが満たされた場合、イベントは配信されません。高度なイベントセレクタで利用可能な DESELECT 演算子は次のとおりです。

    • NotEndsWith

    • NotEquals

    • NotStartsWith

  • SELECT 演算子は OR で複数条件を評価します。高度なイベントセレクタで利用可能な SELECT 演算子は次のとおりです。

    • EndsWith

    • Equals

    • StartsWith

  • SELECT 演算子と DESELECT 演算子を組み合わせた場合も、上記のルールが適用され、両方のグループの条件を AND で評価します。

resources.ARN フィールドの複数の条件を示す例

次のイベントセレクタステートメント例では、AWS::S3::Object リソースタイプのデータイベントを収集し、resources.ARN フィールドに対して複数の条件を適用しています。

{ "Name": "S3Select", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ] }, { "Field": "resources.ARN", "Equals": [ "arn:aws:s3:::amzn-s3-demo-bucket/object1" ], "StartsWith": [ "arn:aws:s3:::amzn-s3-demo-bucket/" ], "EndsWith": [ "object3" ], "NotStartsWith": [ "arn:aws:s3:::amzn-s3-demo-bucket/deselect" ], "NotEndsWith": [ "object5" ], "NotEquals": [ "arn:aws:s3:::amzn-s3-demo-bucket/object6" ] } ] }

上記の例では、AWS::S3::Object リソースの Amazon S3 データイベントは、次の場合に配信されます。

  1. これらの DESELECT 演算子条件がどれも満たされていない。

    • resources.ARN フィールドの NotStartsWith の値 arn:aws:s3:::amzn-s3-demo-bucket/deselect

    • resources.ARN フィールドの NotEndsWith の値 object5

    • resources.ARN フィールドの NotEquals の値 arn:aws:s3:::amzn-s3-demo-bucket/object6

  2. これらの SELECT 演算子条件の少なくとも 1 つが満たされている。

    • resources.ARN フィールドの Equals の値 arn:aws:s3:::amzn-s3-demo-bucket/object1

    • resources.ARN フィールドの StartsWith の値 arn:aws:s3:::amzn-s3-demo-bucket/

    • resources.ARN フィールドの EndsWith の値 object3

評価ロジックに基づいて次のようになります。

  1. amzn-s3-demo-bucket/object1 のデータイベントは、Equals 演算子の値と一致し、NotStartsWithNotEndsWithNotEquals 演算子の値のいずれにも一致しないため配信されます。

  2. amzn-s3-demo-bucket/object2 のデータイベントは、StartsWith 演算子の値と一致し、NotStartsWithNotEndsWithNotEquals 演算子の値のいずれにも一致しないため配信されます。

  3. amzn-s3-demo-bucket1/object3 のデータイベントは、EndsWith 演算子と一致し、NotStartsWithNotEndsWithNotEquals 演算子の値のいずれにも一致しないため配信されます。

  4. arn:aws:s3:::amzn-s3-demo-bucket/deselectObject4 のデータイベントは、StartsWith 演算子の条件と一致するものの、NotStartsWith の条件とも一致するため配信されません。

  5. arn:aws:s3:::amzn-s3-demo-bucket/object5 のデータイベントは、StartsWith 演算子の条件と一致するものの、NotEndsWith の条件とも一致するため配信されません。

  6. arn:aws:s3:::amzn-s3-demo-bucket/object6 のデータイベントは、StartsWith 演算子の条件と一致するものの、NotEquals 演算子の条件とも一致するため配信されません。

AWS CLI データイベントをフィルタリングするための例

このセクションでは、さまざまなフィールドのデータイベントをフィルタリングする方法の AWS CLI 例を示します。その他の AWS CLI 例については、高度なイベントセレクタを使用して証跡のデータイベントをログに記録する および AWS CLI を使用したイベントデータストアのデータイベントのログ記録 を参照してください。

コンソールを使用してデータイベントをログに記録する方法の詳細については、「AWS マネジメントコンソール でのデータイベントのログ記録」を参照してください。

例 1: eventName フィールドでのフィルタリング

最初の例では、証跡の --advanced-event-selectors は、汎用バケットの Amazon S3 オブジェクトの GetObjectPutObject、および DeleteObject API コールのみをログに記録するように設定されています。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors '[ { "Name": "Log GetObject, PutObject and DeleteObject S3 data events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventName", "Equals": ["GetObject","PutObject","DeleteObject"] } ] } ]'

次の例では、EBS Direct API のデータイベントは含めるものの、ListChangedBlocks API コールは除外してログを記録する新しいイベントデータストアを作成しています。update-event-data-store コマンドを使用して、既存のイベントデータストアを更新できます。

aws cloudtrail create-event-data-store \ --name "eventDataStoreName" --advanced-event-selectors '[ { "Name": "Log all EBS Direct API data events except ListChangedBlocks", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::EC2::Snapshot"] }, { "Field": "eventName", "NotEquals": ["ListChangedBlocks"] } ] } ]'

例 2: resources.ARN および userIdentity.arn フィールドでのフィルタリング

次の例は、特定の汎用 S3 バケット内のすべての Amazon S3 オブジェクトのデータイベントを含めますが、bucket-scanner-role userIdentity によって生成されたイベントを除外する方法を示しています。resources.type の S3 イベントの値フィールドは AWS::S3::Object です。S3 オブジェクトと S3 バケットの ARN 値はわずかに異なるため、resources.ARNStartsWith 演算子を追加する必要があります。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors \ '[ { "Name": "S3EventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "resources.ARN", "StartsWith": ["arn:partition:s3:::amzn-s3-demo-bucket/"] }, { "Field": "userIdentity.arn", "NotStartsWith": ["arn:aws:sts::123456789012:assumed-role/bucket-scanner-role"]} ] } ]'

例 3: resources.type および eventName フィールドでフィルタリングして、Amazon S3 DeleteObjects イベントによって削除された個々のオブジェクトを除外する

次の例は、特定の汎用 Amazon S3 バケットのすべての Amazon S3 オブジェクトのすべてのデータイベントを含めますが、DeleteObject オペレーションによって削除された個々のオブジェクトを除外する方法を示しています。resources.type の S3 イベントの値フィールドは AWS::S3::Object です。イベント名の値は DeleteObject です。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors \ { "Name": "Exclude Events for DeleteObject operation", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ] }, { "Field": "eventName", "NotEquals": [ "DeleteObject" ] } ] }, { "Name": "Exclude DeleteObject Events for individual objects deleted by DeleteObjects Operation", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ] }, { "Field": "eventName", "Equals": [ "DeleteObject" ] }, { "Field": "eventType", "NotEquals": [ "AwsServiceEvent" ] } ] } ] (edited)