部署在Elastic Beanstalk的Django站点配置AWS SES时遇权限错误
问题根因
报错明确指向权限缺失:你的Elastic Beanstalk EC2实例所使用的IAM角色aws-elasticbeanstalk-ec2-role,没有调用SES的SendRawEmail接口的权限,无法对指定的SES身份资源执行发信操作。
解决步骤
- 进入AWS IAM控制台,在角色列表中找到
aws-elasticbeanstalk-ec2-role,点击进入角色详情页
- 进入AWS IAM控制台,在角色列表中找到
- 切换到「权限」标签页,点击「添加权限」→「创建内联策略」
- 切换到JSON编辑模式,粘贴以下策略内容,注意根据你的实际配置修改资源ARN:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "arn:aws:ses:us-west-2:873836696822:identity/newuser@testing.com" } ] }
如果你已经在SES中验证了整个
testing.com域名,可将Resource字段替换为域名对应的ARN:arn:aws:ses:us-west-2:873836696822:identity/testing.com,这样该域名下所有邮箱都可以用来发信
- 为策略命名后保存,等待1~2分钟权限生效即可测试发信
额外检查项
- 确认你的SES账号是否仍处于沙箱环境:如果是,所有收件人邮箱也需要提前在SES中完成验证,否则仍会触发发信失败
- 确认SES身份(邮箱/域名)的所属区域为
us-west-2,和报错中的资源区域一致,跨区域调用SES会出现资源不存在或权限不匹配问题 - 确认你在Django Anymail配置中填写的发件人邮箱,和SES中验证的身份完全匹配
内容的提问来源于stack exchange,提问作者RobMcC
相关产品推荐
相关产品推荐

