メニュー
アマゾン ウェブ サービス
全般的なリファレンス (Version 1.0)

AWS 署名バージョン 4 に関連するエラーのトラブルシューティング

署名バージョン 4 を実装するコードを開発するときは、テスト対象の AWS 製品からエラーを受け取ることがあります。エラーは通常、リクエストの正規化の誤り、署名キーの不正な取得や使用、またはリクエストとともに送信された署名固有のパラメータの検証失敗によって起こります。

AWS 署名バージョン 4 に関連する正規化エラーのトラブルシューティング

次のリクエストの場合を考えます。

https://iam.amazonaws.com/?MaxItems=100 &Action=ListGroupsForUser &UserName=Test &Version=2010-05-08 &X-Amz-Date=20120223T063000Z &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE/20120223/us-east-1/iam/aws4_request &X-Amz-SignedHeaders=host &X-Amz-Signature=<calculated value>

正規リクエストまたは署名文字列の計算が間違っている場合、サービスによって実行される署名検証ステップは失敗します。次の例は、サービスによって計算される正規文字列と署名文字列を含む、一般的なエラーレスポンスです。返される文字列を正規文字列および計算した署名文字列と比較することで、計算のエラーをトラブルシューティングすることができます。

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. The canonical string for this request should have been 'GET / Action=ListGroupsForUser&MaxItems=100&UserName=Test&Version=2010-05-08&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential =AKIAIOSFODNN7EXAMPLE%2F20120223%2Fus-east-1%2Fiam%2Faws4_request&X-Amz-Date=20120223T063000Z&X-Amz-SignedHeaders=host host:iam.amazonaws.com host <hashed-value>' The String-to-Sign should have been 'AWS4-HMAC-SHA256 20120223T063000Z 20120223/us-east-1/iam/aws4_request <hashed-value>' </Message> </Error> <RequestId>4ced6e96-5de8-11e1-aa78-a56908bdf8eb</RequestId> </ErrorResponse>

SDK を使用するテストでは、各取得ステップを既知の値と照らして認証することでトラブルシューティングすることをお勧めします。詳細については、「署名バージョン 4 テストスイート」を参照してください。

AWS 署名バージョン 4 認証情報スコープのエラーのトラブルシューティング

AWS 製品は適切な範囲の認証情報を検証します。認証パラメータは、正しいサービス、リージョン、および日付を指定する必要があります。たとえば、次の認証情報は Amazon RDS サービスを参照します。

Credential=AKIAIOSFODNN7EXAMPLE/20120224/us-east-1/rds/aws4_request

リクエストを IAM に送信するために同じ認証情報を使用する場合、次のエラーレスポンスを受け取ります。

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Credential should be scoped to correct service: 'iam'. </Message> </Error> <RequestId>aa0da9de-5f2b-11e1-a2c0-c1dc98b6c575</RequestId>

認証情報は、正しいリージョンを指定する必要もあります。たとえば、次の IAM リクエストの認証情報は、米国西部 (北カリフォルニア) リージョンを間違って指定しています。

Credential=AKIAIOSFODNN7EXAMPLE/20120224/us-west-1/iam/aws4_request

us-east-1 リージョンの指定のみを受け入れる IAM にリクエストを送信するために認証情報を使用する場合、次のレスポンスを受け取ります。

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Credential should be scoped to a valid region, not 'us-east-1'. </Message> </Error> <RequestId>8e229682-5f27-11e1-88f2-4b1b00f424ae</RequestId> </ErrorResponse>

認証情報スコープで指定されたリージョンと異なるリージョンにリクエストを送信する場合、複数のリージョンで使用できる AWS 製品から、同じタイプの無効なリージョンレスポンスを受け取ります。

認証情報は、リクエストでサービスとアクションの正しいリージョンを指定する必要もあります。

認証情報の一部として使用する日付は、x-amz-date ヘッダーの日付の値と一致する必要があります。たとえば、次の x-amz-date ヘッダー値は、それに続く Credential パラメーターで使用する日付の値と一致しません。

x-amz-date:"20120224T213559Z" Credential=AKIAIOSFODNN7EXAMPLE/20120225/us-east-1/iam/aws4_request

ヘッダーと認証情報の x-amz-date このペアを使用する場合、次のエラーレスポンスを受け取ります。

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Date in Credential scope does not match YYYYMMDD from ISO-8601 version of date from HTTP: '20120225' != '20120224', from '20120 224T213559Z'.</Message> </Error> <RequestId>9d6ddd2b-5f2f-11e1-b901-a702cd369eb8</RequestId> </ErrorResponse>

期限切れの署名は、エラーレスポンスを生成することもできます。たとえば、次のエラーレスポンスは、期限切れの署名が原因で生成されました。

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Signature expired: 20120306T074514Z is now earlier than 20120306T074556Z (20120306T080056Z - 15 min.)</Message> </Error> <RequestId>fcc88440-5dec-11e1-b901-a702cd369eb8</RequestId> </ErrorResponse>

AWS 署名バージョン 4 キーの署名エラーのトラブルシューティング

署名キーの不正な取得や暗号の不適切な使用に起因するエラーは、トラブルシューティングがさらに困難です。エラーレスポンスによって、署名が一致していないことがわかります。正規文字列と署名文字列が正しいことを検証したら、署名不一致の原因はほとんどが次の 2 つの問題のどちらかです。

  • シークレットアクセスキーが、Credential パラメータで指定したアクセスキー ID と一致しない。

  • キー取得コードに問題がある。

シークレットキーがアクセスキー ID と一致するかどうかを確認するには、既知の有効な実装でシークレットキーとアクセスキー ID を使用します。1 つの方法として、AWS SDK の 1 つを使用し、希望のアクセスキー ID とシークレットアクセスキーを使用して AWS へのシンプルなリクエストを作成するプログラムを記述します。

キー取得コードが正しいかどうかを確認するには、それをこの取得コード例と比較します。詳細については、「署名バージョン 4 の署名キーを取得する方法の例」を参照してください。