如何在S3存储桶对象创建/删除时发送告警并识别操作的IAM用户
S3对象操作告警及操作身份查询解决方案
1. S3对象创建/删除通知告警配置
完全支持对象增删操作的实时告警,可通过S3原生事件通知功能实现:
- 支持三种告警推送目标,可按需选择:
- 绑定SNS主题:可对接邮件、短信、内部IM机器人等接收渠道
- 绑定SQS队列:适用于需要异步消费事件、做后续二次处理的场景
- 绑定Lambda函数:支持自定义告警逻辑,比如仅当操作的是
*.tfstate后缀的核心文件时才触发告警,过滤无效通知
- 配置核心注意事项:
- 提前配置S3服务到对应推送目标(SNS/SQS/Lambda)的访问权限,避免事件推送失败
- 事件类型仅勾选
s3:ObjectCreated:*(覆盖所有上传、覆盖、复制等创建类操作)和s3:ObjectRemoved:*(覆盖所有删除、版本清空等删除类操作) - 可添加前缀/后缀过滤规则,比如仅监听存储桶下
terraform/路径下的对象,进一步减少不必要的告警
2. 操作IAM身份查询方法
可以完整查询到触发操作的IAM身份信息,依赖CloudTrail服务实现:
- 前置要求:提前开启对应区域的CloudTrail追踪,且开启S3对象级数据事件采集。默认CloudTrail仅记录桶级操作,不会记录单个对象的增删操作,需要手动开启对象级事件的记录规则
- 具体查询方式:
- 进入CloudTrail控制台的事件历史页面,筛选资源类型为
AWS::S3::Object,资源ARN填写被操作对象的完整S3 ARN,事件名称筛选PutObject、DeleteObject等对应操作类型,即可查看操作对应的IAM用户ARN、访问密钥ID、操作时间、源IP等全量信息 - 如果已配置CloudTrail日志投递到CloudWatch Logs,也可以通过CloudWatch Logs Insights编写查询语句,批量检索历史所有操作记录
- 进入CloudTrail控制台的事件历史页面,筛选资源类型为
注意:如果未提前开启CloudTrail的S3对象级事件记录,历史操作的身份信息无法回溯,建议先完成CloudTrail配置再上线告警规则
3. Terraform state文件防护额外建议
针对terraform state这类核心文件,可额外添加两层防护降低风险:
- 开启S3存储桶版本控制,就算文件被误删或覆盖,也可以直接恢复历史版本,避免核心配置丢失
- 配置IAM最小权限,仅给需要更新state的服务或成员开放对象写权限,普通成员仅分配读权限
内容的提问来源于stack exchange,提问作者Akshay Awate
相关产品推荐
相关产品推荐

