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

使用NodeJs上传对象至S3存储桶报Access Denied错误如何解决

问题根因

Access Denied报错完全由存储桶策略配置错误导致,和你贴的Node.js SDK代码无关,核心问题有两个:

  • IAM权限评估逻辑中Deny规则优先级永远最高,你当前配置的第一条Deny规则对*(所有主体)生效,没有加任何排除条件,等于先把所有用户的所有S3操作全部禁止,后面写的Allow规则根本不会触发。
  • 两条规则的Resource字段只配置了桶本身的ARNarn:aws:s3:::some-random-bucket,没有覆盖桶内对象资源。上传对象属于对象级操作,需要匹配带/*后缀的对象ARN路径,仅配置桶级ARN无法满足上传操作的权限要求。
修复步骤

1. 替换错误的存储桶策略

将原有桶策略替换为以下配置:

{
    "Version": "2012-10-17",
    "Id": "PolicyXXXXXXXXX",
    "Statement": [
        {
            "Sid": "StmtXXXXXXXXXXXXXX",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::some-random-bucket",
                "arn:aws:s3:::some-random-bucket/*"
            ],
            "Condition": {
                "StringNotEquals": {
                    "aws:PrincipalArn": "arn:aws:iam::XXXXXXXXXX:user/some-random-user"
                }
            }
        },
        {
            "Sid": "StmtXXXXXXXXXXX",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXXX:user/some-random-user"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::some-random-bucket",
                "arn:aws:s3:::some-random-bucket/*"
            ]
        }
    ]
}

配置调整点说明:

  • 给全局Deny规则增加Condition判断,仅当访问者不是你授权的指定IAM用户时,才触发拒绝逻辑,避免合法用户被Deny规则拦截
  • 两条规则的Resource列表同时加入桶ARN、桶内对象ARN(带/*后缀),同时覆盖桶级操作、对象级操作的权限匹配要求

2. 仍报错时的排查项

如果替换策略后依然返回Access Denied,逐一核对以下配置:

  • 确认SDK初始化时填写的region和S3桶实际部署区域一致,当前配置为ap-south-1(孟买区域),区域不匹配时也会返回访问类错误
  • 检查对应IAM用户绑定的身份策略、权限边界,以及账号所属组织的SCP策略,确认没有其他针对S3操作的Deny规则
  • 如果存储桶开启了KMS密钥加密,确认该IAM用户拥有对应KMS密钥的kms:GenerateDataKey、kms:Encrypt权限,缺少KMS权限时上传操作同样会被拒绝
  • 确认存储桶的公网访问拦截配置、VPC端点访问策略没有限制当前请求来源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:24:29