Amazon S3 PUT抛出“SignatureDoesNotMatch”

时间:2013-06-10 00:29:23

标签: node.js amazon-web-services amazon-s3 knox-amazon-s3-client

这个AWS安全性的东西让我疯狂。我正在尝试使用knox从节点应用上传一些二进制文件。我一直用我的密钥/秘密组合得到臭名昭着的 SignatureDoesNotMatch 错误。我追溯到这个:例如通过连接s3.amazonaws.com来传输,可以访问存储分区,但我无法通过虚拟子域mybucket.s3.amazonaws.com访问它。 (当我尝试使用s3.amazonaws.com/mybucket语法访问存储桶时,我收到一条错误消息,指出只允许使用子域样式。)

我尝试将存储桶策略设置为明确允许来自相应用户的PUT,但这没有任何效果。任何人都可以了解如何从一个特定AWS用户上传文件?

1 个答案:

答案 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;