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

配置S3存储桶策略后GET Object返回Access Denied问题咨询

问题原因

AWS IAM策略中显式Deny规则的优先级高于所有Allow规则,你当前配置的Deny语句会拦截所有未携带符合要求Referer头的s3:GetObject请求,即使你单独给Elastic Beanstalk EC2角色配置了Allow权限也会被拦截。
原因是EC2实例通过AWS NodeJS SDK调用S3接口时,默认不会携带aws:Referer请求头,刚好命中Deny规则,所以只有下载操作报错,而不在Deny限制范围内的上传、列桶操作正常。

解决方法

修改桶策略中的Deny语句,增加条件排除Elastic Beanstalk EC2角色,修改后的Deny规则如下:

{
    "Sid": "Deny get requests originating not from www.*.domain.com and *.domain.com.",
    "Effect": "Deny",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::data/*",
    "Condition": {
        "StringNotLike": {
            "aws:Referer": [
                "https://www.*.domain.com/*",
                "https://*.domain.com/*"
            ]
        },
        "ArnNotEquals": {
            "aws:PrincipalArn": "arn:aws:iam::[redacted]:role/aws-elasticbeanstalk-ec2-role"
        }
    }
}

修改后规则逻辑变为:仅当请求发起者不是Elastic Beanstalk EC2角色、且Referer头不符合要求时,才会拒绝GetObject请求,既保留了域名访问限制,也允许你的EC2服务正常调用下载接口。

可选优化

你当前上传代码中设置了ACL: 'public-read',该配置已无实际作用,因为桶策略的Deny规则会拦截所有未授权的公开访问,你可以将其修改为ACL: 'private'进一步降低权限风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:03