You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:

  1. 打开IAM控制台,进入「策略」→「模拟策略」
  2. 选择角色myamplifyappCreateAuthChallenge-sampledev
  3. 添加操作ses:SendEmail,资源填写错误信息中的ARN:arn:aws:ses:us-west-2:mynumericalusernumber:identity/theaddressiamtryingtosendto@gmail.com
  4. 运行模拟,若结果为拒绝,会给出具体原因(比如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:13:12