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

タスク 3: AWS 署名バージョン 4 の署名を計算する

署名を計算する前に、AWS のシークレットアクセスキーから署名キーを取得します。取得した署名キーは日付、サービス、およびリージョンに固有であるため、かなりの保護が得られます。リクエストに署名するためにはシークレットアクセスキーを使用しません。次に、署名キーと「タスク 2: 署名バージョン 4 の署名文字列を作成する」で作成した署名文字列を、キー付きハッシュ関数の入力として使用します。キー付きハッシュ関数から得られた 16 進エンコード値が署名です。

署名バージョン 4 では、署名文字列をエンコードするための特定の文字エンコードを使用する必要はありません。ただし、一部の AWS サービスでは、特定のエンコードが必要な場合があります。詳細については、そのサービスのドキュメントを参照してください。

署名を計算するには

  1. 署名キーを取得します。これを行うには、シークレットアクセスキーを使用し、一連のハッシュベースのメッセージ認証コード (HMAC) を作成します。これは次の擬似コードで示されます。ここで HMAC(key, data) は、出力をバイナリ形式で返す HMAC-SHA256 関数を表しています。各ハッシュ関数の結果が次のハッシュ関数の入力になります。

    署名キーを取得するための擬似コード

    kSecret = your secret access key kDate = HMAC("AWS4" + kSecret, Date) kRegion = HMAC(kDate, Region) kService = HMAC(kRegion, Service) kSigning = HMAC(kService, "aws4_request")

    ハッシュプロセスで使用する日付は、形式 YYYYMMDD (例: 20150830) であり、時刻は含まれません。

    HMAC パラメーターは、必ず、使用するプログラミング言語の正しい順番で指定してください。この例では、キーが最初のパラメーターで、データ (メッセージ) が 2 番目のパラメーターですが、使用する関数によっては、キーとデータを違う順番で指定する可能性があります。

    キーを取得するには、ダイジェスト (バイナリ形式) を使用する必要があります。ほとんどの言語には、通常ダイジェストと呼ばれるバイナリ形式のハッシュ、または hexdigest と呼ばれる 16 進数でエンコードされたハッシュを計算する関数があります。キーを取得するには、バイナリ形式のダイジェストを使用する必要があります。

    次の例は、署名キーを取得するための入力とその結果の出力を示しています (kSecret = wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY)。

    例では、タスク 1 およびタスク 2 のリクエスト(2015 年 8 月30 日の us-east-1 リージョンでの IAM へのリクエスト) と同じパラメーターを使用します。

    入力例

    HMAC(HMAC(HMAC(HMAC("AWS4" + kSecret,"20150830"),"us-east-1"),"iam"),"aws4_request")

    次の例は、この一連の HMAC ハッシュ操作から得られた署名キーを示しています。これは、バイナリ形式の署名キー内の各バイトを 16 進数で示しています。

    署名キー例

    c4afb1cc5771d871763a393e44b703571b55cc28424d1a5e86da6ed3c154a4b9

    さまざまなプログラミング言語の署名キーを取得する方法の詳細については、署名バージョン 4 の署名キーを取得する方法の例を参照してください。

  2. 署名を計算します。そのために、キー付きハッシュ関数への入力として、取得した署名キーと署名文字列を使用します。署名を計算したら、バイナリ値を 16 進数表現に変換します。

    次の擬似コードは、署名の計算方法を示しています。

    signature = HexEncode(HMAC(derived signing key, string to sign))

    注記

    HMAC パラメーターは、必ず、使用するプログラミング言語の正しい順番で指定してください。この例では、キーが最初のパラメーターで、データ (メッセージ) が 2 番目のパラメーターですが、使用する関数によっては、キーとデータを違う順番で指定する可能性があります。

    次の例は、タスク 2 と同じ署名キーと署名文字列を使用した場合に作成される署名を示しています。

    署名例

    5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7