记录跟踪记录的数据事件 - Amazon CloudTrail
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

记录跟踪记录的数据事件

默认情况下,跟踪记录不记录数据事件。记录数据事件将收取额外费用。有关更多信息,请参阅 Amazon CloudTrail 定价

注意

Amazon CloudWatch Events 中提供由您的跟踪记录记录的事件。例如,如果您将跟踪配置为记录 S3 对象的数据事件而非管理事件,则您的跟踪将仅处理和记录指定的 S3 对象的数据事件。Amazon CloudWatch Events 中提供这些 S3 对象的数据事件。有关更多信息,请参阅 Amazon CloudWatch Events 用户指南中的 Amazon API 调用

数据事件

通过数据事件,可以了解对资源执行的或在资源内执行的资源操作。这些也称为数据层面操作。数据事件通常是高容量活动。

将以下数据事件资源类型与基本事件选择器结合使用:

  • 存储桶和存储桶中的对象上的 Simple Storage Service(Amazon S3)对象级 API 活动(例如,GetObjectDeleteObjectPutObject API 操作)

  • Amazon Lambda 函数执行活动 (Invoke API)

  • 表上的 Amazon DynamoDB 对象级 API 活动(例如,PutItemDeleteItemUpdateItem API 操作)。

除了基本事件选择器之外,还可以将以下数据类型与高级事件选择器结合使用:

  • Simple Storage Service(Amazon S3)on Outposts 对象级 API 活动

  • Ethereum 节点上的 Amazon Managed Blockchain JSON-RPC 调用,例如 eth_getBalanceeth_getBlockByNumber

  • Simple Storage Service(Amazon S3)对象 Lambda 接入点 API 活动,例如调用 CompleteMultipartUploadGetObject

  • Amazon Elastic Block Store (EBS) Direct API,例如 Amazon EBS 快照上的 PutSnapshotBlockGetSnapshotBlockListChangedBlocks

  • 接入点上的 Simple Storage Service(Amazon S3)API 活动

  • 流上的 Amazon DynamoDB API 活动

  • 表上的 Amazon Glue API 活动

    注意

    目前,表的 Amazon Glue 数据事件仅在以下区域受支持:

    • 美国东部(弗吉尼亚州北部)

    • 美国东部(俄亥俄州)

    • 美国西部(俄勒冈州)

    • 欧洲(爱尔兰)

    • 亚太区域(东京)

预设情况下,在您创建跟踪记录时,未记录数据事件。要记录 CloudTrail 数据事件,您必须明确将要为其收集活动的受支持的资源或资源类型添加到跟踪。有关更多信息,请参阅创建跟踪

在单区域跟踪上,您只能为在该区域中可访问的资源记录数据事件。尽管 S3 存储桶是全球性的,但 Amazon Lambda 函数和 DynamoDB 表是区域性的。

记录数据事件将收取额外费用。有关 CloudTrail 定价的信息,请参阅 Amazon CloudTrail 定价

