AWS 全般のリファレンス
リファレンスガイド (Version 1.0)

タスク 4: HTTP リクエストに署名を追加する

署名を計算したら、リクエストに追加します。署名をリクエストに追加するには、次の 2 種類のうちいずれかの方法で行います。

  • HTTP ヘッダー (Authorization)

  • クエリ文字列

Authorization ヘッダーとクエリ文字列の両方に署名情報を渡すことはできません。

注記

AWS Security Token Service (AWS STS) から提供された一時的なセキュリティ認証情報を使用してリクエストに署名できます。このプロセスは長期の認証情報を使用する場合と同じですが、セキュリティトークン用の追加の HTTP ヘッダーまたはクエリ文字列パラメーターが必要です。ヘッダーまたはクエリ文字列パラメーターの名前は X-Amz-Security-Token で、その値はセッショントークン (一時的なセキュリティ認証情報を取得する際に AWS STS から受け取った文字列) です。

クエリ文字に X-Amz-Security-Token パラメーターを追加する場合、一部のサービスでは、このパラメーターを正規 (署名付き) リクエストに含める必要があります。その他のサービスでは、署名の計算後に、 このパラメーターを末尾に追加します。詳細については、そのサービスの API リファレンスドキュメントを参照してください。

Authorization ヘッダーに署名情報を追加する

署名情報を含めるには、Authorization という名前の HTTP ヘッダーに署名情報を追加できます。ヘッダーの内容は、前のステップに従って署名を計算した後で作成されるため、Authorization ヘッダーは、署名付きヘッダーのリストに含まれていません。ヘッダーは Authorization という名前ですが、実際には、署名情報が認証に使用されます。

次の擬似コードは、Authorization ヘッダーの構成を示しています。

Authorization: algorithm Credential=access key ID/credential scope, SignedHeaders=SignedHeaders, Signature=signature

次の例は、最終的な Authorization ヘッダーを示しています。

Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7

次の点に注意してください。

  • アルゴリズムと Credential の間にカンマはありません。ただし、SignedHeadersSignature は、前の値とカンマで区切られています。

  • Credential の値はアクセスキー ID で始まり、その後にスラッシュ (/)、さらに タスク 2: 署名バージョン 4 の署名文字列を作成する で計算した認証情報スコープが続きます。シークレットアクセスキーは、署名の署名キーを取得するために使用されますが、リクエストに送られる署名情報には含まれていません。

クエリ文字列に署名情報を追加する

リクエストを作成して、署名情報を含むすべてのリクエスト値をクエリ文字列に渡すことができます。これは、AWS を正しく呼び出すために必要なすべてのものを含む単一の URL を生成するため、署名済み URL と呼ばれる場合があります。これは、Amazon S3 でよく使用されます。詳細については、『Amazon Simple Storage Service API Reference』の「クエリパラメータを使用してリクエストを認証する(AWS 署名バージョン 4)」を参照してください。

重要

すべてのパラメーターがクエリ文字列に含まれるリクエストを作成する場合、得られる URL は、すでに認証されている AWS アクションを表します。そのため、実際の認証情報を扱う場合と同じように、得られた URL は慎重に扱う必要があります。このリクエストには X-Amz-Expires パラメーターを使用して短い有効期限を指定することをお勧めします。

この方法を使用する場合、署名プロセスの最初に作成した正規クエリの一部である正規クエリ文字列に、すべてのクエリ文字列値 (署名を除く) が含まれます。

次の疑似コードは、すべてのリクエストパラメータを含むクエリ文字列の構成を示しています。

querystring = Action=action querystring += &X-Amz-Algorithm=algorithm querystring += &X-Amz-Credential= urlencode(access_key_ID + '/' + credential_scope) querystring += &X-Amz-Date=date querystring += &X-Amz-Expires=timeout interval querystring += &X-Amz-SignedHeaders=signed_headers

署名の計算 (この計算の中で他のクエリ文字列値を使用します) の後で、X-Amz-Signature パラメーターとして署名をクエリ文字列に追加します。

querystring += &X-Amz-Signature=signature

次の例は、すべてのリクエストパラメータと署名情報をクエリ文字列パラメータに追加した場合のリクエストを示しています。

https://iam.amazonaws.com?Action=ListUsers&Version=2010-05-08&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fiam%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=60&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=37ac2f4fde00b0ac9bd9eadeb459b1bbee224158d66e7ae5fcadb70b2d181d02

次の点に注意してください。

  • 署名の計算では、クエリ文字列パラメーターを低から高のコードポイント順でソートし、その値を URI エンコードする必要があります。「タスク 1: 署名バージョン 4 の正規リクエストを作成する」で、正規クエリ文字列を作成する手順を参照してください。

  • タイムアウト間隔 (X-Amz-Expires) に、リクエストする操作を実行できる最小時間を設定します。