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

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

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

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

例如:

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

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

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

下表提供了有关高级事件选择器的可配置字段的更多信息。

字段 必需 有效运算符 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 结合使用,但是如果使用 EqualsNotEquals,则值必须与您指定的 resources.type 的有效资源的 ARN 完全匹配。要记录特定 S3 桶中所有对象的所有数据事件,请使用 StartsWith 运算符,并且仅包含存储桶 ARN 作为匹配值。

如果您使用的是 AWS 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以排除AWS 服务 事件

在步道上支持:

在事件数据存储上支持:

sessionCredentialFromConsole

Equals

NotEquals

包括或排除源自 AWS Management Console 会话的事件。可以将此字段设置为EqualsNotEquals将值设置为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 数据事件。您可以进一步优化高级事件选择器来筛选 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 运算符的条件匹配。

通过 eventName 筛选数据事件

使用高级事件选择器,您可以根据 eventName 字段的值包含或排除事件。筛选eventName可以帮助控制成本,因为在记录数据事件时可以避免产生成本,从而增加对新数据的 APIs支持。 AWS 服务

您可以将任何运算符与 eventName 字段配合使用。您可以使用它来筛选或筛选出记录到的任何数据事件 CloudTrail,例如或。PutBucket GetSnapshotBlock

eventName使用筛选数据事件 AWS Management Console

按照以下步骤使用 CloudTrail 控制台对eventName字段进行筛选。

  1. 按照创建跟踪过程中的步骤进行操作,或者按照创建事件数据存储过程中的步骤进行操作。

  2. 按照以下步骤创建跟踪或事件数据存储时,请做出以下选择:

    1. 选择数据事件

    2. 选择要为其记录数据事件的资源类型

    3. 对于日志选择器模板,选择自定义

    4. (可选)在选择器名称中,输入用于标识选择器的名称。选择器名称是高级事件选择器的描述性名称,例如“仅记录两个 S3 桶的数据事件”。选择器名称在高级事件选择器中列为 Name,展开 JSON 视图即可查看该名称。

    5. 高级事件选择器中,执行以下操作以根据 eventName 进行筛选:

      1. 对于字段,选择 eventName

      2. 对于运算符,选择条件运算符。在此示例中,我们将选择等于,因为我们要记录特定 API 调用。

      3. 对于,输入要筛选的事件的名称。

      4. 要根据其他 eventName 进行筛选,请选择 + 条件。有关如何 CloudTrail 评估多个条件的信息,请参阅如何 CloudTrail 评估一个字段的多个条件

    6. 选择 + 字段以对其他字段添加筛选条件。

eventName使用筛选数据事件 AWS CLI

使用 AWS CLI,您可以对eventName字段进行筛选,以包含或排除特定事件。

如果您正在更新现有跟踪或事件数据存储以记录其他事件选择器,请通过对跟踪运行 get-event-selectors 命令或对事件数据存储运行 get-event-data-store 命令来获取当前事件选择器。然后,更新事件选择器,为您想要记录的每种数据资源类型添加一个字段选择器。

以下示例记录跟踪的 S3 数据事件。--advanced-event-selectors 配置为仅记录 GetObjectPutObjectDeleteObject 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"] } ] } ]'

通过 resources.ARN 筛选数据事件

使用高级事件选择器,您可以根据 resources.ARN 字段的值进行筛选。

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

有关数据事件资源的 ARN 格式的更多信息,请参阅《服务授权参考》 AWS 服务中的操作、资源和条件密钥

注意

您不能使用该resources.ARN字段筛选没有的资源类型 ARNs。

resources.ARN使用筛选数据事件 AWS Management Console

按照以下步骤使用 CloudTrail 控制台对resources.ARN字段进行筛选。

  1. 按照创建跟踪过程中的步骤进行操作,或者按照创建事件数据存储过程中的步骤进行操作。

  2. 按照以下步骤创建跟踪或事件数据存储时,请做出以下选择:

    1. 选择数据事件

    2. 选择要为其记录数据事件的资源类型

    3. 对于日志选择器模板,选择自定义

    4. (可选)在选择器名称中,输入用于标识选择器的名称。选择器名称是高级事件选择器的描述性名称,例如“仅记录两个 S3 桶的数据事件”。选择器名称在高级事件选择器中列为 Name,展开 JSON 视图即可查看该名称。

    5. 高级事件选择器中,执行以下操作以根据 resources.ARN 进行筛选:

      1. 对于字段,选择 resources.ARN

      2. 对于运算符,选择条件运算符。在此示例中,我们将选择开头为,因为我们要记录特定 S3 存储桶的数据事件。

      3. 中,输入您的资源类型的 ARN(例如)。arn:aws:s3:::amzn-s3-demo-bucket

      4. 要筛选其他 resources.ARN,请选择 + 条件。有关如何 CloudTrail 评估多个条件的信息,请参阅如何 CloudTrail 评估一个字段的多个条件

      按 resources.ARN 筛选 S3 数据事件
    6. 选择 + 字段以对其他字段添加筛选条件。