记录数据事件的步骤取决于您是否在跟踪上启用了高级事件选择器。使用本节中与您已在跟踪上启用的事件选择器类型相匹配的程序。

  1. 打开 CloudTrail 控制台的 Trails(跟踪)页面,然后选择跟踪名称。

    注意

    虽然您可以编辑现有跟踪以添加日志记录数据事件,但作为最佳实践,请考虑专门创建单独的跟踪以记录数据事件。

  2. 对于 Data event(数据事件),选择 Edit(编辑)。

  3. 对于 Simple Storage Service(Amazon S3)存储桶:

    1. 对于 Data event source(数据事件源),选择 S3

    2. 您可以选择记录 All current and future S3 buckets(所有当前和未来 S3 存储桶),也可以指定单个存储桶或函数。默认情况下,记录所有当前和未来 S3 存储桶的数据事件。

      注意

      保留默认 All current and future S3 buckets(所有当前和未来 S3 存储桶)选项会为您的 Amazon 账户中现有的所有存储桶和您完成跟踪创建后创建的任何存储桶启用数据事件日志记录。它也将为由 Amazon 账户中的任何用户或角色执行的数据事件活动启用日志记录,即使该活动是对属于其他 Amazon 账户的存储桶执行的。

      如果您正在为单个区域创建跟踪(通过使用 Amazon CLI 完成),则选择 Select all S3 buckets in your account(选择您账户中的所有 S3 存储桶)选项会为跟踪所在的区域中的所有存储桶和您后来在该区域中创建的任何存储桶启用数据事件日志记录。不会为您的 Amazon 账户的其他区域中的 Simple Storage Service(Amazon S3)存储桶记录数据事件。

    3. 如果保留默认值 All current and future S3 buckets(所有当前和未来 S3 存储桶),则选择记录 Read(读取)事件、Write(写入)事件,还是记录两者。

    4. 要选择单个存储桶,请清空 All current and future S3 buckets(所有当前和未来 S3 存储桶)的 Read(读取)和Write(写入)复选框。在 Individual bucket selection(单个存储桶选择)中,浏览要在其上记录数据事件的存储桶。要查找特定存储桶,键入所需存储桶的存储桶前缀。您可以在此窗口中选择多个存储桶。选择 Add bucket(添加存储桶)以记录更多存储桶的数据事件。选择记录 Read(读取)事件(如 GetObject)、Write(写入)事件(如 PutObject)或同时记录两种事件。

      此设置优先于为各个存储桶配置的个别设置。例如,如果指定记录所有 S3 存储桶的 Read 事件,然后选择为数据事件日志记录添加一个特定存储桶,则所添加存储桶的 Read 已经是选中状态。您无法清除此选择。只能配置 Write 选项。

      要从日志记录中删除存储桶,请选择 X

  4. 要添加需要记录数据事件的其他数据类型,请选择 Add data event type(添加数据事件类型)。

  5. 对于 Lambda 函数:

    1. 对于 Data event source(数据事件源),选择 Lambda

    2. Lambda function(Lambda 函数)中,选择 All regions(所有区域)记录所有 Lambda 函数,或选择 Input function as ARN(输入函数作为 ARN)以记录特定函数上的数据事件。

      要记录 Amazon 账户中的所有 Lambda 函数的数据事件,请选择 Log all current and future functions(记录所有当前和未来函数)。此设置优先于为各个函数配置的个别设置。将记录所有函数,即便这些函数未显示。

      注意

      如果为所有区域创建了一个跟踪,则此选择将为您的 Amazon 账户中当前包含的所有函数以及您在创建跟踪后可能在任何区域中创建的任何 Lambda 函数启用数据事件日志记录。如果您正在为单个区域创建跟踪(通过使用 Amazon CLI 完成),则此选择将为您的 Amazon 账户中的该区域中当前包含的所有函数以及您在创建跟踪后可能在该区域中创建的任何 Lambda 函数启用数据事件日志记录。它不会为在其他区域中创建的 Lambda 函数启用数据事件日志记录。

      所有函数的日志记录数据事件也将为由 Amazon 账户中的任何用户或角色执行的数据事件活动启用日志记录,即使该活动是对属于其他 Amazon 账户的函数执行的。

    3. 如果选择 Input function as ARN(输入函数作为 ARN),则输入 Lambda 函数的 ARN。

      注意

      如果您的账户中有 15000 个以上的 Lambda 函数,则在创建跟踪时,您无法在 CloudTrail 控制台中查看或选择所有函数。您仍可以选择该选项来记录所有函数,即使未显示这些函数也是如此。如果您要记录特定函数的数据事件,则可手动添加一个函数 (如果您知道其 ARN)。您也可以在控制台中完成跟踪的创建操作,然后使用 Amazon CLI 和 put-event-selectors 命令为特定 Lambda 函数配置数据事件日志记录。有关更多信息,请参阅使用 Amazon CLI 管理跟踪记录

  6. 要添加需要记录数据事件的其他数据类型,请选择 Add data event type(添加数据事件类型)。

  7. 对于 DynamoDB 表:

    1. 对于 Data event source(数据事件源),选择 DynamoDB

    2. DynamoDB table selection(DynamoDB 表选择)中,选择 Browse(浏览)以选择一个表,或粘贴到您有权访问的 DynamoDB 表的 ARN 中。DynamoDB 表 ARN 使用以下格式:

      arn:partition:dynamodb:region:account_ID:table/table_name

      要添加另一个表,请选择 Add row(添加行),然后浏览到某个表或粘贴到您有权访问的表的 ARN 中。

  8. 选择 Update trail(更新跟踪)。

