本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用高级事件选择器筛选数据事件
本节介绍如何使用高级事件选择器来创建用于记录数据事件的精细选择器,这可以通过仅记录感兴趣的特定数据事件来帮助您控制成本。
例如:
-
您可以通过在
eventName字段上添加筛选条件器来包含或排除特定 API 调用。 -
您可以通过在
resources.ARN字段上添加筛选条件来包含或排除特定资源的日志记录。例如,如果您正在记录 S3 数据事件,则可以对跟踪排除 S3 存储桶的日志记录。 -
通过在
readOnly字段上添加筛选条件,您可以选择仅记录只写事件或只读事件。
下表描述了筛选数据事件时支持的字段。有关每种 CloudTrail 事件类型支持的字段列表,请参阅 AWS CloudTrail API 参考AdvancedEventSelector中的。
| 字段 | 必需 | 有效运算符 | 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 评估一个字段的多个条件。
您可以使用高级事件选择器来同时记录管理事件和数据事件。要记录多种资源类型的数据事件,请为要记录数据事件的每种资源类型添加一个字段选择器语句。
注意
跟踪可以使用基本事件选择器或高级事件选择器,但不能同时使用两者。如果将高级事件选择器应用于跟踪,则所有现有的基本事件选择器都将被覆盖。
选择器不支持使用通配符,例如。*要将多个值与单个条件匹配,可以使用StartsWithEndsWith、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运算符的条件匹配。
AWS CLI 筛选数据事件的示例
本节提供了 AWS CLI 一些示例,说明如何筛选不同字段上的数据事件。有关其他 AWS CLI 示例,请参见使用高级事件选择器记录跟踪的数据事件和使用记录事件数据存储的数据事件 AWS CLI。
有关如何使用控制台记录数据事件的信息,请参阅使用记录数据事件 AWS Management Console。
示例:
示例 1:对eventName字段进行筛选
在第一个示例中,for --advanced-event-selectors a trail的配置为仅在通用存储桶中记录对 Amazon S3 对象的GetObjectPutObject、和 DeleteObject API 调用。
aws cloudtrail put-event-selectors \ --trail-nametrailName\ --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-roleuserIdentity。S3 事件在 resources.type 字段中的值为 AWS::S3::Object。由于 S3 对象和 S3 存储桶的 ARN 值略有不同,因此必须为添加运算符。StartsWith resources.ARN
aws cloudtrail put-event-selectors \ --trail-nametrailName\ --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-nametrailName\ --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)