CloudTrail 看到一切 - API 调用的记录机制与取证调查实践

本文介绍 CloudTrail 记录 AWS API 调用的机制、管理事件与数据事件的区别、使用 CloudTrail Lake 进行的 SQL 分析,以及发生安全事件时的取证调查方法。

CloudTrail 记录了什么

CloudTrail 是记录 AWS 账户内执行的几乎所有 API 调用的服务。EC2 实例的启动、S3 存储桶的创建、IAM 策略的变更、Lambda 函数的部署等,来自 AWS 管理控制台、CLI、SDK 以及其他 AWS 服务的 API 调用都会被记录。每个事件都会记录谁(userIdentity)、何时(eventTime)、从哪里(sourceIPAddress)、做了什么(eventName)、针对哪些资源(resources)以及结果如何(errorCode)。CloudTrail 的事件分为 2 种。管理事件(Management Events)是资源的创建 / 修改 / 删除等控制平面操作。管理事件默认会被记录,可以从控制台免费查看过去 90 天的记录。数据事件(Data Events)是 S3 对象的读写、Lambda 函数的调用、DynamoDB 的项目操作等数据平面操作。由于数据事件的数量庞大,默认不会被记录,需要显式启用。

CloudTrail 的事件传送机制

CloudTrail 的事件通常在 API 调用执行后的 5-15 分钟以内传送。需要注意这并不是实时的。事件的传送目标有 3 个。第一,CloudTrail 控制台(事件历史记录)。可以免费查看过去 90 天的管理事件,并且可以进行筛选和搜索。第二,S3 存储桶。创建跟踪(Trail)后,事件会以 JSON 格式传送到 S3 存储桶。保存在 S3 中的日志可以通过在 Athena 中执行 SQL 查询来分析。第三,CloudTrail Lake(自 2026 年 5 月 31 日起停止接受新客户)。2022 年推出的 CloudTrail Lake 是一项托管服务,它将事件保存在专用的数据存储中,并可以直接用 SQL 查询。与 S3 + Athena 的组合相比,设置的工作量较少。CloudTrail 的日志具备篡改检测功能。启用日志文件完整性验证(Log File Integrity Validation)后,各日志文件的哈希值会记录在摘要文件中,可以通过密码学方法验证日志未被篡改。

取证调查实践 - 追踪非法访问

发生安全事件时,CloudTrail 是主要的证据来源之一。例如,下面介绍收到“有未知的 EC2 实例被启动”这一告警时的调查步骤。首先,在 CloudTrail 中搜索 RunInstances 事件,确定是谁在何时启动了实例。从 userIdentity 字段可以得知 IAM 用户名、角色名和访问密钥 ID。接着,用该访问密钥 ID 搜索 CloudTrail,找出使用同一凭证执行的其他 API 调用。对 S3 存储桶的访问、IAM 策略的变更、安全组的变更等,攻击者行动的全貌会浮现出来。从 sourceIPAddress 字段还可以确定攻击者的 IP 地址。不过,如果攻击者经由 VPN 或 Tor,仅凭 IP 地址无法确定攻击者。userAgent 字段包含所用工具(AWS CLI、SDK、控制台等)的信息,会成为推测攻击手法的线索。

CloudTrail 不记录的内容

CloudTrail 功能强大,但并不是记录了一切。了解哪些内容不会被记录,在安全设计上很重要。第一,OS 级别的操作。即使通过 SSH 登录 EC2 实例并操作文件,CloudTrail 中也不会记录。OS 级别的审计需要 CloudWatch Agent 或 AWS Systems Manager Session Manager 的会话日志。第二,未启用数据事件时的 S3 对象操作。即使从 S3 存储桶下载了文件,如果数据事件处于禁用状态,也不会被记录。对于包含机密数据的存储桶,启用数据事件后也可以记录这类操作。第三,部分只读 API。DescribeInstances 这样的读取 API 会作为管理事件被记录,但由于调用量很大,在 CloudTrail 控制台中有时会省略显示。传送到 S3 的日志中是有记录的。第四,AWS 内部的服务间通信。当 AWS 服务在内部调用其他服务时,其中一部分不会记录到 CloudTrail 中。

CloudTrail 的成本优化

CloudTrail 的管理事件,第一个跟踪是免费的。第二个及之后的跟踪,每 10 万个事件收费 2.00 美元(截至 2026 年 10 月)。数据事件为每 10 万个事件 0.10 美元。在大规模环境中,S3 的数据事件会达到庞大的数量,数据事件的费用有时会很高。成本优化的方法有几种。第一,缩小数据事件的对象范围。不是记录所有 S3 存储桶的数据事件,而是只限定于包含机密数据的存储桶。第二,适当设置 CloudTrail Lake 的保留期。在 7 年保留定价下,7 年的保留包含在摄取费用中;在 1 年可延长保留定价下,超过最初 1 年的保留需要另外收费。在 1 年可延长保留定价下,根据合规要求将保留期控制在 1 年或 3 年,可以抑制保留的费用。第三,使用 S3 生命周期规则管理传送到 S3 的日志的保留期。设置 90 天后迁移到 Glacier、1 年后删除的规则,可以减少保留所需的费用。

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享