咨询AWS中IAM用户连续3次登录失败告警邮件的最佳实现方案
实现IAM用户连续3次登录失败告警的简便方案
方案一:CloudWatch 指标告警(适合短时间累计失败场景)
如果你的需求是短时间窗口内累计3次登录失败即可告警(无需严格区分是否有成功登录穿插),可以直接用CloudWatch原生能力实现,无需额外代码:
- 确保CloudTrail已开启,且将日志投递到CloudWatch Logs
- 创建CloudWatch Logs Metric Filter,匹配
ConsoleLogin事件中包含认证失败的日志(过滤规则:{$.eventName = "ConsoleLogin" && $.errorMessage != ""}),并按userIdentity.userName维度生成自定义指标(比如命名为ConsoleLoginFailureCount) - 基于该指标创建CloudWatch告警:设置统计周期为5分钟,阈值为3,当指标值达到3时触发SNS主题发送告警邮件
- 创建SNS主题并订阅目标邮箱,完成邮箱验证即可
方案二:Lambda + DynamoDB + SNS(精准追踪连续失败)
如果需要严格判断连续3次登录失败(中间有成功登录则重置计数),这个方案操作并不复杂,且精准度更高:
- 创建DynamoDB表:主键设为
username(字符串类型),添加failureCount(数字)、lastFailureTime(数字,存储时间戳)两个属性,开启TTL功能(设置15分钟自动过期,自动清理长时间无失败的用户记录) - 配置CloudWatch Event规则:创建规则匹配CloudTrail的
ConsoleLogin失败事件,触发Lambda函数 - 编写Lambda逻辑:
- 从触发事件中提取IAM用户名
- 查询DynamoDB中该用户的记录:
- 若存在记录,检查当前时间与
lastFailureTime的间隔(比如设为10分钟,可按需调整),如果在间隔内则failureCount +=1,否则重置为1并更新lastFailureTime - 若不存在记录,创建新条目,
failureCount=1,lastFailureTime设为当前时间戳
- 若存在记录,检查当前时间与
- 当
failureCount等于3时,调用SNS主题发送告警邮件,同时可选择重置该用户的失败计数或保留记录
- 配置SNS主题:创建主题并订阅告警邮箱,完成验证
注意事项
- CloudTrail事件可能有几分钟延迟,需合理设置时间窗口
- Lambda的执行角色需要具备DynamoDB读写权限、SNS发布权限,以及读取CloudTrail事件的权限
- DynamoDB的TTL功能可自动清理过期记录,无需手动维护
内容的提问来源于stack exchange,提问作者Missak Boyajian
相关产品推荐
相关产品推荐

