AWS Amplify SES发送邮件AccessDenied问题求助
解决AWS Amplify自定义认证挑战中SES SendEmail的AccessDenied错误
看起来你已经做了大部分正确的配置,但还是遇到了权限卡点,我来帮你梳理几个容易遗漏的排查方向:
1. 确认Lambda执行角色确实绑定了正确的IAM策略
错误信息里显示的角色是myamplifyappCreateAuthChallenge-sampledev,你需要确保这个具体角色已经附加了你的SES权限策略:
- 打开IAM控制台,找到该角色,进入「权限」标签页
- 检查是否存在你创建的包含
ses:SendEmail和ses:SendRawEmail的策略 - 注意:Amplify在更新后端时偶尔会重置角色权限,你可以尝试重新应用策略,或手动确认策略的
Resource确实是*(你的配置是正确的,但要避免拼写错误)
2. 排查组织级别的服务控制策略(SCP)
如果你的AWS账号属于AWS Organization,可能存在**服务控制策略(SCP)**限制了SES的发送操作。SCP优先级高于IAM权限,即使角色有允许策略,SCP的拒绝规则也会导致AccessDenied:
- 登录AWS Organizations控制台,查看组织或OU的SCP配置
- 确认是否存在限制
ses:SendEmail的拒绝语句,或是否缺少允许该操作的规则
3. 用IAM权限模拟工具验证角色权限
直接用IAM的模拟功能测试该角色是否能执行ses:SendEmail:
- 打开IAM控制台,进入「策略」→「模拟策略」
- 选择角色
myamplifyappCreateAuthChallenge-sampledev - 添加操作
ses:SendEmail,资源填写错误信息中的ARN:arn:aws:ses:us-west-2:mynumericalusernumber:identity/theaddressiamtryingtosendto@gmail.com - 运行模拟,若结果为拒绝,会给出具体原因(比如SCP限制、策略不匹配等)
4. 再次确认沙盒模式下的发送条件
虽然你已经验证了收件人和发件域名,再检查几个细节:
- 发件邮箱
noreply@my-own-verified-domain.com所属域名确实处于「Verified」状态,且无拼写错误 - 收件人邮箱
theaddressiamtryingtosendto@gmail.com确实在SES控制台的「已验证身份」列表中 - 确认Lambda和SES都在
us-west-2区域(你的代码已设置region,这一点应该没问题)
5. 检查Lambda的AWS SDK版本(次要排查点)
旧版本AWS SDK可能存在兼容性问题:
- 在Lambda日志中打印
AWS.VERSION确认SDK版本 - 若版本较旧,可尝试通过Lambda层添加最新版SDK,或更新Lambda运行时(比如Node.js 18.x)
另外,你可以在sendEmail函数的catch块中打印更详细的错误字段(如err.code、err.message),有时候会给出更具体的权限拒绝原因。
内容的提问来源于stack exchange,提问作者bits
相关产品推荐
相关产品推荐