在 Amazon Web Services Management Console 中,如果启用了高级事件选择器,则可以从记录选定资源(Simple Storage Service(Amazon S3)存储桶或接入点、Lambda 函数、Amazon Outposts 上的 S3 对象、用于 Managed Blockchain 节点的 Ethereum 或 S3 对象 Lambda 接入点)上的所有数据事件的预定义模板中进行选择。选择了日志选择器模板后,您可以自定义模板,以仅包含最希望查看的数据事件。有关使用高级事件选择器的更多信息和提示,请参阅本主题中的 使用高级事件选择器记录事件

  1. 在 CloudTrail 控制台的 Dashboard(控制面板)或 Trails(跟踪记录)页面上,选择跟踪记录名称以将其打开。

  2. 在跟踪的详细信息页面上的 Data events(数据事件)中,选择 Edit(编辑)。

  3. 如果您尚未记录数据事件,请选择 Data events(数据事件)复选框。

  4. 对于 Data event type(数据事件类型),选择要在其上记录数据事件的资源类型。

  5. 选择日志选择器模板。CloudTrail 包括用于记录资源类型的所有数据事件的预定义模板。要构建自定义日志选择器模板,请选择 Custom(自定义)。

    注意

    选择 S3 存储桶的预定义模板可为您的 Amazon 账户中现有的所有存储桶和您完成跟踪创建后创建的任何存储桶启用数据事件日志记录。它也将为由 Amazon 账户中的任何用户或角色执行的数据事件活动启用日志记录,即使该活动是对属于其他 Amazon 账户的存储桶执行的。

    如果跟踪仅应用于一个区域,则选择记录所有 S3 存储桶的预定义模板可为跟踪所在的区域中的所有存储桶和您后来在该区域中创建的任何存储桶启用数据事件日志记录。不会为您的 Amazon 账户的其他区域中的 Simple Storage Service(Amazon S3)存储桶记录数据事件。

    如果您正在为所有区域创建跟踪,则选择 Lambda 函数的预定义模板将为您的 Amazon 账户中当前包含的所有函数以及您在创建跟踪后可能在任何区域中创建的任何 Lambda 函数启用数据事件日志记录。如果您正在为单个区域创建跟踪(通过使用 Amazon CLI 完成),则此选择将为您的 Amazon 账户中的该区域中当前包含的所有函数以及您在创建跟踪后可能在该区域中创建的任何 Lambda 函数启用数据事件日志记录。它不会为在其他区域中创建的 Lambda 函数启用数据事件日志记录。

    所有函数的日志记录数据事件也将为由 Amazon 账户中的任何用户或角色执行的数据事件活动启用日志记录,即使该活动是对属于其他 Amazon 账户的函数执行的。

  6. 如果您要应用预定义的日志选择器模板,并且不想添加其他数据事件资源类型,请选择 Save changes(保存更改)。您无需执行此程序剩余部分的操作。要应用自定义日志选择器模板,请继续执行下一步。

  7. 要创建自定义日志选择器模板,请在 Log selector template(日志选择器模板)下拉列表中,选择Custom(自定义)。

  8. (可选)为自定义日志选择器模板输入名称。

  9. Advanced event selectors(高级事件选择器)中,构建一个表达式来收集有关以下项的事件:特定 S3 存储桶、Amazon Lambda 函数、DynamoDB 表、Simple Storage Service(Amazon S3)on Outposts、Ethereum 节点上的 Amazon Managed Blockchain JSON-RPC 调用、S3 Object Lambda 接入点、EBS 快照上的 Amazon EBS Direct API、S3 接入点、DynamoDB 流和 Amazon Glue 表。

    1. 从下面的字段中选择。对于接受数组(多个值)的字段,CloudTrail 会在值之间添加 OR。

      • readOnly - readOnly 可以设置为 Equals(等于)值 truefalse。只读数据事件是不会更改资源状态的事件,例如 Get*Describe* 事件。写入事件可添加、更改或删除资源、属性或构件,例如 Put*Delete*Write* 事件。要记录 readwrite 两种事件,请不要添加 readOnly 选择器。

      • eventName - eventName 可以使用任何运算符。您可以使用它来包含或排除记录到 CloudTrail 的任何数据事件,例如 PutBucketGetItemGetSnapshotBlock。您可以为此字段指定多个值,以逗号分隔。

      • resources.type - 在Amazon Web Services Management Console中,不会出现此字段,因为它已由您从 Data event type(数据事件类型)下拉列表中选择的数据事件类型填充。在 Amazon CLI 和开发工具包中,resources.type 只能使用 Equals(等于)运算符,其值可以是以下值之一:

        • AWS::S3::Object

        • AWS::Lambda::Function

        • AWS::DynamoDB::Table

        • AWS::S3Outposts::Object

        • AWS::ManagedBlockchain::Node

        • AWS::S3ObjectLambda::AccessPoint

        • AWS::EC2::Snapshot

        • AWS::S3::AccessPoint

        • AWS::DynamoDB::Stream

        • AWS::Glue::Table

      • resources.ARN - 您可以将任意运算符与 resources.ARN 共用,但是如果您使用 Equals(等于)或 NotEquals(不等于),则该值必须与您在模板中指定为 resources.type 值的类型的有效资源的 ARN 完全匹配。

        例如,当 resources.type 等于 AWS::S3::Object 时,ARN 必须采用以下格式之一。要记录特定 S3 存储桶中所有对象的所有数据事件,请使用 StartsWith 运算符,并且仅包含存储桶 ARN 作为匹配值。刻意使用尾部斜杠;切勿排除它。

        arn:partition:s3:::bucket_name/ arn:partition:s3:::bucket_name/object_or_file_name/

        resources.type 等于 AWS::Lambda::Function,并且运算符设置为 Equals(等于)或 NotEquals(不等于)时,ARN 必须采用以下格式:

        arn:partition:lambda:region:account_ID:function:function_name

        resources.type 等于 AWS::DynamoDB::Table,并且运算符设置为 Equals(等于)或 NotEquals(不等于)时,ARN 必须采用以下格式:

        arn:partition:dynamodb:region:account_ID:table/table_name

        resources.type 等于 AWS::S3Outposts::Object,并且运算符设置为 Equals(等于)或 NotEquals(不等于)时,ARN 必须采用以下格式:

        arn:partition:s3-outposts:region:account_ID:object_path

        resources.type 等于 AWS::ManagedBlockchain::Node,并且运算符设置为 Equals(等于)或 NotEquals(不等于)时,ARN 必须采用以下格式:

        arn:partition:managedblockchain:region:account_ID:nodes/node_ID

        resources.type 等于 AWS::S3ObjectLambda::AccessPoint,并且运算符设置为 Equals(等于)或 NotEquals(不等于)时,ARN 必须采用以下格式:

        arn:partition:s3-object-lambda:region:account_ID:accesspoint/access_point_name

        resources.type 等于 AWS::EC2::Snapshot,并且运算符设置为 Equals(等于)或 NotEquals(不等于)时,ARN 必须采用以下格式:

        arn:partition:ec2:region::snapshot/snapshot_ID

        resources.type 等于 AWS::S3::AccessPoint,并且运算符设置为 Equals(等于)或 NotEquals(不等于)时,ARN 必须采用以下格式之一。要记录 S3 接入点中的所有对象的事件,建议您仅使用接入点 ARN,而不要包含对象路径,并且使用 StartsWithNotStartsWith 运算符。

        arn:partition:s3:region:account_ID:accesspoint/access_point_name arn:partition:s3:region:account_ID:accesspoint/access_point_name/object/object_path

        resources.type 等于 AWS::DynamoDB::Stream,并且运算符设置为 Equals(等于)或 NotEquals(不等于)时,ARN 必须采用以下格式:

        arn:partition:dynamodb:region:account_ID:table/table_name/stream/date_time

        resources.type 等于 AWS::Glue::Table,并且运算符设置为 Equals(等于)或 NotEquals(不等于)时,ARN 必须采用以下格式:

        arn:partition:glue:region:account_ID:table/database_name/table_name

      有关数据事件资源的 ARN 格式的更多信息,请参阅 Amazon Identity and Access Management用户指南中的操作、资源和条件键

    2. 对于每个字段,请选择 + Conditions(+ 条件)以根据需要添加任意数量的条件,所有条件总共可有最多 500 个指定值。例如,要从记录到跟踪的数据事件中排除两个 S3 存储桶的数据事件,可以将字段设置为 resources.ARN,设置 NotStartsWith 运算符,然后粘贴在 S3 存储桶 ARN 中,或浏览到不想为其记录事件的 S3 存储桶。

      要添加第二个 S3 存储桶,请选择 + Conditions(+ 条件),然后重复上述说明,在 ARN 中粘贴或浏览到不同的存储桶。

      注意

      对于跟踪上的所有选择器,最多可以有 500 个值。这包括选择器的多个值的数组,例如 eventName。如果所有选择器均为单个值,则最多可以向选择器添加 500 个条件。

      如果您的账户中有 15000 个以上的 Lambda 函数,则在创建跟踪时,您无法在 CloudTrail 控制台中查看或选择所有函数。您仍可使用预定义选择器模板记录所有函数,即使这些函数未显示出来也是如此。如果您要记录特定函数的数据事件,则可手动添加一个函数 (如果您知道其 ARN)。您也可以在控制台中完成跟踪的创建操作,然后使用 Amazon CLI 和 put-event-selectors 命令为特定 Lambda 函数配置数据事件日志记录。有关更多信息,请参阅使用 Amazon CLI 管理跟踪记录

    3. 根据需要,选择 + Field(+ 字段)以添加其他字段。为了避免错误,请不要为字段设置冲突或重复的值。例如,不要在一个选择器中将 ARN 指定为等于某个值,然后在另一个选择器中指定 ARN 不等于相同的值。

    4. 选择 Next(下一步)以保存对自定义选择器模板的更改。不要选择其他日志选择器模板,或离开此页面,否则您的自定义选择器将会丢失。

  10. 要添加需要记录数据事件的其他数据类型,请选择 Add data event type(添加数据事件类型)。重复步骤 4 至此步骤,为数据事件类型配置高级事件选择器。

  11. 在您选择 Next(下一步)后,在 Step 2: Choose log events(步骤 2:选择日志事件)中,审核您选择的日志选择器模板选项。选择 Edit(编辑)返回并进行更改。

  12. 在您查看并验证您的选择后,如果这是现有的跟踪则选择 Update trail(更新跟踪),如果您正在创建新跟踪则选择 Create trail(创建跟踪)。

