2012-04-23 40 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

Amazonにサインアップするときに、自分でキーペアを作成できます(AmazonはそのアクセスキーIDとシークレットアクセスキーを呼び出します)。

これらの2つは、AmazonのWebサービスへのリクエストに署名するために使用されます。 Amazonは署名を再計算し、あなたの要求に含まれていたものと一致するかどうかを比較します。このようにして、秘密のアクセスキーをネットワーク経由で送信する必要はありません。

「署名が一致しません」と表示される場合は、誤った秘密のアクセスキーを使用した可能性があります。アクセスキーと秘密のアクセスキーを再確認して、それらが正しいことを確認できますか?

+0

ありがとうございます!この問題を解決する方法 - http://goo.gl/QTdm4 –

+0

@ roman-nazarkin問題はバケツの場所だったのですか? – awendt

+1

私のケースでは、設定ファイル/設定に秘密鍵を持っている余分な空白があるので、 "パスワード"に余分な 'タブ'文字を送信していたので、署名が無効になりました。 – drzaus

4

個人的に私のメタデータにあった文字のためにこのエラーが発生しました。

問題のある文字は、ユニコードでは "\ 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

0

スラッシュ文字(/)で始まるKeyを指定するとき、私はputObject()と、このエラーが発生しました - それは働いたスラッシュを削除した後良い。