Amazon S3 CloudTrail 事件
在您创建 Amazon Web Services 账户 时,将在该账户上启用 CloudTrail。当 Amazon S3 中发生受支持的事件活动时,该活动将记录在 CloudTrail 事件中,并与其他 Amazon 服务事件一同保存在 Event history (事件历史记录) 中。您可以在 Amazon Web Services 账户中查看、搜索和下载最新事件。有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件。
要持续记录 Amazon Web Services 账户中的事件(包括 Amazon S3 的事件),请创建跟踪。通过跟踪,CloudTrail 可将日志文件传送至 Amazon S3 存储桶。默认情况下,在控制台中创建跟踪时,此跟踪应用于所有区域。此跟踪记录在 Amazon 分区中记录所有区域中的事件,并将日志文件传送至您指定的 Simple Storage Service(Amazon S3)存储桶。此外,您可以配置其他 Amazon 服务,进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息,请参阅下列内容:
每个事件或日志条目都包含有关生成请求的人员信息。身份信息可帮助您确定以下内容:
-
请求是使用根用户凭证还是 IAM 用户凭证发出的
-
请求是使用角色还是联合身份用户的临时安全凭证发出的
-
请求是否由其他 Amazon Web Service 发出。
有关更多信息,请参阅 CloudTrail userIdentity 元素。
日志文件可以在存储桶中存储任意长时间,不过您也可以定义 Amazon S3 生命周期规则以自动归档或删除日志文件。默认情况下,将使用 Amazon S3 服务器端加密 (SSE) 对日志文件进行加密。
CloudTrail 如何捕获向 Amazon S3 发出的请求
默认情况下,CloudTrail 会记录在过去 90 天内进行的 S3 存储桶级别 API 调用,但不会记录向对象发出的请求。存储桶级别调用包含 CreateBucket
、DeleteBucket
、PutBucketLifeCycle
、PutBucketPolicy
等事件。您可以在 CloudTrail 控制台上看到存储桶级事件。但是,您无法在此查看数据事件(Amazon S3 对象级调用),您必须解析或查询它们的 CloudTrail 日志。
CloudTrail 日志记录跟踪的 Amazon S3 账户级操作
CloudTrail 会记录帐户级操作。Amazon S3 记录与其他 Amazon 服务记录一起写入日志文件。CloudTrail 基于时间段和文件大小来确定何时创建并写入新文件。
本节中的表格列出了可用于 CloudTrail 日志记录的 Amazon S3 账户级操作。
CloudTrail 日志记录跟踪的 Amazon S3 账户级 API 操作显示为以下事件名称:
CloudTrail 日志记录跟踪的 Amazon S3 存储桶级操作
默认情况下,CloudTrail 将记录存储桶级操作。Amazon S3 记录与其他 Amazon 服务记录一起写入日志文件。CloudTrail 基于时间段和文件大小来确定何时创建并写入新文件。
本节中的表格列出了可用于 CloudTrail 日志记录的 Amazon S3 存储桶级操作。
CloudTrail 日志记录跟踪的 Amazon S3 存储桶级 API 操作显示为以下事件名称:
除了这些 API 操作之外,也可以使用 OPTIONS 对象对象级操作。由于此操作将检查存储桶的 CORS 配置,因此它被视为 CloudTrail 日志记录中的存储桶级操作。
Amazon CloudTrail 日志记录跟踪的 Amazon S3 对象级操作
您还可以获取对象级 Amazon S3 操作的 CloudTrail 日志。为此,请为 S3 存储桶或账户中的所有存储桶启用数据事件。当对象级操作在您的账户中发生时,CloudTrail 将评估您的跟踪设置。如果事件与您在跟踪中指定的对象相匹配,则记录该事件。有关更多信息,请参阅 Amazon CloudTrail 用户指南中的 为 S3 存储桶和对象启用 CloudTrail 事件日志记录 和记录数据事件以便跟踪。
记录为 CloudTrail 事件的对象级 API 操作:
除了这些操作之外,在特定情况下,您还可以使用以下存储桶级操作获取 CloudTrail 日志作为对象级 Amazon S3 操作:
-
GET Bucket Object (List Objects) Version 2 – 选择在跟踪中指定的前缀。
-
GET Bucket Object Versions (List Object Versions) – 选择在跟踪中指定的前缀。
-
HEAD Bucket – 指定存储桶和空前缀。
-
Delete Multiple Objects – 指定存储桶和空前缀。
注意 CloudTrail 不会记录使用 Delete Multiple Objects 操作删除的键的键名称。
跨账户情形中的对象级操作
下面是涉及跨账户情形中的对象级 API 调用的特殊使用案例以及报告 CloudTrail 日志的方法。CloudTrail 始终会将日志提供给请求者(进行 API 调用的人)。在设置跨账户访问时,请考虑本部分中的示例。
这些示例假定 CloudTrail 日志已适当配置。
示例 1:CloudTrail 将访问日志提供给存储桶拥有者
仅当存储桶拥有者具有对同一对象 API 的权限时,CloudTrail 才会将访问日志提供给存储桶拥有者。请考虑以下跨账户情形:
-
账户 A 拥有该存储桶。
-
账户 B(请求者)尝试访问该存储桶中的对象。
-
账户 C 拥有该对象。可能与账户 A 相同。
CloudTrail 始终将对象级 API 访问日志提供给请求者(账户 B)。此外,仅当存储桶拥有者具有(账户 C)或拥有对该对象执行同一 API 操作的权限时,CloudTrail 才会将相同的日志提供给存储桶拥有者(账户 A)。否则,存储桶拥有者必须获得权限,通过对象的 ACL 获取对象级别 API 访问日志。
示例 2:CloudTrail 没有使设置对象 ACL 时使用的电子邮件地址激增
请考虑以下跨账户情形:
-
账户 A 拥有该存储桶。
-
账户 B (请求者) 使用电子邮件地址发送了一个设置对象 ACL 授权的请求。有关 ACL 的更多信息,请参阅 访问控制列表 (ACL) 概述。
该请求方将获取日志以及电子邮件信息。但是,存储桶拥有者 (如果他们像在示例 1 中一样有资格接收日志) 将获取报告该事件的 CloudTrail 日志。但是,存储桶拥有者不会获取 ACL 配置信息,尤其是被授权者电子邮件和授权。日志为存储桶拥有者提供的唯一信息是账户 B 进行了 ACL API 调用。