CloudTrail 看到一切 - API 调用记录机制与取证调查实践
详细介绍 CloudTrail 记录 AWS API 调用的机制、管理事件与数据事件的区别、CloudTrail Lake 的 SQL 分析以及安全事件发生时的取证调查方法。
CloudTrail 记录了什么
CloudTrail 是记录 AWS 账户内执行的几乎所有 API 调用的服务。EC2 实例启动、S3 存储桶创建、IAM 策略变更、Lambda 函数部署等,来自 AWS 管理控制台、CLI、SDK 和其他 AWS 服务的 API 调用都会被记录。每个事件包含谁(userIdentity)、何时(eventTime)、做了什么(eventName)、对什么资源(resources)、从哪里(sourceIPAddress)等信息,为安全调查提供完整的审计线索。
CloudTrail 的事件传递机制
CloudTrail 的事件通常在 API 调用执行后 5-15 分钟内传递。需要注意这不是实时的。事件的传递目标有 3 个。第一是 CloudTrail 控制台(事件历史),可免费查看过去 90 天的管理事件,支持过滤和搜索。第二是 S3 存储桶,创建跟踪(Trail)后事件以 JSON 格式保存,可无限期保留。第三是 CloudTrail Lake,提供 SQL 查询接口,无需 Athena 即可直接分析事件数据。
取证调查实践 - 追踪未授权访问
安全事件发生时,CloudTrail 是最重要的证据来源。例如,收到「发现未知 EC2 实例正在运行」的告警时的调查步骤如下。首先在 CloudTrail 中搜索 RunInstances 事件,确定谁在何时启动了实例。从 userIdentity 字段获取 IAM 用户名、角色名和访问密钥 ID。然后追踪该主体的其他活动,确认是否存在横向移动或数据外泄。CloudTrail Lake 的 SQL 查询可以高效地关联分析多个事件。
CloudTrail 不记录的内容
CloudTrail 虽然强大,但并非记录一切。了解不记录的内容对安全设计很重要。第一,OS 级别的操作。通过 SSH 登录 EC2 实例操作文件不会记录在 CloudTrail 中。OS 级别的审计需要 CloudWatch Agent 或 AWS Systems Manager Session Manager。第二,数据平面的详细内容。S3 的 GetObject 事件记录了谁访问了哪个对象,但不记录对象的内容。第三,某些 AWS 服务的内部操作不会生成 CloudTrail 事件。
CloudTrail 的成本优化
CloudTrail 管理事件的第一个跟踪免费。第二个及以后的跟踪每 10 万个事件收费 2.00 USD。数据事件每 10 万个事件收费 0.10 USD。在大规模环境中,S3 的数据事件可能产生大量数据,月费达数千美元。成本优化方法包括:缩小数据事件的目标范围(仅对高敏感性存储桶和重要 Lambda 函数启用)、使用 S3 生命周期策略将旧日志转移到 Glacier、以及利用 CloudTrail Lake 替代 Athena 查询以简化架构。