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

使用@aws-sdk/client-s3的PutObjectCommand时遇AccessDenied错误求助

S3上传AccessDenied问题排查

两周前可正常通过构建后脚本上传文件至S3存储桶,近期突然出现AccessDenied错误。已生成新的Access Key并确认密钥无误;所用IAM用户配置了Full S3访问权限且多次核对;通过AWS S3 GUI可正常上传文件,但使用Node.js的@aws-sdk/client-s3调用时触发报错,区域和存储桶名称均确认正确,报错发生在s3Client.send()方法处。

代码示例

const { S3Client, PutObjectCommand } = require("@aws-sdk/client-s3");

const REGION = "us-east-1";
const bucket_name = 'bucket_name';
const access_key = process.env.AWS_ACCESS_KEY_ID;
const access_secret = process.env.AWS_SECRET_ACCESS_KEY;

const s3Client = new S3Client({ credentials: { accessKeyId: access_key, secretAccessKey: access_secret }, region: REGION });

const data = await s3Client.send(new PutObjectCommand({
          Bucket: bucket_name,
          Key: "test.txt",
          Body: "hello"
        })  
        );

错误信息

AccessDenied: Access Denied
    ...
 {
  '$fault': 'client',
  '$metadata': {
    httpStatusCode: 403,
    requestId: '...',
    extendedRequestId: '...',
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  Code: 'AccessDenied',
  RequestId: '...',
  HostId: '...'
}

排查解决步骤

  • 验证环境变量加载情况:在代码中添加console.log(access_key, access_secret),确认变量值不为undefined或空字符串,排查构建环境的变量注入是否异常。
  • 用AWS CLI测试权限:使用同一组Access Key执行aws s3 cp test.txt s3://bucket_name/test.txt,若CLI也报错,说明IAM权限可能存在隐藏限制(如权限边界、组织策略);若CLI执行成功,问题则集中在Node.js代码配置。
  • 检查S3桶策略:查看存储桶的桶策略配置,确认没有拒绝该IAM用户PutObject操作的规则,桶策略优先级高于IAM用户权限。
  • 确认MFA状态:若IAM用户近期启用了MFA,代码中未提供MFA令牌会导致权限拒绝,需检查用户的MFA配置。
  • 更新SDK版本:执行npm install @aws-sdk/client-s3@latest更新至最新版本,排除旧版本SDK的签名算法兼容性问题。
  • 排查网络环境:在本地运行代码测试,排除代理、防火墙等网络因素导致的请求签名验证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:19:55