# 第23天:CloudTrail——谁在什么时候做了什么 ## 今天你将学到什么 今天学习 CloudTrail——AWS 的"监控录像系统"。它记录你 AWS 账户中的每一个操作:谁在什么时间、从哪个 IP 地址、对什么资源做了什么操作、结果是成功还是失败。这是安全审计和故障排查的基础。 --- ## 为什么需要审计日志 ### 场景一:安全事件调查 周一早上你发现生产数据库被删除了。老板问:"谁干的?" 没有 CloudTrail:不知道。只能猜。 有 CloudTrail:打开日志一查——周日凌晨 3:17,用户 `dev-zhang` 从 IP `203.x.x.x` 调用了 `rds:DeleteDBInstance`。进一步调查发现他的账号被盗了。 ### 场景二:故障排查 你的应用突然无法访问 S3 桶了。什么时候开始的?谁改了权限? CloudTrail 告诉你:昨天下午 4:32,用户 `ops-li` 修改了桶策略,把 `Allow` 改成了 `Deny`。 ### 场景三:合规审计 审计师问:"过去 90 天内,谁访问过客户数据?有没有未授权的访问?" CloudTrail 可以提供完整的访问记录。 **类比**:CloudTrail 就像银行的监控录像 + 操作流水。每一笔交易、每一次进出都有记录。出了问题可以回放查看。 --- ## CloudTrail 记录什么 ### 每条记录包含的信息 | 字段 | 含义 | 举例 | |------|------|------| | 时间 | 操作发生的精确时间 | 2024-01-15T03:17:42Z | | 用户身份 | 谁做的操作 | 用户 dev-zhang / 角色 lambda-role | | 源 IP | 从哪里发起的 | 203.0.113.50 | | 操作 | 做了什么 | DeleteDBInstance | | 资源 | 对什么东西操作 | arn:aws:rds:...:production-db | | 结果 | 成功还是失败 | 成功 / AccessDenied | | 请求参数 | 具体的操作细节 | DBInstanceIdentifier: production-db | ### 三种事件类型 | 类型 | 记录什么 | 举例 | |------|----------|------| | 管理事件 | 对 AWS 资源的管理操作 | 创建/删除 EC2、修改安全组、更改 IAM 策略 | | 数据事件 | 对数据的读写操作 | S3 对象的上传/下载、Lambda 函数的调用 | | 洞察事件 | 异常活动模式 | API 调用量突然暴增、异常的错误率 | **默认情况**:管理事件自动记录(免费保留 90 天)。数据事件需要手动开启(因为量太大)。 --- ## 怎么使用 CloudTrail ### 方式一:快速查看(Event History) 打开 CloudTrail 控制台 → Event History,可以直接搜索最近 90 天的管理事件。 **常用搜索方式**: - 按用户名搜索:看某个人做了什么 - 按事件名搜索:看谁做了某个操作(比如搜 `DeleteBucket`) - 按资源名搜索:看某个资源被谁动过 ### 方式二:创建 Trail(长期保存) 如果你需要保留超过 90 天的日志,或者需要记录数据事件,就创建一个 Trail: ``` CloudTrail → 创建 Trail → 选择保存到 S3 桶 ``` 日志会以 JSON 文件的形式存储在你指定的 S3 桶里。你可以保留多久就保留多久。 ### 方式三:配合其他服务 - **CloudWatch Logs**:把 CloudTrail 日志发送到 CloudWatch,设置告警。比如"有人删除了安全组就立刻通知我"。 - **Athena**:用 SQL 查询 S3 里的 CloudTrail 日志。适合大规模分析。 - **EventBridge**:实时响应特定事件。比如"有人创建了 IAM 用户就自动触发审批流程"。 --- ## 实际应用场景 ### 场景一:检测异常登录 设置告警:如果有人从非公司 IP 地址登录 AWS 控制台,立刻发送通知。 CloudTrail 记录每次控制台登录的源 IP。配合 CloudWatch 告警,可以实时检测异常登录。 ### 场景二:追踪资源变更 "这个安全组的规则是谁改的?什么时候改的?改之前是什么样的?" 在 CloudTrail 中搜索 `AuthorizeSecurityGroupIngress` 或 `RevokeSecurityGroupIngress` 事件,可以看到完整的变更历史。 ### 场景三:满足合规要求 很多行业法规(如 PCI DSS、HIPAA、SOC 2)要求保留完整的操作审计日志。CloudTrail 天然满足这些要求。 --- ## CloudTrail 最佳实践 1. **所有区域都开启**:攻击者可能在你不常用的区域搞破坏。确保所有 AWS 区域都有 CloudTrail 记录。 2. **日志文件完整性验证**:开启日志文件验证,防止有人篡改日志(删除自己的犯罪记录)。 3. **日志桶加密**:存储日志的 S3 桶要加密,防止日志本身被泄露。 4. **限制日志桶访问**:只有安全团队能访问日志桶,普通开发者不能删除或修改日志。 5. **设置关键操作告警**:对高危操作(删除资源、修改 IAM、关闭 CloudTrail)设置实时告警。 --- ## AWS Config——资源配置的"时光机" 和 CloudTrail 经常一起提到的还有 AWS Config。它们的区别: | | CloudTrail | AWS Config | |--|-----------|------------| | 记录什么 | 谁做了什么操作(API 调用) | 资源的配置状态变化 | | 回答什么问题 | "谁在 3 点删了数据库?" | "这个安全组的规则上周是什么样的?" | | 类比 | 监控录像(记录动作) | 定期拍照(记录状态) | **Config 的独特价值**: - 记录资源配置的完整变更历史 - 可以设置合规规则(比如"所有 S3 桶必须开启加密") - 自动检测不合规的资源并通知你 --- ## 今天的小测验 1. CloudTrail 记录的一条事件包含哪些关键信息? 2. 管理事件和数据事件的区别是什么?为什么数据事件默认不开启? 3. 如果你想保留超过 90 天的审计日志,应该怎么做? 4. CloudTrail 和 AWS Config 各自解决什么问题? --- ## 延伸阅读 - [CloudTrail 用户指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/) - [AWS Config 开发者指南](https://docs.aws.amazon.com/config/latest/developerguide/) - [CloudTrail 支持的服务列表](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html) --- ## 明天预告 明天学习 VPC 安全进阶——网络 ACL、VPC Flow Logs、PrivateLink。深入理解如何在网络层面保护你的 AWS 资源。