使用高级事件选择器筛选数据事件
本节介绍如何使用高级事件选择器来创建细粒度选择器以记录数据事件,从而通过仅记录感兴趣的特定数据事件来帮助您控制成本。
例如:
-
您可以通过在
eventName字段上添加筛选条件器来包含或排除特定 API 调用。 -
您可以通过在
resources.ARN字段上添加筛选条件来包含或排除特定资源的日志记录。例如,如果您正在记录 S3 数据事件,则可以对跟踪排除 S3 存储桶的日志记录。 -
通过在
readOnly字段上添加筛选条件,您可以选择仅记录只写事件或只读事件。
下表描述了筛选数据事件时支持的字段。有关每种 CloudTrail 事件类型支持的字段列表,请参阅《AWS CloudTrail API 参考》中的 AdvancedEventSelector。
| 字段 | 必需 | 有效运算符 | Description |
|---|---|---|---|
|
|
是 |
|
此字段设置为 |
|
|
是 |
|
此字段用于选择要为其记录数据事件的资源类型。数据事件表显示了可能值。 |
|
|
否 |
|
这是一个可选字段,用于根据 |
|
|
否 |
|
这是一个可选字段,用于筛选入或筛选出记录到 CloudTrail 的任何数据事件,例如 如果您使用的是 AWS CLI,则可以通过用逗号分隔每个值来指定多个值。 如果您使用的是控制台,则可以通过为要筛选的每个 |
|
|
否 |
|
这是一个可选字段,用于通过提供 如果您使用的是 AWS CLI,则可以通过用逗号分隔每个值来指定多个值。 如果您使用的是控制台,则可以通过为要筛选的每个 |
|
|
否 |
|
可以使用它来包含或排除特定的事件源。 |
|
|
否 |
|
要包括或排除的 eventType。例如,可以将此字段设置为 |
|
|
否 |
|
包含或排除源自AWS 管理控制台会话的事件。可以将此字段设置为 |
|
|
否 |
|
包含或排除特定 IAM 身份所采取操作的事件。有关更多信息,请参阅 CloudTrail userIdentity 元素。 |
要使用 CloudTrail 控制台记录数据事件,请选择数据事件选项,然后在创建或更新跟踪或事件数据存储时选择感兴趣的资源类型。数据事件表显示您可以在 CloudTrail 控制台上选择的可能的资源类型。
要使用 AWS CLI 记录数据事件,请配置 --advanced-event-selector 参数,将 eventCategory 设置为等于 Data,将 resources.type 值设置为等于您要记录数据事件的资源类型值。数据事件表列出了可用的资源类型。
例如,如果您想记录所有 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运算符的条件匹配。
筛选数据事件的 AWS CLI 示例
本节提供了一些 AWS CLI 示例,说明如何根据不同字段筛选数据事件。有关其他 AWS CLI 示例,请参阅 使用高级事件选择器记录跟踪的数据事件 和 使用 AWS CLI 记录事件数据存储的数据事件。
有关如何使用控制台记录数据事件的信息,请参阅使用 AWS 管理控制台 记录数据事件。
示例:
示例 1:根据 eventName 字段进行筛选
在第一个示例中,跟踪的 --advanced-event-selectors 配置为仅针对通用存储桶中的 Amazon S3 对象记录 GetObject、PutObject 和 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 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.ARN 和 userIdentity.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-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)