AWS SES IAM收件人限制策略失效,求技术排查
问题分析与解决方案
核心问题原因
- 你测试时SMTP命令里的
RCPT TO写的是internal@mydomain.com,但邮件头To填的是luke@otherdomain.com。AWS SES的ses:Recipients条件校验的是SMTP协议层的RCPT TO参数值,不是邮件内容里的To头,所以你的策略实际上匹配了合法收件人,邮件自然发送成功。 - 原策略拆分了两个Allow语句,资源分别指定身份和配置集,这会导致只要匹配其中一个资源条件就允许操作,逻辑冗余且容易出错。
修正后的IAM策略
把身份和配置集的限制合并到一个Statement里,同时确保所有条件都生效:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": [ "arn:aws:ses:eu-west-1:999999999:identity/internal@mydomain.com", "arn:aws:ses:eu-west-1:999999999:configuration-set/internalonly" ], "Condition": { "StringEquals": { "ses:FromAddress": "internal@mydomain.com", "ses:ConfigurationSetName": "internalonly" }, "ForAllValues:StringLike": { "ses:Recipients": "*@mydomain.com" } } } ] }
策略说明
- 用
StringEquals替代StringLike检查发件地址和配置集,更严格精准。 - 把身份和配置集ARN合并到同一个Resource数组,确保操作同时满足这两个资源的权限要求。
ForAllValues:StringLike确保所有RCPT TO的收件人都属于mydomain.com域名,只要有一个不符合就会被拒绝。
正确的测试方法
修改你的ses-internal.txt测试文件,把RCPT TO改成luke@otherdomain.com(模拟非法收件人),此时再执行SMTP测试,应该会收到权限拒绝的错误:
EHLO mydomain.com AUTH LOGIN Base64EncodedSMTPUserName Base64EncodedSMTPPassword MAIL FROM: internal@mydomain.com RCPT TO: luke@otherdomain.com DATA X-SES-CONFIGURATION-SET: internalonly From: PM Access <internal@mydomain.com> To: luke@otherdomain.com Subject: Amazon SES SMTP Test to luke This message was sent using the Amazon SES SMTP interface. . QUIT
执行测试后,应该会返回类似权限拒绝的提示,说明策略生效。
额外注意事项
- 确保IAM用户/角色没有其他允许
ses:SendRawEmail的策略,否则会覆盖当前的限制策略。 - 如果使用SMTP方式发送,SES会把IAM权限转化为SMTP凭证的权限,所以必须确保IAM策略的条件完全覆盖你的限制需求。
内容的提问来源于stack exchange,提问作者Luke West
相关产品推荐
相关产品推荐

