Amazon Simple Queue Service
開発者ガイド

リクエストの認証

署名認証とは、リクエストの送信者を特定し、検証するプロセスです。認証の最初の段階では、AWS はプロデューサーの ID と、プロデューサーが AWSを使用するように登録されているかどうかを確認します (詳細については、「アカウントの作成」と「 ユーザーを作成する」を参照)。その後、AWS が次の手順に従います。

  1. プロデューサー (送信者) が必要な証明書を取得します。

  2. プロデューサーがリクエストと認証情報をコンシューマー (受信者) に送信します。

  3. コンシューマーは証明書を使用して、プロデューサーが本当にリクエストを送信したか検証します。

  4. 次のいずれかの結果になります。

    • 認証が成功すると、コンシューマーはリクエストを処理します。

    • 認証に失敗すると、コンシューマーによってリクエストが却下され、エラーが返されます。

HMAC-SHA による基本的な認証のプロセス

クエリ API を使用して Amazon SQS にアクセスする場合は、リクエストが認証されるように、以下の項目を指定する必要があります。

  • AWS アカウントを識別する AWS アクセスキー ID。AWS はこのアクセスキー ID を使用して、シークレットアクセスキーを参照します。

  • HMAC-SHA リクエスト署名。シークレットアクセスキーを使用して計算されます (共有シークレットはお客様と AWS だけが知っています。詳細については、RFC2104 を参照してください)。AWS SDK によって署名プロセスが処理されますが、HTTP または HTTPS 経由でクエリリクエストを送信した場合、すべてのクエリリクエストに署名を含める必要があります。

    1. 署名バージョン 4 の署名キーを取得します。詳細については、「Java を使用して署名キーを取得」を参照してください。

      注記

      Amazon SQS は署名バージョン 4 をサポートしています。署名バージョン 4 では、SHA256 によって以前のバージョンよりもセキュリティとパフォーマンスが向上しています。Amazon SQS を使用する新しいアプリケーションを作成する場合、署名バージョン 4 を使用します。

    2. リクエスト署名を Base64 エンコードします。以下のサンプル Java コードによってこの処理が行われます。

      package amazon.webservices.common; // Define common routines for encoding data in AWS requests. public class Encoding { /* Perform base64 encoding of input bytes. * rawData is the array of bytes to be encoded. * return is the base64-encoded string representation of rawData. */ public static String EncodeBase64(byte[] rawData) { return Base64.encodeBytes(rawData); } }
  • リクエストのタイムスタンプ (または有効期限)。リクエストで使用するタイムスタンプは、dateTime オブジェクトでなければなりません。時、分、秒を含む詳細な日時が必要です。たとえば、2007-01-31T23:59:59Z などです。必須ではありませんが、協定世界時 (グリニッジ標準時) を使用してオブジェクトを提供することが推奨されています。

    注記

    あなたのサーバー時刻が正しく設定されていることを確認してください。(有効期限ではなく) タイムスタンプを指定する場合、リクエストは、指定された時間の 15 分後に自動的に有効期限切れとなります (タイムスタンプが、AWS サーバー上の現在時刻よりも 15 分以上前の場合、AWS はリクエストの処理を行ないません)。

    .NET を使用する場合、過度に厳密なタイムスタンプ情報を送信しないようご注意ください (タイムスタンプの処理プロセスの違いにより不具合が発生する可能性があるため)。この場合、精度が 1 ミリ秒以内の dateTime オブジェクトを手動で作成してください。

パート 1: ユーザーからのリクエスト

以下は、HMAC-SHA リクエスト認証を使用して AWS リクエストを認証する場合に従う必要があるプロセスです。

  1. AWS にリクエストします。

  2. シークレットアクセスキーを使用して、キー付きハッシュメッセージ認証コード (HMAC-SHA) 署名を計算します。

  3. リクエストに、前のステップで生成した署名とアクセスキー ID を含め、AWS にリクエストを送信します。

パート 2: AWS からのレスポンス

AWS は、レスポンスで次のプロセスを開始します。

  1. AWS がアクセスキー ID を使用して、ユーザーのシークレットアクセスキーを調べます。

  2. AWS は、ユーザーがリクエストで送信した署名を生成するのに使用したのと同じアルゴリズムを使用して、リクエストデータとシークレットアクセスキーから署名を生成します。

  3. 次のいずれかの結果になります。

    • AWS が生成した署名がユーザーがリクエストに含めたものと一致した場合、AWS はリクエストを正規のものと認識します。

    • 署名が一致しなかった場合、リクエストの処理は拒否され、AWS はエラーを返します。