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

ElasticBeanstalk的Django应用使用AWS SES发邮件遇Access Denied问题

AWS ElasticBeanstalk上Django应用的SES权限拒绝问题

调用GetSendQuota操作时发生错误(AccessDenied):用户arn:aws:iam::123412341234:user/USER-IAM-NAME未被授权执行ses:GetSendQuota,存在基于身份的策略显式拒绝。

我的Django应用部署在AWS ElasticBeanstalk上,近期碰到了上面的错误。这个IAM用户已经挂载了AmazonSESFullAccess托管策略,为了确保GetSendQuota权限能生效,我还额外加了下面的内联策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail",
                "ses:GetSendQuota"
            ],
            "Resource": "*"
        }
    ]
}

编辑:问题从10月2日开始出现,之后就发不了邮件了,期间我没做任何系统变更。

编辑2:我查到AWS在10月2日给AWSCompromisedKeyQuarantineV2添加了SES拒绝策略,这正好是问题开始的时间。我不想删掉这个策略,请问怎么给这个特定用户加允许访问的策略?


解决方法

AWS的IAM权限规则里,显式拒绝会直接覆盖所有允许策略,所以单纯加允许策略绕不开AWSCompromisedKeyQuarantineV2的限制,你可以试试下面两种方案:

1. 给用户设置权限边界

权限边界的优先级高于附加的拒绝策略,你可以给目标用户设置一个明确允许所需SES操作的权限边界:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail",
                "ses:GetSendQuota"
            ],
            "Resource": "*"
        }
    ]
}

操作步骤:

  • 打开IAM控制台,找到用户USER-IAM-NAME
  • 切换到「权限边界」标签页
  • 点击「设置权限边界」,选择「创建自定义策略」,粘贴上面的JSON内容创建并关联到该用户

2. 修改拒绝策略的排除条件

如果AWSCompromisedKeyQuarantineV2是账户级的服务控制策略(SCP),你可以修改它的条件,把目标用户排除在外:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "ses:*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "aws:username": "USER-IAM-NAME"
                }
            }
        }
    ]
}

注意:只有账户管理员能修改SCP,修改前要确认策略的适用范围,别影响其他安全规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:19:52