示例:记录 Simple Storage Service(Amazon S3)对象的数据事件

记录一个 S3 存储桶中的所有 S3 对象的数据事件

下面的示例演示在为一个名为 bucket-1 的 S3 存储桶中的所有数据事件配置日志记录时日志记录是如何工作的。在此示例中,CloudTrail 用户指定了一个空前缀,以及用于记录 Read(读取)和 Write(写入)数据事件的选项。

  1. 用户将对象上传到 bucket-1

  2. PutObject API 操作是 Simple Storage Service(Amazon S3)对象级别的 API。它在 CloudTrail 中记录为数据事件。由于 CloudTrail 用户指定带空前缀的 S3 存储桶,因此将记录该存储桶中的任何对象上发生的事件。跟踪将处理和记录事件。

  3. 另一个用户将对象上传到 bucket-2

  4. PutObject API 操作发生在您未指定跟踪的 S3 存储桶中的某个对象上。跟踪不会记录此事件。

记录特定 S3 对象的数据事件

下面的示例演示在您为特定 S3 对象配置事件日志记录跟踪时日志记录是如何工作的。在此示例中,CloudTrail 用户指定一个名为 bucket-3 的 S3 存储桶,前缀为 my-images,并选择只记录 Write(写入)数据事件的选项。

  1. 一个用户在存储桶中检测到一个以 my-images 前缀开头的对象,例如 arn:aws:s3:::bucket-3/my-images/example.jpg

  2. DeleteObject API 操作是 Simple Storage Service(Amazon S3)对象级别的 API。它在 CloudTrail 中记录为 Write(写入)数据事件。该事件发生在与您在跟踪中指定的 S3 存储桶和前缀匹配的对象上。跟踪将处理和记录事件。

  3. 另一个用户删除了 S3 存储桶中一个带不同前缀的对象,例如 arn:aws:s3:::bucket-3/my-videos/example.avi

  4. 该事件发生在与您在跟踪中指定的前缀不匹配的对象上。跟踪不会记录此事件。

  5. 一个用户对对象 arn:aws:s3:::bucket-3/my-images/example.jpg 调用 GetObject API 操作。

  6. 虽然事件发生在跟踪中指定的存储桶和前缀上,但 GetObject 是读取类型的 Simple Storage Service(Amazon S3)对象级 API。它在 CloudTrail 中记录为 Read(读取)数据事件,而跟踪未配置为记录 Read(读取)事件。跟踪不会记录此事件。

