Amazon S3 バケットへのリクエストに Amazon Simple Storage Service (Amazon S3) の署名付き URL を使用していますが、SignatureDoesNotMatch エラーが表示されます。
簡単な説明
このエラーは、AWS への HTTP リクエストから計算された署名値が Amazon S3 で計算された値と一致しない場合に発生します。詳細については、エラーコードのリストを参照してください。
再署名付き URL を生成すると、クライアントはリクエストのユニークな署名を計算してリクエストを認証します。次に、Amazon S3 は HTTP リクエストで送信されたパラメータに基づいて署名を計算し、両方の署名を比較します。署名が一致しない場合、SignatureDoesNotMatch というエラーが表示されます。
このエラーをトラブルシューティングするには、以下を実行してください。
- HTTP メソッドを検証します。 GET、PUT、DELETE リクエストに対して S3 に対して行った HTTP リクエストが、リクエストが生成された HTTP メソッドと一致しているかを確認します。
- シークレットアクセスキーを確認します。 署名付き URL を生成するには、必ず正しいシークレットアクセスキーを使用してください。シークレットアクセスキーが変更されたり正しくなかったりする場合は、正しいアクセスキーを使用して署名付き URL を再生成します。
- URL のバケット名とキー名を確認します。 バケット名とオブジェクトキー名が正しく、アクセスしようとしているオブジェクトのものと一致しているかを確認してください。
- HTTP リクエストで使用されるヘッダーを検証します。 ヘッダーが署名で計算されたことを確認します。署名の生成に使用された HTTP ヘッダーが、HTTP リクエストで S3 に送信された HTTP ヘッダーと一致するかどうかを確認してください。
- AWS リージョンが正しいことを確認します。 バケットが現在存在するリージョンで、署名が生成されているかを確認します。
解決策
HTTP メソッドが正しくありません
署名付き URL を生成するときは、その URL に HTTP アクションを割り当てます。このエラーは、クライアントが HTTP リクエストで送信したアクションが URL で使用されている HTTP アクションと一致しない場合に発生します。たとえば、リクエストが GET 用に署名されていても、リクエストで使用される HTTP アクションが PUT の場合、エラーが表示されます。URL を機能させるには、目的の HTTP メソッドの URL を生成して使用しているかどうかを確認してください。
シークレットアクセスキーが間違っています
このエラーは、署名付き URL の生成に使用するアクセスキーまたはシークレットアクセスキーが次のいずれかの状態にある場合に表示されます。
アクセスキーに一致しない文字や不要なスペースが追加されていないことを確認します。
署名の生成時に指定したアクセスキーとシークレットキーが、AWS から提供されたものと一致しているかを確認します。
キー名またはバケット名が間違っています
このエラーは、バケットまたはキー用に生成した署名付き URL を使用して、別のバケットまたはキーにアクセスした場合に発生します。
バケット名とオブジェクト名が正しく、URL の署名生成に含まれていたものと一致しているかを確認します。大文字と小文字が一致しないと、署名も不一致になることにご注意ください。
ヘッダーに署名がないか、ヘッダー値が正しくありません
署名付き URL の署名生成で、署名されていないヘッダーを渡していないことを確認してください。署名付きの S3 URL を使用してヘッダーを送信する場合は、URL の署名の生成時にヘッダーを考慮する必要があります。
また、渡したヘッダーの値が、署名の計算中に生成された値と一致しているかを確認してください。大文字と小文字の不一致を含め、ヘッダー値が一致しない場合、SignatureDoesNotMatch エラーが発生します。
署名リージョンとバケットリージョンが一致しません
署名付き URL を S3 に送信する前に、URL が生成されたリージョンが、バケットが現在存在するリージョンと一致するかを検証してください。
GetBucketLocation API リクエストを使用して S3 バケットのリージョンを確認します。次の AWS コマンドラインインターフェイス (AWS CLI) コマンドを実行することもできます。
$ aws s3api get-bucket-location --bucket example-bucket
**注:**AWS CLI コマンドを実行したときにエラーが発生した場合は、AWS CLI の最新バージョンを使用しているかを確認してください。
出力は次のようになります。
{
"LocationConstraint": "us-west-2"
}
関連情報
署名付き URL を使用する
S3 オブジェクトにアクセスしようとすると、「リクエストの有効期限が切れました」というエラーが表示されます。 これはなぜですか?