我刚刚解决了一个非常相似的问题,可能和你一样。我说可能是因为你没有说你的部署需要什么。我假设您正在部署到Lambda,但您可能不会,这可能适用也可能不适用,但如果您使用临时凭证,则适用。
我最初使用上面使用的方法,但后来使用的是npm模块 AWS签名-V4 看看它是否有所不同,并且得到了同样的错误。
您将需要令牌,当您使用临时凭证签署请求时,需要该令牌。在Lambda的情况下,凭据在运行时,包括你需要传递的会话令牌,同样在其他地方也是如此,但我不确定我在几年内没有使用过ec2。
埋在文档中(抱歉我找不到这个地方),指出一些服务要求使用其他规范查询参数处理session_token。我正在使用的模块是在最后添加它,因为sig v4指令似乎暗示,所以我修改它以使令牌是规范的并且它可以工作。
的 我们已经更新了aws-signature-v4模块的实时版本以反映这一变化,现在它可以很好地签署您的s3请求。 强>
签名在这里讨论 。
我会使用我做的模块,因为我感觉sdk出于某种原因做错了。
用法示例(这包含在multiPart上传中,因此部件号和上传ID):
function createBaseUrl( bucketName, uploadId, partNumber, objectKey ) { let url = sig4.createPresignedS3URL( objectKey, { method: "PUT", bucket: bucketName, expires: 21600, query: `partNumber=${partNumber}&uploadId=${uploadId}` }); return url; }