注意

如果您记录特定 Simple Storage Service(Amazon S3)存储桶的数据事件,建议您不要使用将记录其数据事件的 Simple Storage Service(Amazon S3)存储桶来接收您在数据事件部分中指定的日志文件。使用相同的 Simple Storage Service(Amazon S3)存储桶会导致您的跟踪在日志文件每次传输到 Simple Storage Service(Amazon S3)存储桶时都记录数据事件。日志文件是按时间间隔传输的聚合事件,因此,事件与日志文件的比率不是 1:1;事件将记录到下一个日志文件中。例如,当跟踪传送日志时,PutObject 事件会在 S3 存储桶上发生。如果还在数据事件部分中指定了 S3 存储桶,跟踪将处理 PutObject 事件并将其记录为数据事件。该操作是另一个 PutObject 事件,并且跟踪将重新处理和记录此事件。有关更多信息,请参阅CloudTrail 的工作原理

为避免记录您用于接收日志文件的 Simple Storage Service(Amazon S3)存储桶的数据事件(如果您将跟踪配置为记录 Amazon 账户中的所有 Simple Storage Service(Amazon S3)数据事件),请考虑将日志文件传输到属于其他 Amazon 账户的 Simple Storage Service(Amazon S3)存储桶。有关更多信息,请参阅从多个账户接收 CloudTrail 日志文件 为其他账户调用的数据事件修订存储桶拥有者账户 ID

