2012-04-23 206 views
7

我为Amazon S3和CloudFront使用PHP类 - Link。但是当我尝试将文件上传到存储桶时,出现此错误:SignatureDoesNotMatch - Amazon S3 API

[SignatureDoesNotMatch] The request signature we calculated does not match the signature you provided. Check your key and signing method.

如何解决该问题?

谢谢。

回答

8

当您注册亚马逊时,您可以创建自己的密钥对(亚马逊称为访问密钥ID和秘密访问密钥)。

这两个用于签署对亚马逊web服务的请求。亚马逊重新计算签名并比较它是否与请求中包含的签名匹配。这样,秘密访问密钥永远不需要通过网络传输。

如果您得到“签名不符”,很有可能您使用了错误的密钥访问密钥。你能仔细检查访问密钥和秘密访问密钥以确保它们是正确的吗?

+0

谢谢!如何解决这个问题 - http://goo.gl/QTdm4 – 2012-05-16 05:42:28

+0

@ roman-nazarkin所以问题是桶的位置? – awendt 2012-05-16 07:33:17

+1

在我的情况下,在配置文件/设置中有一些额外的空白,它具有密钥,所以它在“密码”中传输了一个额外的“制表符”字符,从而使签名无效。 – drzaus 2014-03-27 21:05:18

4

就我个人而言,我收到了这个错误,因为我的元数据中的字符。

有问题的字符是“ - ”字符,它是unicode中的“\ u2013”​​,与“ - ”不同。

$result = $s3->putObject(array(
    'Bucket'  => $bucket, 
    'Key'   => $keyname, 
    'Metadata' => [ 
     'name' => 'Terminology – Blah' 
    ] 
)); 

从文档 http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#UserMetadata笔记...

Amazon S3 stores user-defined metadata in lowercase. Each name, value pair must conform to US-ASCII when using REST and UTF-8 when using SOAP or browser-based uploads via POST.

+1

同上 - 在将元数据与'Cache-Control'键添加到已具有元数据键“cache-control”的对象上时出现此错误。 – Joscha 2015-10-07 06:56:12

0

指定Key开始斜杠(/),当我有这个错误与putObject() - 取出它的工作斜线后精细。