本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用高级事件选择器筛选数据事件
本节介绍如何使用高级事件选择器来创建用于记录数据事件的精细选择器,这可以通过仅记录感兴趣的特定数据事件来帮助您控制成本。
例如:
-
您可以通过在
eventName
字段上添加筛选条件器来包含或排除特定 API 调用。 -
您可以通过在
resources.ARN
字段上添加筛选条件来包含或排除特定资源的日志记录。例如,如果您正在记录 S3 数据事件,则可以对跟踪排除 S3 存储桶的日志记录。 -
通过在
readOnly
字段上添加筛选条件,您可以选择仅记录只写事件或只读事件。
下表描述了筛选数据事件时支持的字段。有关每种 CloudTrail 事件类型支持的字段列表,请参阅 Amazon CloudTrail API 参考AdvancedEventSelector中的。
字段 | 必需 | 有效运算符 | Description |
---|---|---|---|
|
是 |
|
此字段设置为 |
|
是 |
|
此字段用于选择要为其记录数据事件的资源类型。数据事件表显示了可能值。 |
|
否 |
|
这是一个可选字段,用于根据 |
|
否 |
|
这是一个可选字段,用于筛选或筛选出记录到的任何数据事件 CloudTrail,例如或。 如果您使用的是 Amazon CLI,则可以通过用逗号分隔每个值来指定多个值。 如果您使用的是控制台,则可以通过为要筛选的每个 |
|
否 |
|
这是一个可选字段,用于通过提供 如果您使用的是 Amazon CLI,则可以通过用逗号分隔每个值来指定多个值。 如果您使用的是控制台,则可以通过为要筛选的每个 |
|
否 |
|
您可以使用它来包含或排除特定的事件源。通常 |
|
否 |
|
要包含或排除的事件类型。例如,您可以将此字段设置为 |
|
否 |
|
包括或排除源自 Amazon Web Services Management Console 会话的事件。可以将此字段设置为 |
|
否 |
|
包含或排除特定 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 数据事件。您可以进一步优化高级事件选择器来筛选 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
运算符的条件匹配。
Amazon CLI 筛选数据事件的示例
本节提供了 Amazon CLI 一些示例,说明如何筛选不同字段上的数据事件。有关其他 Amazon CLI 示例,请参见使用高级事件选择器记录跟踪的数据事件和。
有关如何使用控制台记录数据事件的信息,请参阅使用记录数据事件 Amazon Web Services Management Console。
示例 1:对eventName
字段进行筛选
在第一个示例中,for --advanced-event-selectors
a trail的配置为仅在通用存储桶中记录对 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 的数据事件, 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.ARN
和userIdentity.arn
字段进行筛选
以下示例说明如何将所有 Amazon S3 对象的所有数据事件包含在特定的通用型 S3 存储桶中,但排除由生成的事件bucket-scanner-role
userIdentity
。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"]} ] } ]'