AWS CloudTrail 基础:什么是 CloudTrail,事件类型,区域与全局服务
如果你问我,在 AWS 安全里最容易被低估的服务是什么?我会毫不犹豫地说:CloudTrail。很多人把它当成“日志开关”,打开就完事了。但等你真正排查一次 Secret 泄露,才知道 CloudTrail 到底有多重要。
CloudTrail 到底是什么?
说白了,CloudTrail 就是 AWS 的 API 监控录像机。它记录每一个 API 调用:谁、什么时候、从哪、做了什么操作、结果如何。这些记录就叫“事件”(Event)。
我在项目中遇到过好几次:开发说没动过 IAM,结果密钥被轮换了。查 CloudTrail 才发现是某个自动化脚本误调用了 UpdateAccessKey。没有 CloudTrail,这种事根本说不清。
CloudTrail 默认是开启的(至少对管理事件),它会保留 90 天的查看历史。但你也可以创建“跟踪”(Trail)把日志存到 S3,永久保留。
事件类型:管理事件 vs 数据事件
CloudTrail 把事件分成两大类。这个分类很重要,因为价格和配置方式完全不同。
| 特性 | 管理事件 | 数据事件 |
|---|---|---|
| 范围 | 对 AWS 资源的“控制面”操作 | 对 AWS 资源的“数据面”操作 |
| 例子 | 创建 EC2、修改 IAM 策略、删除 S3 Bucket | GetObject、PutObject、Decrypt(KMS) |
| 默认是否记录 | 是(免费保留 90 天) | 否(需要额外开启) |
| 是否收费 | 记录到跟踪后按量计费 | 记录到跟踪后按事件量计费(通常比管理事件贵) |
| 作用范围 | 区域 + 全局服务 | 仅指定资源或指定类型 |
管理事件(Management Events)
管理事件记录的是“谁在控制 AWS 资源”。比如创建、修改、删除资源。这是 CloudTrail 默认就帮你记录的部分,不需要额外配置。我个人习惯把所有管理事件都记录到 S3,保留至少一年。成本很低,但关键时刻救命。
数据事件(Data Events)
数据事件记录的是“谁在使用资源里面的内容”。比如读取 S3 里的文件、调用 KMS 解密、调用 Lambda 函数。这些事件量级非常大,如果全开,费用会相当可观。
我记得有一次排查 Secrets Manager 的访问记录,发现某个角色在凌晨调用了很多次 GetSecretValue。没有开启数据事件跟踪,这些调用就完全不可见。所以,对于 Secrets Manager、KMS、S3 这些敏感服务,我强烈建议至少开启数据事件记录。
区域与全局服务:CloudTrail 的命名空间
AWS 的 API 调用是有“区域”概念的。你在东京区创建 EC2,事件就记录在东京。但有些服务是全局的,比如 IAM、CloudFront、Route53。它们的 API 调用到底算哪个区域?
CloudTrail 的规则是这样的:
- 区域服务: 事件记录在调用发生的区域。比如在美东 1(us-east-1)创建 S3 存储桶,事件就落在 us-east-1。
- 全局服务: 事件默认记录在“美东 1(us-east-1)”。或者你创建跟踪时也可以指定一个“全局服务事件区域”。
你想想看:如果你只开启了新加坡区域的跟踪,而没开美东 1,那 IAM 的变更就全部丢失了。很多安全事件恰恰是从 IAM 开始的。
全局服务事件清单(部分)
| 服务 | 事件记录区域 | 说明 |
|---|---|---|
| AWS IAM | us-east-1 | 用户、组、角色、策略的变更 |
| AWS STS | us-east-1 | 安全令牌服务操作 |
| AWS Organizations | us-east-1 | 组织、SCP 管理 |
| CloudFront | us-east-1 | 分配、证书管理 |
| Route53 | us-east-1 | 托管区、记录集变更 |
知识框架小结
把 CloudTrail 的核心概念串起来,就是下面这张图:
嗯,看完这张图你应该就清楚了。CloudTrail 的核心就三块:事件类型、区域/全局、跟踪存储。后面我们讲 Secrets Manager 的可视化,所有分析都建立在这个框架上。