resources.ARN使用筛选数据事件 AWS CLI

使用 AWS CLI,您可以对该resources.ARN字段进行筛选以记录特定 ARN 的事件或排除特定 ARN 的日志记录。

如果您正在更新现有跟踪或事件数据存储以记录其他事件选择器,请通过对跟踪运行 get-event-selectors 命令或对事件数据存储运行 get-event-data-store 命令来获取当前事件选择器。然后,更新事件选择器,为您想要记录的每种数据资源类型添加一个字段选择器。

以下示例说明如何配置您的跟踪以包含特定 S3 存储桶中的所有 Simple Storage Service(Amazon S3)对象的所有数据事件。S3 事件在 resources.type 字段中的值为 AWS::S3::Object。由于 S3 对象和 S3 存储桶的 ARN 值略有不同,因此必须为 resources.ARN 添加 StartsWith 运算符以捕获所有事件。

aws cloudtrail put-event-selectors \ --trail-name TrailName \ --region region \ --advanced-event-selectors \ '[ { "Name": "S3EventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "resources.ARN", "StartsWith": ["arn:aws:s3:::amzn-s3-demo-bucket/"] } ] } ]'

readOnly 值筛选数据事件

使用高级事件选择器,您可以根据 readOnly 字段的值进行筛选。

您只能将 Equals 运算符与 readOnly 字段配合使用。您可以将 readOnly 值设置为 truefalse。如果不添加此字段,则会同时 CloudTrail 记录读取和写入事件。true 的值仅记录读取事件。false 的值仅记录写入事件。

使用按readOnly值筛选数据事件 AWS Management Console

按照以下步骤使用 CloudTrail 控制台对readOnly字段进行筛选。

  1. 按照创建跟踪过程中的步骤进行操作,或者按照创建事件数据存储过程中的步骤进行操作。

  2. 按照以下步骤创建跟踪或事件数据存储时,请做出以下选择:

    1. 选择数据事件

    2. 选择要为其记录数据事件的资源类型

    3. 对于记录选择器模板,为您的使用场景选择适当的模板。

      注意

      仅记录 AWS Management Console 事件” 和 “排除 AWS 服务启动的事件” 模板仅适用于事件数据存储。

      对数据事件选择日志选择器模板
      如果您计划执行此操作 选择此日志选择器模板

      仅记录读取事件,而不应用其他筛选条件(例如,resources.ARN 值)。

      仅记录读取事件

      仅记录写入事件,而不应用其他筛选条件(例如,resources.ARN 值)。

      仅记录写入事件

      readOnly 值进行筛选并应用其他筛选条件(例如,resources.ARN 值)。

      自定义

      高级事件选择器中,执行以下操作以根据 readOnly 值进行筛选:

      记录写入事件
      1. 对于字段,选择 readOnly

      2. 对于运算符,选择 equals

      3. 对于,请输入 false

      4. 选择 + 字段以对其他字段添加筛选条件。

      记录读取事件
      1. 对于字段,选择 readOnly

      2. 对于运算符,选择 equals

      3. 对于,请输入 true

      4. 选择 + 字段以对其他字段添加筛选条件。

使用按readOnly值筛选数据事件 AWS CLI

使用 AWS CLI,您可以对readOnly字段进行筛选。

您只能将 Equals 运算符与 readOnly 字段配合使用。您可以将 readOnly 值设置为 truefalse。如果不添加此字段,则会同时 CloudTrail记录读取和写入事件。true 的值仅记录读取事件。false 的值仅记录写入事件。

如果您正在更新现有跟踪或事件数据存储以记录其他事件选择器,请通过对跟踪运行 get-event-selectors 命令或对事件数据存储运行 get-event-data-store 命令来获取当前事件选择器。然后,更新事件选择器,为您想要记录的每种数据资源类型添加一个字段选择器。

以下示例说明如何配置您的跟踪以记录所有 Amazon S3 对象的只读数据事件。

aws cloudtrail put-event-selectors \ --trail-name TrailName \ --region region \ --advanced-event-selectors '[ { "Name": "Log read-only S3 data events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "readOnly", "Equals": ["true"] } ] } ]'

下一个示例创建了一个新的事件数据存储,该存储仅记录 EBS Direct 的只写数据事件。 APIs你可以使用 update-event-data-store命令来更新现有的事件数据存储。

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