记录其他 Amazon 账户中的 S3 对象的数据事件

在将跟踪配置为记录数据事件时,您还可以指定属于其他 Amazon 账户的 S3 对象。当事件发生在指定对象上时,CloudTrail 将评估事件是否与每个账户中的任何跟踪记录匹配。如果事件与某个跟踪设置匹配,则跟踪将处理并记录该账户的事件。通常,API 调用者和资源所有者都可以接收事件。

如果您拥有一个 S3 对象并且在跟踪中指定此对象,则您的跟踪将记录在您的账户中的对象上发生的事件。由于您拥有该对象,因此您的跟踪还将在其他账户调用该对象时记录事件。

如果您在跟踪中指定一个 S3 对象,并且其他账户拥有此对象,则您的跟踪仅记录在您的账户中的此对象上发生的事件。您的跟踪不会记录其他账户中发生的事件。

示例:记录两个 Amazon 账户的 Simple Storage Service(Amazon S3)对象的数据事件

以下示例说明两个 Amazon 账户如何配置 CloudTrail 以记录同一 S3 对象的事件。

  1. 在您的账户中,您希望您的跟踪记录名为 owner-bucket 的 S3 存储桶中所有对象的数据事件。通过指定带空对象前缀的 S3 存储桶来配置跟踪。

  2. Bob 拥有一个单独的账户,该账户已获得对 S3 存储桶的访问权限。Bob 还希望记录同一 S3 存储桶中所有对象的数据事件。对于其跟踪,他配置了跟踪并指定带空对象前缀的同一 S3 存储桶。

  3. Bob 使用 PutObject API 操作将对象上传到 S3 存储桶。

  4. 此事件在他的账户中发生,并且与他的跟踪设置匹配。Bob 的跟踪将处理和记录该事件。

  5. 由于您拥有 S3 存储桶并且事件与您的跟踪设置匹配,因此您的跟踪也将处理和记录同一事件。因为现在有两个事件副本(一个记录在 Bob 的跟踪中,一个记录在您的跟踪中),所以 CloudTrail 对数据事件的两个副本收取费用。

  6. 您将一个对象上传到 S3 存储桶。

  7. 此事件在您的账户中发生并且与您的跟踪设置匹配。您的跟踪将处理和记录此事件。

  8. 由于事件未在 Bob 的账户中发生,并且他不拥有 S3 存储桶,因此他的跟踪不会记录事件。CloudTrail 仅针对此数据事件的一个副本收费。

示例:记录所有存储桶的数据事件,包括两个 Amazon 账户使用的 S3 存储桶

以下示例显示对收集 Amazon 账户中的数据事件的跟踪记录启用了 Select all S3 buckets in your account(选择您账户中的所有 S3 存储桶)时的日志记录行为。

  1. 在您的账户中,您希望您的跟踪记录所有 S3 存储桶的数据事件。在 Data events(数据事件)中的 All current and future S3 buckets(所有当前和未来 S3 存储桶)下,您可以通过选择 Read(读取)事件、Write(写入)事件或同时选择两者,来配置跟踪。

  2. Bob 拥有一个单独的账户,该账户已被授予对您账户中 S3 存储桶的访问权限。他想记录他有权访问的存储桶的数据事件。他配置他的跟踪以获取所有 S3 存储桶的数据事件。

  3. Bob 使用 PutObject API 操作将对象上传到 S3 存储桶。

  4. 此事件在他的账户中发生,并且与他的跟踪设置匹配。Bob 的跟踪将处理和记录该事件。

  5. 由于您拥有 S3 存储桶并且事件与您跟踪的设置匹配,因此您的跟踪也将处理和记录此事件。因为现在有两个事件副本(一个记录在 Bob 的跟踪中,一个记录在您的跟踪中),所以 CloudTrail 针对数据事件的一个副本对每个账户收取费用。

  6. 您将一个对象上传到 S3 存储桶。

  7. 此事件在您的账户中发生并且与您的跟踪设置匹配。您的跟踪将处理和记录此事件。

  8. 由于事件未在 Bob 的账户中发生,并且他不拥有 S3 存储桶,因此他的跟踪不会记录事件。CloudTrail 仅针对您账户中此数据事件的一个副本收费。

  9. 第三个用户 Mary 可以访问 S3 存储桶,并在存储桶上运行 GetObject 操作。她有一个跟踪配置为记录其账户中所有 S3 存储桶上的数据事件。因为她是 API 调用者,所以 CloudTrail 在她的跟踪中记录数据事件。虽然 Bob 有权访问该存储桶,但他不是资源所有者,因此这次未在他的跟踪中记录任何事件。作为资源拥有者,您会在跟踪中收到一个关于 Mary 调用的 GetObject 操作的事件。CloudTrail 针对数据事件的每个副本向您的账户和 Mary 的账户收取费用:一个在 Mary 的跟踪中,一个在您的跟踪中。

