Node.js集成S3调用getSignedUrl遇KMS加密签名版本4错误求解决
解决S3预签名URL请求的KMS加密签名错误
错误原因:你的S3桶启用了AWS KMS托管密钥的服务器端加密,这类请求强制要求使用AWS Signature Version 4进行签名,当前SDK实例未显式指定该签名版本,导致签名不兼容。
解决方案:在初始化S3客户端时,显式配置
signatureVersion: 'v4'参数。
修改后的代码示例:
export const platformS3 = new S3({ region: process.env.PLATFORM_S3_REGION, signatureVersion: 'v4' // 新增配置,指定签名版本为v4 }); const SIGNED_URL_EXPIRED_SECONDS = 300; export const getSignedUrl = async ({ id, bucket, pathInBucket, }: FileUpload) => { const fileUrl = platformS3.getSignedUrl('getObject', { Bucket: bucket, Key: pathInBucket, Expires: SIGNED_URL_EXPIRED_SECONDS, }); return { fileUrl }; };
- 补充说明:AWS 2014年后推出的区域(包括eu-west-1)均要求使用Signature Version 4,显式指定签名版本可避免SDK默认配置差异引发的签名问题。
内容的提问来源于stack exchange,提问作者Itay Tur
相关产品推荐
相关产品推荐

