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

AWS SES调用SendRawEmail遇AccessDenied:Boto3/django-ses权限排查

排查与解决步骤
  • 确认代码使用的凭证匹配目标IAM用户
    检查Boto3/django-ses加载的AWS凭证是否为你配置了权限的IAM用户(BAR)的AK/SK:

    • 若用django-ses,核对settings.py中的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY是否正确;
    • 若直接用Boto3,确认是否通过环境变量、~/.aws/credentials或代码显式传入了正确凭证,避免误用其他默认凭证(比如EC2实例角色、其他用户的凭证)。
  • 验证区域配置与控制台一致
    你在控制台用的是eu-central-1区域,必须确保代码中的区域配置完全匹配:

    • django-ses需在settings.py中设置:
      AWS_SES_REGION_NAME = 'eu-central-1'
      AWS_SES_REGION_ENDPOINT = 'email.eu-central-1.amazonaws.com'
      
    • Boto3客户端需显式指定区域:
      import boto3
      client = boto3.client('ses', region_name='eu-central-1')
      
  • 检查IAM用户的权限边界
    登录AWS控制台进入IAM用户(BAR)详情页,查看是否设置了权限边界。如果权限边界限制了ses:SendEmail或ses:SendRawEmail操作,即使附加了允许策略,也会被权限边界拦截,需调整权限边界或移除相关限制。

  • 核对SES身份授权策略的正确性
    确认授权策略中的ARN无错误:

    • 检查Principal中的IAM用户ARN(arn:aws:iam::FOO:user/BAR)里的账号ID(FOO)是否准确;
    • 确认Resource中的SES身份ARN(arn:aws:ses:eu-central-1:FOO:identity/no-reply@example.com)与实际已验证邮箱的ARN完全一致,包括区域、账号ID和邮箱地址。
  • 排查django-ses的发件地址配置
    若使用django-ses,确保settings.py中AWS_SES_FROM_EMAIL设置为已验证的no-reply@example.com——即使脱离沙箱,发件地址仍需是SES已验证的身份,否则可能触发权限类错误。

内容的提问来源于stack exchange,提问作者tpotjj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:47:38