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

调用AWS JS SDK生成S3 putObject预签名URL时提示安全令牌无效

解决方案

1. 优先校验环境变量加载正确性

在初始化S3实例前先打印凭证前缀确认加载正常,避免变量名拼写错误、.env文件未加载等低级问题:

console.log('AccessKey前缀:', process.env.AWS_IAM_ACCESS?.slice(0, 10));
console.log('SecretKey前缀:', process.env.AWS_IAM_SECRET?.slice(0, 10));

如果打印结果为undefined或和你实际的凭证不一致,优先修正环境变量配置。

2. 显式配置S3签名版本

部分区域默认要求使用V4版本签名,AWS SDK v2需要显式开启该配置,修改S3初始化代码:

const s3 = new AWS.S3({
    accessKeyId: process.env.AWS_IAM_ACCESS,
    secretAccessKey: process.env.AWS_IAM_SECRET,
    region: 'ap-southeast-1',
    signatureVersion: 'v4' // 新增该行配置
});

3. 校验区域一致性

确认你实际使用的S3存储桶所属区域和代码中配置的ap-southeast-1完全一致,桶区域和签名区域不匹配会直接触发该错误。

4. 清理无效会话凭证

AWS SDK v2会默认读取环境中的AWS_SESSION_TOKEN、AWS_SECURITY_TOKEN变量,如果你的运行环境中存在这两个过期/无效变量,哪怕代码中未主动传递也会触发校验失败,可以在初始化S3时显式屏蔽:

const s3 = new AWS.S3({
    accessKeyId: process.env.AWS_IAM_ACCESS,
    secretAccessKey: process.env.AWS_IAM_SECRET,
    region: 'ap-southeast-1',
    signatureVersion: 'v4',
    sessionToken: null // 新增该行强制屏蔽环境中的会话凭证
});

5. 同步服务器本地时间

如果运行代码的服务器本地时间和AWS标准时间偏差超过15分钟,生成的签名会被判定为无效,同步服务器系统时间后重试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:48:01