如何查看AWS SES所有发送邮件的历史、内容并溯源发送者?
AWS SES恶意发件排查与日志留存方案
一、快速排查历史发件记录与溯源
1. 多区域批量获取发送历史
用AWS CLI批量遍历所有SES可用区域,拉取最近7天的发送统计与明细:
for region in $(aws ec2 describe-regions --query "Regions[].RegionName" --output text); do echo "=== 区域: $region ===" aws ses get-send-statistics --region $region aws ses list-sent-emails --start-time $(date -d "-7 days" +%Y-%m-%dT%H:%M:%SZ) --region $region done
该命令会输出每个区域的发送统计(含退信、垃圾邮件标记数)和具体邮件列表,可快速定位异常区域。
2. 溯源发送者身份
- 从
list-sent-emails结果里提取Source字段(发件邮箱),检查是否为未授权的域名/邮箱; - 结合AWS CloudTrail日志,筛选
ses:SendEmail或ses:SendRawEmail动作,查看调用者的IAM角色/用户ARN:
aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=SendEmail --start-time $(date -d "-7 days" +%Y-%m-%dT%H:%M:%SZ)
如果是临时凭证调用,查看userIdentity.sessionContext.sessionIssuer字段找到对应的角色,进一步排查角色的权限边界和信任关系。
3. 获取邮件内容
如果之前配置了SES接收规则集将发送的邮件归档到S3,直接到对应S3桶按时间范围检索;若未开启,可临时创建配置集并绑定S3存储,后续发送的邮件会自动归档。
二、长期留存所有SES邮件与操作日志
1. 全局配置邮件归档
创建跨区域生效的SES配置集,开启S3存储或CloudWatch日志:
- 新建配置集,添加"S3存储"目的地,选择加密的S3桶,设置前缀按
region/{YYYY}/{MM}/{DD}/分类; - 给所有已验证的发件域名/邮箱绑定该配置集,确保所有发送的邮件都被归档。
2. 锁定发件权限
- 用IAM策略限制
ses:SendEmail/ses:SendRawEmail动作仅允许指定角色/用户调用:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": ["ses:SendEmail", "ses:SendRawEmail"], "Resource": "*", "Condition": { "StringNotEquals": { "aws:PrincipalARN": ["arn:aws:iam::123456789012:user/authorized-ses-user"] } } } ] }
- 关闭SES的"开放发件"功能,仅允许已验证的域名/邮箱发送邮件。
三、简化排查技巧
- 优先查CloudTrail异常调用:直接搜索最近7天的SES发送动作,快速定位陌生IAM实体的调用记录;
- 清理未授权验证项:删除SES中所有未授权的发件域名/邮箱,切断滥用入口;
- 设置发送量告警:在CloudWatch创建告警,当发送量超过阈值(如100封/小时)时立即通知;
- 排查EC2实例安全:若SES调用来自EC2实例,检查实例是否存在可疑进程、未授权SSH登录等入侵痕迹。
内容的提问来源于stack exchange,提问作者MissingSemicolon
相关产品推荐
相关产品推荐

