本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用高级事件选择器筛选数据事件
本节介绍如何使用高级事件选择器来创建细粒度选择器,通过仅记录感兴趣的特定数据事件来帮助您控制成本。
例如:
-
您可以通过在
eventName
字段上添加筛选条件器来包含或排除特定 API 调用。 -
您可以通过在
resources.ARN
字段上添加筛选条件来包含或排除特定资源的日志记录。例如,如果您正在记录 S3 数据事件,则可以对跟踪排除 S3 存储桶的日志记录。 -
通过在
readOnly
字段上添加筛选条件,您可以选择仅记录只写事件或只读事件。
下表提供了有关高级事件选择器的可配置字段的更多信息。
字段 | 必需 | 有效运算符 | Description |
---|---|---|---|
|
是 |
|
此字段设置为 在步道上支持:是 在事件数据存储上支持:是 |
|
是 |
|
此字段用于选择要为其记录数据事件的资源类型。数据事件表显示了可能值。 在步道上支持:是 在事件数据存储上支持:是 |
|
否 |
|
这是一个可选字段,用于根据 在步道上支持:是 在事件数据存储上支持:是 |
|
否 |
|
这是一个可选字段,用于筛选或筛选出记录到的任何数据事件 CloudTrail,例如或。 如果您使用的是 AWS CLI,则可以通过用逗号分隔每个值来指定多个值。 如果您使用的是控制台,则可以通过为要筛选的每个 在步道上支持:是 在事件数据存储上支持:是 |
|
否 |
|
这是一个可选字段,用于通过提供 如果您使用的是 AWS CLI,则可以通过用逗号分隔每个值来指定多个值。 如果您使用的是控制台,则可以通过为要筛选的每个 在步道上支持:是 在事件数据存储上支持:是 |
|
否 |
|
您可以使用它来包含或排除特定的事件源。通常 在步道上支持:否 在事件数据存储上支持:是 |
|
否 |
|
要包含或排除的事件类型。例如,您可以将此字段设置为 在步道上支持:否 在事件数据存储上支持:是 |
|
否 |
|
包括或排除源自 AWS Management Console 会话的事件。可以将此字段设置为 在步道上支持:否 在事件数据存储上支持:是 |
|
否 |
|
包括或排除特定 IAM 身份采取的操作的事件。有关更多信息,请参阅 CloudTrail userIdentity 元素。 在步道上支持:否 在事件数据存储上支持:是 |
要使用 CloudTrail 控制台记录数据事件,请在创建或更新跟踪或事件数据存储时选择数据事件选项,然后选择感兴趣的资源类型。数据事件表显示了您可以在 CloudTrail 控制台上选择的可能资源类型。

