Amazon S3 と CloudFront - Linkに PHP クラスを使用しています。しかし、ファイルをバケットにアップロードしようとすると、次のエラーが発生します。
[SignatureDoesNotMatch] 計算したリクエストの署名が、提供された署名と一致しません。キーと署名方法を確認してください。
修正方法は?
ありがとう。
Amazon にサインアップすると、自分でキー ペアを作成できます (Amazon はこれらをアクセス キー ID とシークレット アクセス キーと呼びます)。
これら 2 つは、Amazon の Web サービスへのリクエストに署名するために使用されます。Amazon は署名を再計算し、リクエストに含まれていた署名と一致するかどうかを比較します。そうすれば、シークレット アクセス キーをネットワーク経由で送信する必要がなくなります。
「署名が一致しません」と表示された場合は、間違ったシークレット アクセス キーを使用した可能性が高いです。アクセス キーとシークレット アクセス キーを再確認して、それらが正しいことを確認できますか?
個人的には、メタデータに含まれていた文字が原因でこのエラーを受け取りました。
問題の文字は、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 は、ユーザー定義のメタデータを小文字で保存します。各名前と値のペアは、REST を使用する場合は US-ASCII に準拠し、SOAP または POST を介したブラウザーベースのアップロードを使用する場合は UTF-8 に準拠する必要があります。