View a markdown version of this page

使用高级事件选择器筛选数据事件 - 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

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

如果您使用的是 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 Equals ec2.amazonaws.com,以便仅记录 Amazon EC2 数据事件。

eventType

否

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

要包括或排除的 eventType。例如,可以将此字段设置为 NotEquals AwsServiceEvent,以排除 AWS 服务 事件。

sessionCredentialFromConsole

否

Equals

NotEquals

包括或排除源自 AWS 管理控制台 会话的事件。可以将此字段设置为 Equals 或 NotEquals 且值为 true。

userIdentity.arn

否

EndsWith

Equals

NotEndsWith

NotEquals

NotStartsWith

StartsWith

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

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

在控制台上选择 SNS 主题资源类型。

要使用记录数据事件 AWS 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 数据事件。您可以进一步优化高级事件选择器来筛选 eventName、readOnly 和 resources.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 评估一个字段的多个条件。

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

注意

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

选择器不支持使用通配符,例如 *。要将多个值与单个条件匹配,可以使用 StartsWith、EndsWith、NotStartsWith 或 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 运算符的值匹配,而与 NotStartsWith、NotEndsWith 和 NotEquals 运算符的任何值都不匹配。

  2. 之所以传输 amzn-s3-demo-bucket/object2 的数据事件,是因为它与 StartsWith 运算符的值匹配,而与 NotStartsWith、NotEndsWith 和 NotEquals 运算符的任何值都不匹配。

  3. 之所以传输 amzn-s3-demo-bucket1/object3 的数据事件,是因为它与 EndsWith 运算符匹配,而与 NotStartsWith、NotEndsWith 和 NotEquals 运算符的任何值都不匹配。

  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 运算符的条件匹配。

AWS CLI 过滤数据事件的示例

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

有关如何使用控制台记录数据事件的信息,请参阅使用记录数据事件 AWS 管理控制台。

示例 1:在 eventN ame 字段上进行筛选

在第一个示例中,跟踪的 --advanced-event-selectors 配置为仅针对通用存储桶中的 Amazon S3 对象记录 GetObject、PutObject 和 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.AR N 和用户字段 Identity.arn

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

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 操作删除的各个事件。S3 事件在 resources.type 字段中的值为 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)

示例 4:在 EventSource 字段上进行筛选以排除 Amazon S3 生命周期数据事件

以下示例显示如何记录所有 Amazon S3 数据事件,但不包括 Amazon S3 生命周期操作。这些操作包括对象过期、删除标记创建、存储类转换和分段上传中止。Amazon S3 生命周期事件使用s3lifecycle.amazonaws.com事件源。通过使用NotEquals操作员对s3lifecycle.amazonaws.com事件源进行筛选,您可以排除这些服务启动的事件,同时继续记录所有用户发起的 Amazon S3 数据事件。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors \ '[ { "Name": "Log S3 data events but exclude lifecycle operations", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventSource", "NotEquals": ["s3lifecycle.amazonaws.com"] } ] } ]'

示例 5:在 EventSource 字段上进行筛选以排除 Amazon S3 身份验证失败数据事件

以下示例显示如何记录所有 Amazon S3 数据事件,但排除 Amazon S3 身份验证失败事件,例如AuthenticateSignatureDoesNotMatchAuthenticateInvalidAccessKeyId、和AuthenticateExpiredToken。Amazon S3 身份验证失败事件使用s3-authn-errors.amazonaws.com事件源。通过使用NotEquals运算符对s3-authn-errors.amazonaws.com事件源进行筛选,您可以排除这些事件,同时继续记录所有成功的 Amazon S3 数据事件。

aws cloudtrail put-event-selectors \ --trail-name trailName \ --advanced-event-selectors \ '[ { "Name": "Log S3 data events but exclude authentication failure events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventSource", "NotEquals": ["s3-authn-errors.amazonaws.com"] } ] } ]'

这个高级事件选择器会过滤掉所有的事件s3-authn-errors.amazonaws.com。eventSource身份验证失败事件遵循命名模式,Authenticate后跟错误代码(例如AuthenticateSignatureDoesNotMatch、AuthenticateInvalidAccessKeyId、、AuthenticateExpiredToken、AuthenticateInvalidToken)。如果您无需审核针对您的 Amazon S3 资源的失败身份验证尝试,则排除这些事件有助于降低成本。