AWS CloudTrail
用户指南 (版本 1.0)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

记录跟踪的数据和管理事件

当您的账户中发生一个事件时,CloudTrail 会评估该事件是否与您的跟踪设置匹配。只有与您的跟踪设置匹配的事件才会传送到 Amazon S3 存储桶和 Amazon CloudWatch Logs 日志组。

您可以配置您的跟踪以记录以下内容:

  • 数据事件:这些事件提供对资源执行的或在资源内执行的资源操作的见解。这些也称为数据层面操作。

  • 管理事件:管理事件提供对在您 AWS 账户内的资源上执行的管理操作的见解。这些也称为控制层面操作。管理事件还包括在您的账户中发生的非 API 事件。例如,当用户登录您的账户时,CloudTrail 将记录 ConsoleLogin 事件。有关更多信息,请参阅CloudTrail 捕获的非 API 事件

    注意

    并非所有 AWS 服务都支持 CloudTrail 管理事件或数据事件。有关支持的服务的更多信息,请参阅 CloudTrail 支持的服务和集成。有关为特定服务记录的 API 的特定详细信息,请参阅CloudTrail 支持的服务和集成中的服务文档。

您可以对多个跟踪进行不同的配置,以便这些跟踪仅处理和记录您指定的事件。例如,一个跟踪可记录只读数据事件和管理事件,以使所有只读事件传送到一个 S3 存储桶。另一个跟踪可仅记录只写数据事件和管理事件,以使所有只写事件传送到一个单独的 S3 存储桶。

您也可以配置您的跟踪以拥有一个跟踪日志并将所有管理事件传送到一个 S3 存储桶,并配置另一个跟踪以记录所有数据事件并将其传送到另一个 S3 存储桶。

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

注意

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

数据事件

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

示例数据事件包括:

  • Amazon S3 对象级别 API 活动(例如,GetObjectDeleteObjectPutObject API 操作)

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

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

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

使用 AWS 管理控制台记录数据事件

  1. 导航到 CloudTrail 控制台的 Trails (跟踪) 页面并选择 创建跟踪

    注意

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

  2. 对于 Data events,选择铅笔图标以启用编辑。

  3. 对于 Amazon S3 数据事件,在 S3 选项卡上:

    1. 要为您 AWS 账户中的所有 Amazon S3 存储桶配置数据事件日志记录,请选择 Select all S3 buckets in your account (选择您的账户中的所有 S3 存储桶)。然后选择您要记录 Read (读取) 事件(如 GetObject)、Write (写入) 事件(如 PutObject)还是记录这两个类型的事件。此设置优先于为各个存储桶配置的任何设置。例如,如果指定记录所有 S3 存储桶的 Read 事件,然后选择为数据事件日志记录添加一个特定存储桶,则该存储桶的 Read 已经是选中状态。您无法清除此选择。只能配置 Write 选项。

      注意

      如果选择或清除了所有存储桶的某个选项,该更改将应用于已分别配置了数据事件日志记录的所有存储桶。请考虑在更改所有存储桶的数据事件设置后检查各存储桶的数据事件设置。

      如果您为 AWS 账户中的所有存储桶配置数据事件日志记录,并且您不需要数据事件日志记录的审核跟踪,请考虑将您的日志文件传输到属于另一个 AWS 账户的 Amazon S3 存储桶。有关更多信息,请参阅 从多个账户中接收 CloudTrail 日志文件示例:记录 Amazon S3 对象的数据事件

    2. 要配置单个 Amazon S3 存储桶的数据事件日志记录,请选择 Add S3 bucket (添加存储桶)。键入存储桶名称和前缀 (可选)。对于每个跟踪,您可以添加最多 250 个数据资源,例如 Amazon S3 存储桶和对象前缀。在一个跟踪中,单独的数据事件资源的总和不能超过 250。此总数包括其他数据资源,例如 Lambda 函数。如果配置所有 Amazon S3 存储桶的数据事件日志记录,则不会应用此限制。

    3. 对于每个资源,指定是要记录 ReadWrite 还是这两个类型的事件。

    4. 您可以编辑存储桶名称、前缀、Read/Write 选项,或通过选择 x 图标来删除资源。

      注意

      如果您已经为 AWS 账户中的所有 S3 存储桶配置了数据事件日志记录,则配置的设置优先于各个存储桶设置。在这种情况下,您不能编辑为所有存储桶设置的选项。

  4. 对于 Lambda 数据事件,在 Lambda 选项卡上:

    1. 要为单个 Lambda 函数配置数据事件日志记录,请从列表中选择它们。如果跟踪应用于所有 AWS 区域,则您可以选择 AWS 账户中所有区域中的函数。如果跟踪仅应用于一个区域,则您只能选择该区域中的函数。对于每个跟踪,您可以添加最多 250 个数据资源,例如各个 Lambda 函数。在一个跟踪中,单独的数据事件资源的总和不能超过 250。此总数包括其他数据资源,例如 Amazon S3 存储桶和对象前缀。如果配置所有 Lambda 函数的数据事件日志记录,则不会应用此限制。

      注意

      如果您的账户中有 15000 个以上的 Lambda 函数,则您无法在 CloudTrail 控制台中查看或选择所有函数。您仍可以选择该选项来记录所有 Lambda 函数。您也可以手动添加函数(如果您知道其 ARN),也可以使用 AWS CLI 和 put-event-selectors 命令为资源配置特定的数据事件日志记录。有关更多信息,请参阅使用 AWS CLI 管理跟踪

    2. 要为 AWS 账户中的所有 Lambda 函数以及您以后可创建的任何 Lambda 函数配置数据事件日志记录,请选择 Log all current and future functions (记录所有当前和未来函数)。如果跟踪应用于所有区域,则会记录 AWS 账户中所有区域中的所有函数,包括您可能在任何区域中创建的函数。如果跟踪应用于单个区域,则会记录当前区域中的所有函数以及您可能在该区域中创建的任何函数,但不会在其他区域中启用函数日志记录。所有函数的日志记录数据事件也将为由 AWS 账户中的任何用户或角色执行的数据事件活动启用日志记录,即使该活动是对属于其他 AWS 账户的函数执行的。

  5. 选择 Save

