这个AWS安全性的东西让我疯狂。我正在尝试使用knox从节点应用上传一些二进制文件。我一直用我的密钥/秘密组合得到臭名昭着的 SignatureDoesNotMatch 错误。我追溯到这个:例如通过连接s3.amazonaws.com
来传输,可以访问存储分区,但我无法通过虚拟子域mybucket.s3.amazonaws.com
访问它。 (当我尝试使用s3.amazonaws.com/mybucket语法访问存储桶时,我收到一条错误消息,指出只允许使用子域样式。)
我尝试将存储桶策略设置为明确允许来自相应用户的PUT
,但这没有任何效果。任何人都可以了解如何从一个特定AWS用户上传文件?
答案 0 :(得分:0)
经过大量的反复试验,我把它缩小到了几个问题。我不完全确定哪一个最终修复了它,但这里有一些你可能想要尝试的东西:
确保您正在设置正确的数据中心。就我而言,这看起来像这样:
knox.createClient({
key: this.config.key
, secret: this.config.secret
, bucket: this.config.bucket
, region: 'us-west-2' // cause my bucket is supposed to be in oregon
});
检查您的PUT标头。就我而言,Content-Type
被意外设置为undef
,导致了问题:
var headers = {
'x-amz-acl': 'public-read' // if you want anyone to be able to download the file
};
if (filesize) headers['Content-Length'] = filesize;
if (mime) headers['Content-Type'] = mime;