只读和只写事件

在您将跟踪配置为记录数据事件和管理事件时,您可以指定是需要只读事件和/或只写事件还是两者都需要。

  • 读取

    Read(读取)事件包括将读取您的资源但不进行更改的 API 操作。例如,只读事件包括 Amazon EC2 DescribeSecurityGroupsDescribeSubnets API 操作。这些操作仅返回有关 Amazon EC2 资源的信息,但不更改您的配置。

  • 写入

    Write(写入)事件包括将修改(或可能修改)您的资源的 API 操作。例如,Amazon EC2 RunInstancesTerminateInstances API 操作将修改您的实例。

示例:为单独的跟踪记录记录读取事件和写入事件

以下示例说明如何将跟踪记录配置为将账户的日志活动拆分到单独的 S3 存储桶中:一个存储桶接收只读事件,另一个存储桶接收只写事件。

  1. 您创建一个跟踪并选择一个名为 read-only-bucket 的 S3 存储桶来接收日志文件。然后,您更新跟踪以指定您需要 Read(读取)管理事件和数据事件。

  2. 您创建另一个跟踪并选择一个名为 write-only-bucket 的 S3 存储桶来接收日志文件。然后,您更新跟踪以指定您需要 Write(写入)管理事件和数据事件。

  3. Amazon EC2 DescribeInstancesTerminateInstances API 操作将在您的账户中执行。

  4. DescribeInstances API 操作是只读事件,它匹配第一个跟踪的设置。跟踪将记录事件并将事件传送到 read-only-bucket

  5. TerminateInstances API 操作是只写事件,它匹配第二个跟踪的设置。跟踪将记录事件并将事件传送到 write-only-bucket

使用 Amazon Command Line Interface 记录数据事件

您可以使用 Amazon CLI 配置您的跟踪记录以记录管理事件和数据事件。要查看您的跟踪是否正在记录管理事件和数据事件,请运行 get-event-selectors 命令。

注意

请注意,如果您的账户正在记录管理事件的多个副本,将会产生费用。记录数据事件始终需要收取费用。有关更多信息,请参阅 Amazon CloudTrail 定价

aws cloudtrail get-event-selectors --trail-name TrailName

该命令将返回跟踪的默认设置。

使用基本事件选择器记录事件

下面是显示基本事件选择器的 get-event-selectors 命令结果示例。默认情况下,当您使用 Amazon CLI 创建跟踪时,跟踪会记录所有管理事件。默认情况下,跟踪记录不记录数据事件。

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

要将跟踪配置为记录管理事件和数据事件,请运行 put-event-selectors 命令。

以下示例说明如何使用基本事件选择器配置您的跟踪,以包含两个 S3 对象的所有管理事件和数据事件。您可以为一个跟踪指定 1 至 5 个事件选择器。您可以为一个跟踪指定 1 至 250 个数据资源。

注意

如果您选择使用基本事件选择器限制数据事件,则最多只能有 250 个 S3 数据资源。

aws cloudtrail put-event-selectors --trail-name TrailName --event-selectors '[{ "ReadWriteType": "All", "IncludeManagementEvents":true, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::mybucket/prefix", "arn:aws:s3:::mybucket2/prefix2"] }] }]'

该命令将返回为跟踪配置的事件选择器。

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [ { "Values": [ "arn:aws:s3:::mybucket/prefix", "arn:aws:s3:::mybucket2/prefix2", ], "Type": "AWS::S3::Object" } ], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