示例:记录 Amazon S3 对象的数据事件

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

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

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

  2. PutObject API 操作是 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 操作是 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 是读取类型的 Amazon S3 对象级 API。它在 CloudTrail 中记录为 Read (读取) 数据事件,而跟踪未配置为记录 Read (读取) 事件。跟踪不会记录此事件。

注意

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

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

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

在将跟踪配置为记录数据事件时,您还可以指定属于其他 AWS 账户的 S3 对象。当事件在指定对象上发生时,CloudTrail 将评估事件是否与每个账户中的任何跟踪匹配。如果事件与某个跟踪设置匹配,则跟踪将处理并记录该账户的事件。

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

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

示例:记录两个 AWS 账户的 S3 对象的数据事件

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

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

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

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

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

  5. 由于您拥有 S3 存储桶并且事件与您的跟踪设置匹配,因此您的跟踪也将处理和记录同一事件。

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

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

  8. 由于事件未在 Bob 的账户中发生,并且他不拥有 S3 存储桶,因此他的跟踪不会记录事件。

管理事件

管理事件提供对在您 AWS 账户内的资源上执行的管理操作的见解。这些也称为控制层面操作。示例管理事件包括:

  • 配置安全性(例如,IAM AttachRolePolicy API 操作)

  • 注册设备(例如,Amazon EC2 CreateDefaultVpc API 操作)

  • 配置传送数据的规则(例如,Amazon EC2 CreateSubnet API 操作)

  • 设置日志记录(例如,AWS CloudTrail CreateTrail API 操作)

管理事件还包括在您的账户中发生的非 API 事件。例如,当用户登录您的账户时,CloudTrail 将记录 ConsoleLogin 事件。有关更多信息,请参阅CloudTrail 捕获的非 API 事件。有关 CloudTrail 为 AWS 服务记录的受支持管理事件的列表,请参阅 CloudTrail 支持的服务和集成

默认情况下,跟踪将配置为记录管理事件。有关 CloudTrail 为 AWS 服务记录的受支持管理事件的列表,请参阅 CloudTrail 支持的服务和集成

注意

CloudTrail 事件历史记录功能只支持管理事件。Event history 功能并不支持所有管理事件。有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件

使用 AWS 管理控制台 记录管理事件

  1. 导航到 CloudTrail 控制台的 Trails (跟踪) 页面并选择跟踪。

  2. 对于 Management events,请单击铅笔图标。

  3. 对于 Read/Write events,选择您是否希望跟踪记录 AllRead-onlyWrite-onlyNone,然后选择 Save

只读和只写事件

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

  • Read-only

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

  • Write-only

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

  • 全部

    您的跟踪将记录它们。

  • 跟踪日志既不是只读也不是只写管理事件。

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

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

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

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

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

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

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

使用 AWS Command Line Interface 记录事件

您可以使用 AWS CLI 配置您的跟踪以记录管理事件和数据事件。

要查看您的跟踪是否正在记录管理事件和数据事件,请运行 get-event-selectors 命令。

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

以下示例返回跟踪的默认设置。默认情况下,跟踪将记录所有管理事件,但不记录数据事件。

{ "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" }

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

使用 GetEventSelectors 操作以查看您的跟踪是否正在记录某个跟踪的管理事件和数据事件。您可以配置您的跟踪以使用 PutEventSelectors 操作记录管理事件和数据事件。有关更多信息,请参见 AWS CloudTrail API Reference

将事件发送到 Amazon CloudWatch Logs

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