要使用记录数据事件 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 数据事件:
-
这些 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
-
-
至少满足以下 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
-
基于评估逻辑:
-
之所以传输
amzn-s3-demo-bucket/object1
的数据事件,是因为它与Equals
运算符的值匹配,而与NotStartsWith
、NotEndsWith
和NotEquals
运算符的任何值都不匹配。 -
之所以传输
amzn-s3-demo-bucket/object2
的数据事件,是因为它与StartsWith
运算符的值匹配,而与NotStartsWith
、NotEndsWith
和NotEquals
运算符的任何值都不匹配。 -
之所以传输
amzn-s3-demo-bucket1/object3
的数据事件,是因为它与EndsWith
运算符匹配,而与NotStartsWith
、NotEndsWith
和NotEquals
运算符的任何值都不匹配。 -
之所以传输
arn:aws:s3:::amzn-s3-demo-bucket/deselectObject4
的数据事件,是因为它与NotStartsWith
的条件匹配,也与StartsWith
运算符的条件匹配。 -
之所以传输
arn:aws:s3:::amzn-s3-demo-bucket/object5
的数据事件,是因为它与NotEndsWith
的条件匹配,也与StartsWith
运算符的条件匹配。 -
之所以不传输
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
字段进行筛选。
-
按照以下步骤创建跟踪或事件数据存储时,请做出以下选择:
-
选择数据事件。
-
选择要为其记录数据事件的资源类型。
-
对于日志选择器模板,选择自定义。
-
(可选)在选择器名称中,输入用于标识选择器的名称。选择器名称是高级事件选择器的描述性名称,例如“仅记录两个 S3 桶的数据事件”。选择器名称在高级事件选择器中列为
Name
,展开 JSON 视图即可查看该名称。 -
在高级事件选择器中,执行以下操作以根据
eventName
进行筛选:-
对于字段,选择 eventName。
-
对于运算符,选择条件运算符。在此示例中,我们将选择等于,因为我们要记录特定 API 调用。
-
对于值,输入要筛选的事件的名称。
-
要根据其他
eventName
进行筛选,请选择 + 条件。有关如何 CloudTrail 评估多个条件的信息,请参阅如何 CloudTrail 评估一个字段的多个条件。
-
-
选择 + 字段以对其他字段添加筛选条件。
-
eventName
使用筛选数据事件 AWS CLI
使用 AWS CLI,您可以对eventName
字段进行筛选,以包含或排除特定事件。
如果您正在更新现有跟踪或事件数据存储以记录其他事件选择器,请通过对跟踪运行 get-event-selectors
命令或对事件数据存储运行 get-event-data-store
命令来获取当前事件选择器。然后,更新事件选择器,为您想要记录的每种数据资源类型添加一个字段选择器。
以下示例记录跟踪的 S3 数据事件。--advanced-event-selectors
配置为仅记录 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 的数据事件, 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
结合使用,但是如果使用 Equals
或 NotEquals
,则值必须与您指定的 resources.type
值的有效资源的 ARN 完全匹配。要记录特定 S3 桶中所有对象的所有数据事件,请使用 StartsWith
运算符,并且仅包含存储桶 ARN 作为匹配值。
有关数据事件资源的 ARN 格式的更多信息,请参阅《服务授权参考》 AWS 服务中的操作、资源和条件密钥。
注意
您不能使用该resources.ARN
字段筛选没有的资源类型 ARNs。
resources.ARN
使用筛选数据事件 AWS Management Console
按照以下步骤使用 CloudTrail 控制台对resources.ARN
字段进行筛选。
-
按照以下步骤创建跟踪或事件数据存储时,请做出以下选择:
-
选择数据事件。
-
选择要为其记录数据事件的资源类型。
-
对于日志选择器模板,选择自定义。
-
(可选)在选择器名称中,输入用于标识选择器的名称。选择器名称是高级事件选择器的描述性名称,例如“仅记录两个 S3 桶的数据事件”。选择器名称在高级事件选择器中列为
Name
,展开 JSON 视图即可查看该名称。 -
在高级事件选择器中,执行以下操作以根据
resources.ARN
进行筛选:-
对于字段,选择 resources.ARN。
-
对于运算符,选择条件运算符。在此示例中,我们将选择开头为,因为我们要记录特定 S3 存储桶的数据事件。
-
在值中,输入您的资源类型的 ARN(例如)。
arn:aws:s3:::amzn-s3-demo-bucket
-
要筛选其他
resources.ARN
,请选择 + 条件。有关如何 CloudTrail 评估多个条件的信息,请参阅如何 CloudTrail 评估一个字段的多个条件。
-
-
选择 + 字段以对其他字段添加筛选条件。
-
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
\ --regionregion
\ --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
值设置为 true
或 false
。如果不添加此字段,则会同时 CloudTrail 记录读取和写入事件。true
的值仅记录读取事件。false
的值仅记录写入事件。
使用按readOnly
值筛选数据事件 AWS Management Console
按照以下步骤使用 CloudTrail 控制台对readOnly
字段进行筛选。
-
按照以下步骤创建跟踪或事件数据存储时,请做出以下选择:
-
选择数据事件。
-
选择要为其记录数据事件的资源类型。
-
对于记录选择器模板,为您的使用场景选择适当的模板。
注意
“仅记录 AWS Management Console 事件” 和 “排除 AWS 服务启动的事件” 模板仅适用于事件数据存储。
如果您计划执行此操作 选择此日志选择器模板 仅记录读取事件,而不应用其他筛选条件(例如,
resources.ARN
值)。仅记录读取事件
仅记录写入事件,而不应用其他筛选条件(例如,
resources.ARN
值)。仅记录写入事件
按
readOnly
值进行筛选并应用其他筛选条件(例如,resources.ARN
值)。自定义
在高级事件选择器中,执行以下操作以根据
readOnly
值进行筛选:记录写入事件
-
对于字段,选择 readOnly。
-
对于运算符,选择 equals。
-
对于值,请输入
false
。 -
选择 + 字段以对其他字段添加筛选条件。
记录读取事件
-
对于字段,选择 readOnly。
-
对于运算符,选择 equals。
-
对于值,请输入
true
。 -
选择 + 字段以对其他字段添加筛选条件。
-
-
使用按readOnly
值筛选数据事件 AWS CLI
使用 AWS CLI,您可以对readOnly
字段进行筛选。
您只能将 Equals
运算符与 readOnly
字段配合使用。您可以将 readOnly
值设置为 true
或 false
。如果不添加此字段,则会同时 CloudTrail记录读取和写入事件。true
的值仅记录读取事件。false
的值仅记录写入事件。
如果您正在更新现有跟踪或事件数据存储以记录其他事件选择器,请通过对跟踪运行 get-event-selectors
命令或对事件数据存储运行 get-event-data-store
命令来获取当前事件选择器。然后,更新事件选择器,为您想要记录的每种数据资源类型添加一个字段选择器。
以下示例说明如何配置您的跟踪以记录所有 Amazon S3 对象的只读数据事件。
aws cloudtrail put-event-selectors \ --trail-name
TrailName
\ --regionregion
\ --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"] } ] } ]'