使用高级事件选择器记录事件

如果您已选择使用高级事件选择器,则 get-event-selectors 命令返回的结果类似于下方内容。默认情况下,不为跟踪配置高级事件选择器。

{ "AdvancedEventSelectors": [], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

以下示例说明如何使用高级事件选择器记录所有管理事件(readOnlywriteOnly),并包括相同的两个 S3 存储桶前缀中的 S3 对象的 PutObjectDeleteObject 事件。如此处所示,使用高级事件选择器,您不仅能按 ARN 选择 S3 前缀名称,还能按您要记录的特定事件的名称进行选择。对于每个跟踪,最多可将 500 个条件添加到高级事件选择器,包括所有选择器值。您可以为一个跟踪指定 1 至 250 个数据资源。

aws cloudtrail put-event-selectors --trail-name TrailName \ --advanced-event-selectors '[ { "Name": "Log readOnly and writeOnly management events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Management"] } ] }, { "Name": "Log PutObject and DeleteObject events for two S3 prefixes", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3::Object"] }, { "Field": "eventName", "Equals": ["PutObject","DeleteObject"] }, { "Field": "resources.ARN", "StartsWith": ["arn:aws:s3:::mybucket/prefix","arn:aws:s3:::mybucket2/prefix2"] } ] } ]'

结果显示为跟踪配置的高级事件选择器。

{ "AdvancedEventSelectors": [ { "Name": "Log readOnly and writeOnly management events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Management" ], "StartsWith": [], "EndsWith": [], "NotEquals": [], "NotStartsWith": [], "NotEndsWith": [] } ] }, { "Name": "Log PutObject and DeleteObject events for two S3 prefixes", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ], "StartsWith": [], "EndsWith": [], "NotEquals": [], "NotStartsWith": [], "NotEndsWith": [] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ], "StartsWith": [], "EndsWith": [], "NotEquals": [], "NotStartsWith": [], "NotEndsWith": [] }, { "Field": "resources.ARN", "Equals": [], "StartsWith": [ "arn:aws:s3:::mybucket/prefix","arn:aws:s3:::mybucket2/prefix2" ], "EndsWith": [], "Equals": [], "NotStartsWith": [], "NotEndsWith": [] } ] } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

使用高级事件选择器记录存储桶的所有 Simple Storage Service(Amazon S3)事件

以下示例说明如何配置您的跟踪以包含特定 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:partition:s3:::bucket_name/"] } ] } ]'

该命令将返回以下示例输出。

{ "AdvancedEventSelectors": [ { "Name": "S3EventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ] }, { "Field": "resources.ARN", "StartsWith": [ "arn:partition:s3:::bucket_name/" ] } ] } ], "TrailARN": "arn:aws:cloudtrail:region:account_ID:trail/TrailName" }

使用高级事件选择器记录 Simple Storage Service(Amazon S3)on Amazon Outposts 事件

以下示例说明如何配置您的跟踪以包含您的 Outpost 中的 Outposts 对象上的所有 Simple Storage Service(Amazon S3)的所有数据事件。在此版本中,S3 在 Outposts 事件上支持的 resources.type 字段的值为 AWS::S3Outposts::Object

aws cloudtrail put-event-selectors --trail-name TrailName --region region \ --advanced-event-selectors \ '[ { "Name": "OutpostsEventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::S3Outposts::Object"] } ] } ]'

该命令将返回以下示例输出。

{ "AdvancedEventSelectors": [ { "Name": "OutpostsEventSelector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3Outposts::Object" ] } ] } ], "TrailARN": "arn:aws:cloudtrail:region:account_ID:trail/TrailName" }

使用 Amazon 开发工具包记录事件

运行 GetEventSelectors 操作以查看您的跟踪是否正在记录某个跟踪的数据事件。您可以配置您的跟踪记录以通过运行 PutEventSelectors 操作来记录数据事件。有关详细信息,请参阅 Amazon CloudTrail API 参考

将事件发送到 Amazon CloudWatch Logs

CloudTrail 支持将数据事件发送到 CloudWatch Logs。在配置您的跟踪以将事件发送到 CloudWatch Logs 日志组时,CloudTrail 只发送您在跟踪中指定的事件。例如,如果您将跟踪配置为仅记录数据事件,则您的跟踪仅将数据事件传送至您的 CloudWatch Logs 日志组。有关更多信息,请参阅使用 Amazon CloudWatch Logs 监控 CloudTrail 日志文件