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

NodeJS调用Amazon S3 getObject()返回Access Denied访问被拒求助

AWS S3 AccessDenied 问题排查方案
  • 第一,验证环境变量配置正确性
    确认process.env.AWS_ACCESS_KEY_ID、process.env.AWS_SECRET_ACCESS_KEY对应的是你配置了权限的IAM用户的有效密钥,没有多余空格、复制遗漏;同时确认process.env.AWS_BUCKET_REGION和S3桶实际所在的区域完全一致,区域不匹配也会触发访问拒绝错误。
  • 第二,补全可能缺失的IAM权限
    如果你的S3桶开启了默认KMS加密,你需要在当前IAM策略的Action数组中新增kms:Decrypt权限,资源字段配置你使用的KMS密钥的ARN;如果后续需要列取桶内对象等操作,还需要补充s3:ListBucket权限,资源配置为桶的根ARN arn:aws:s3:::atlasfitness-progress-s3。
  • 第三,检查文件Key的正确性
    AWS S3为了避免对象存在性泄露,当你请求的文件Key不存在时也可能返回AccessDenied错误而非404。确认你调用getFileS3传入的fileKey和对象实际存储的Key完全一致,没有多写/漏写前缀、大小写错误、特殊字符未正确编码的情况。
  • 第四,检查桶级别的权限配置
    查看S3桶本身的桶策略,有没有规则会拒绝当前IAM用户的访问请求;同时确认桶的「阻止公共访问」设置没有覆盖你的IAM授权规则(签名访问场景正常不受该配置影响,可作为兜底排查项)。
  • 第五,调整SDK配置
    部分AWS区域要求使用v4版本签名,你可以在初始化S3实例时补充签名版本配置:
    const s3 = new AWS.S3({
        region: process.env.AWS_BUCKET_REGION,
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
        signatureVersion: 'v4'
    })
    

快速验证方法

你可以在本地安装AWS CLI,配置和代码相同的密钥、区域,执行命令aws s3 cp s3://atlasfitness-progress-s3/[你的实际文件Key] ./test,如果CLI可以正常下载,说明权限配置没问题,问题出在代码参数层面;如果CLI也报同样的错误,直接排查权限、桶配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:54:03