2012-04-23 9 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와 비밀 액세스 키라고합니다).

두 개는 Amazon의 웹 서비스에 대한 요청에 서명하는 데 사용됩니다. Amazon은 서명을 다시 계산하고 요청에 포함 된 서명과 일치하는지 비교합니다. 그렇게하면 비밀 액세스 키가 네트워크를 통해 전송 될 필요가 없습니다.

"서명이 일치하지 않습니다"라는 메시지가 표시되면 잘못된 비밀 키를 사용했을 가능성이 큽니다. 그들이 올바른지 액세스 키와 비밀 키를 재확인 할 수 있습니까?

+0

고마워요! 이 문제를 해결하는 방법 - http://goo.gl/QTdm4 –

+0

@ roman-nazarkin 그래서 문제는 버킷 위치입니까? – awendt

+1

제 경우에는 비밀 키가있는 설정 파일/설정에 약간의 공백이 있었기 때문에 "비밀번호"에 여분의'탭 '문자가 전송되어 서명이 무효화되었습니다. – drzaus

4

개인적으로 내 메타 데이터에있는 문자 때문에이 오류가 발생했습니다.

문제가되는 문자는 유니 코드에서는 "\ u2013"이고 "-"와는 다른 "-"문자입니다. 슬래시 문자 (/)로 시작하는 Key를 지정할 때

$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

ditto - 메타 데이터 키 'cache-control'이 이미있는 객체에 'Cache-Control'키가있는 메타 데이터를 추가 할 때이 오류가 발생합니다. – Joscha

0

내가 putObject()와 함께이 오류가 있었다 - 그것은 작동 슬래시를 제거한 후 벌금.