

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SQS のリクエストの認証
<a name="sqs-api-request-authentication"></a>

署名認証とは、リクエストの送信者を特定し、検証するプロセスです。認証の最初の段階で、 AWS はプロデューサーのアイデンティティと、プロデューサーが [AWSを使用するように登録されている](https://aws.amazon.com/)かどうかを確認します (詳細については、「[Amazon SQSのセットアップ](sqs-setting-up.md)」を参照してください)。次に、以下の手順 AWS に従います。

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

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

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

1. 次のいずれかの結果になります。
   + 認証が成功すると、コンシューマーはリクエストを処理します。
   + 認証に失敗すると、コンシューマーによってリクエストが却下され、エラーが返されます。

## HMAC-SHA による基本的な認証のプロセス
<a name="sqs-api-basic-authentication-process"></a>

クエリAPIを使用してAmazon SQSにアクセスする場合は、リクエストの認証のために、以下の項目を準備する必要があります。
+ を識別する**AWS アクセスキー ID**。 AWS は AWS アカウントを使用してシークレットアクセスキーを検索します。
+ **HMAC-SHAリクエスト署名**、シークレットアクセスキーを使用して計算されます(共有シークレットはお客様と AWSだけが知っています。詳細については、[RFC2104](http://www.faqs.org/rfcs/rfc2104.html) を参照してください)。[AWS SDK](https://aws.amazon.com/code/) によって署名プロセスが処理されますが、HTTP または HTTPS 経由でクエリリクエストを送信した場合、各クエリリクエストに署名を含める必要があります。

  1. 署名バージョン4の署名キーを取得します。詳細については、「[Java を使用して署名キーを取得](https://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-java)」を参照してください。
**注記**  
Amazon SQSは署名バージョン4をサポートしています。署名バージョン4では、SHA256により以前のバージョンよりもセキュリティとパフォーマンスが向上しています。Amazon SQSを使用する新規のアプリケーションを作成する場合、署名バージョン4を使用します。

  1. リクエスト署名を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` オブジェクトでなければなりません。[時、分、秒を含む詳細な日時](http://www.w3.org/TR/xmlschema-2/#dateTime)が必要です。たとえば、`2007-01-31T23:59:59Z` などです。必須ではありませんが、協定世界時 (グリニッジ標準時)を使用してオブジェクトを提供することが推奨されています。
**注記**  
あなたのサーバー時刻が正しく設定されていることを確認してください。(有効期限ではなく) タイムスタンプを指定すると、リクエストは指定された時刻から 15 分後に自動的に期限切れになります AWS (サーバーの現在の時刻より 15 AWS 分以上前のタイムスタンプを持つリクエストは処理されません）。  
.NET を使用する場合、過度に厳密なタイムスタンプ情報を送信しないようご注意ください (タイムスタンプの処理プロセスの違いにより不具合が発生する可能性があるためです)。この場合、精度が 1ミリ秒以内の`dateTime`オブジェクトを手動で作成してください。

## パート 1: ユーザーからのリクエスト
<a name="sqs-authentication-user"></a>

HMAC-SHA AWS リクエスト署名を使用してリクエストを認証するには、次のプロセスに従う必要があります。

![ユーザーからのリクエストを説明する図。](https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-basic-authentication-process-hmac-user.png)


1. へのリクエストを作成します AWS。

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

1. リクエストに署名とアクセスキー ID を含めてから、リクエストを送信します AWS。

## パート 2: からのレスポンス AWS
<a name="sqs-authentication-aws"></a>

AWS は応答として次のプロセスを開始します。

![AWSからのレスポンスを説明する図。](https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-basic-authentication-process-hmac-aws.png)


1. AWS はアクセスキー ID を使用してシークレットアクセスキーを検索します。

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

1. 次のいずれかの結果になります。
   + が AWS 生成する署名がリクエストで送信した署名と一致する場合、 はリクエストが本物である AWS と見なします。
   + 比較が失敗すると、リクエストは破棄され、エラー AWS が返されます。