使用高级事件选择器筛选数据事件 - Amazon CloudTrail
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用高级事件选择器筛选数据事件

本节介绍如何使用高级事件选择器来创建用于记录数据事件的精细选择器,这可以通过仅记录感兴趣的特定数据事件来帮助您控制成本。

例如:

  • 您可以通过在 eventName 字段上添加筛选条件器来包含或排除特定 API 调用。

  • 您可以通过在 resources.ARN 字段上添加筛选条件来包含或排除特定资源的日志记录。例如,如果您正在记录 S3 数据事件,则可以对跟踪排除 S3 存储桶的日志记录。

  • 通过在 readOnly 字段上添加筛选条件,您可以选择仅记录只写事件或只读事件。

下表描述了筛选数据事件时支持的字段。有关每种 CloudTrail 事件类型支持的字段列表,请参阅 Amazon CloudTrail API 参考AdvancedEventSelector中的。

字段 必需 有效运算符 Description

eventCategory

Equals

此字段设置为 Data 以记录数据事件。

resources.type

Equals

此字段用于选择要为其记录数据事件的资源类型。数据事件表显示了可能值。

readOnly

Equals

这是一个可选字段,用于根据 readOnly 值包含或排除数据事件。true 的值仅记录读取事件。false 的值仅记录写入事件。如果不添加此字段,则会同时 CloudTrail 记录读取和写入事件。

eventName

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

这是一个可选字段,用于筛选或筛选出记录到的任何数据事件 CloudTrail,例如或。PutBucket GetSnapshotBlock

如果您使用的是 Amazon CLI,则可以通过用逗号分隔每个值来指定多个值。

如果您使用的是控制台,则可以通过为要筛选的每个 eventName 值创建一个条件来指定多个值。

resources.ARN

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

这是一个可选字段,用于通过提供 resources.ARN 来排除或包含特定资源的数据事件。您可以将任意运算符与 resources.ARN 结合使用,但是如果使用 EqualsNotEquals,则值必须与您指定的 resources.type 的有效资源的 ARN 完全匹配。要记录特定 S3 桶中所有对象的所有数据事件,请使用 StartsWith 运算符,并且仅包含存储桶 ARN 作为匹配值。

如果您使用的是 Amazon CLI,则可以通过用逗号分隔每个值来指定多个值。

如果您使用的是控制台,则可以通过为要筛选的每个 resources.ARN 值创建一个条件来指定多个值。

eventSource

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

您可以使用它来包含或排除特定的事件源。通常eventSource是服务名称的简短形式,不带空格加号.amazonaws.com。例如,您可以将设置eventSourceEqualsec2.amazonaws.com为仅记录 Amazon EC2 数据事件。

eventType

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

包含或排除的事件类型。例如,您可以将此字段设置为NotEqualsAwsServiceEvent以排除Amazon Web Services 服务 事件

sessionCredentialFromConsole

Equals

NotEquals

包括或排除源自 Amazon Web Services Management Console 会话的事件。可以将此字段设置为EqualsNotEquals将值设置为true

userIdentity.arn

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

包含或排除特定 IAM 身份采取的操作的事件。有关更多信息,请参阅 CloudTrail userIdentity 元素

要使用 CloudTrail 控制台记录数据事件,请在创建或更新跟踪时选择数据事件选项,然后选择感兴趣的资源类型数据事件表显示了您可以在 CloudTrail 控制台上选择的可能资源类型。

要使用记录数据事件 Amazon CLI,请将--advanced-event-selector参数配置为将eventCategory等于,将resources.type值设置为等于Data且值等于您要记录数据事件的资源类型值。数据事件表列出了可用的资源类型。

例如,如果您想记录所有 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 PutObjectDeleteObject 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 评估一个字段的多个条件

您可以使用高级事件选择器来同时记录管理事件和数据事件。要记录多种资源类型的数据事件,请为要记录数据事件的每种资源类型添加一个字段选择器语句。

注意

跟踪可以使用基本事件选择器或高级事件选择器,但不能同时使用两者。如果将高级事件选择器应用于跟踪,则所有现有的基本事件选择器都将被覆盖。

选择器不支持使用通配符,例如。*要将多个值与单个条件进行匹配,可以使用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 运算符条件之一:

    • 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 的数据事件,是因为它与 NotStartsWith 的条件匹配,也与 StartsWith 运算符的条件匹配。

  5. 之所以传输 arn:aws:s3:::amzn-s3-demo-bucket/object5 的数据事件,是因为它与 NotEndsWith 的条件匹配,也与 StartsWith 运算符的条件匹配。

  6. 之所以不传输 arn:aws:s3:::amzn-s3-demo-bucket/object6 的数据事件,是因为它与 NotEquals 运算符的条件匹配,也与 StartsWith 运算符的条件匹配。

Amazon CLI 筛选数据事件的示例

本节提供了 Amazon CLI 一些示例,说明如何筛选不同字段上的数据事件。有关其他 Amazon CLI 示例,请参见使用高级事件选择器记录跟踪的数据事件

有关如何使用控制台记录数据事件的信息,请参阅使用记录数据事件 Amazon Web Services Management Console

示例 1:对eventName字段进行筛选

在第一个示例中,for --advanced-event-selectors a trail的配置为仅在通用存储桶中记录对 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 的数据事件, APIs 但不包括 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.ARNuserIdentity.arn字段进行筛选

以下示例说明如何将所有 Amazon S3 对象的所有数据事件包含在特定的通用型 S3 存储桶中,但排除由生成的事件bucket-scanner-roleuserIdentity。S3 事件在 resources.type 字段中的值为 AWS::S3::Object。由于 S3 对象和 S3 存储桶的 ARN 值略有不同,因此必须为添加运算符。StartsWith resources.ARN

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