

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

# Amazon SWF の HMAC-SHA 署名の生成
<a name="HMACAuth-swf"></a>

Amazon SWF へのリクエストはすべて認証されている必要があります。 AWS SDKsリクエストに署名し、トークンベースの認証を管理します。ただし、独自の HTTP `POST` リクエストを作成する場合は、リクエストの認証の一部として HTTP `POST Header` コンテンツの `x-amzn-authorization` 値を作成する必要があります。

ヘッダーの書式設定の詳細については、「[HTTP ヘッダーの内容](UsingJSON-swf.md#HTTPHeader)」を参照してください。 AWS バージョン 3 署名の AWS SDK for Java 実装については、[AWSSigner.java](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/auth/AWS3Signer.java) クラスを参照してください。

## リクエスト署名の作成
<a name="AuthProcess"></a>

HMAC-SHA リクエスト署名を作成する前に、 AWS 認証情報 (アクセスキー ID とシークレットキー) を取得する必要があります。

**重要**  
SHA1 または SHA256 のいずれかを使用してリクエストに署名できます。ただし、署名プロセス全体で同じ方法を使用するようにしてください。選択するメソッドは、HTTP ヘッダーの `Algorithm` 名の値と一致する必要があります。

### リクエストの署名を作成するには
<a name="swf-create-request-signature-steps"></a>

1. HTTP リクエストヘッダーの正規形式を作成します。HTTP ヘッダーの正規形式には次のものが含まれます。
   + `host`
   + `x-amz-` で始まるヘッダー要素

   含まれるヘッダーの詳細については、「[HTTP ヘッダーの内容](UsingJSON-swf.md#HTTPHeader)」を参照してください。

   1. 各ヘッダー名と値のペアについて、ヘッダー名 (ヘッダー値ではない) を小文字に変換します。

   1. カンマ区切りのヘッダー値にヘッダー名のマップを作成します。

      ```
      x-amz-example: value1
      x-amz-example: value2  =>  x-amz-example:value1,value2
      ```

      詳細については、「[RFC 2616 のセクション 4.2](http://tools.ietf.org/html/rfc2616)」を参照してください。

   1. ヘッダー名と値のペアごとに、名前と値のペアを `headerName:headerValue` 形式の文字列に変換します。`headerName` と `headerValue` の両方の先頭と末尾にある空白を削除します。コロンの前後に空白が無いようにします。

      ```
      x-amz-example1:value1,value2
      x-amz-example2:value3
      ```

   1. 最後の文字列も含め、変換された各文字列の後に改行 (`U+000A`) を挿入します。

   1. 変換された文字列のコレクションをヘッダー名ごとに並べ替えます。

1. 以下の項目を含む署名文字列の値を作成します。
   + `1` 行目: HTTP メソッド (`POST`)、その後に改行が続きます。
   + `2` 行目: リクエスト URI (`/`)、その後に改行が続きます。
   + `3` 行目: 空の文字列、その後に改行が続きます。
**注記**  
通常、クエリ文字列はここに表示されますが、Amazon SWF ではクエリ文字列を使用しません。
   + `4–n` 行目: ステップ 1 で作成した正規化されたリクエストヘッダーを表す文字列。改行が続きます。この改行はヘッダーと HTTP リクエストの本文の間に空白行を作成します。詳細については、「[RFC 2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html)」を参照してください。
   + リクエストの本文、改行は*続きません*。

1. 署名文字列の値の SHA256 または SHA1 ダイジェストを計算します。プロセス全体で同じ SHA メソッドを使用します。

1. 前のステップで得られた値の SHA256 または SHA1 ダイジェスト (使用した方法によって異なります) と、 API アクションを使用して Security Token Service からの一時的なシークレットアクセスキーを使用して、HMAC-SHA をコンピューティングおよび Base64-encodeします。 SHA1 AWS `[GetSessionToken](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)` 
**注記**  
Amazon SWF では、Base64 エンコードされた HMAC-SHA 値の末尾に等号 (`=`) が必要です。Base64 エンコードルーチンに等号が追加されていない場合は、値の最後に 1 を追加します。

   Amazon SWF およびその他の AWS サービスで一時的なセキュリティ認証情報を使用する方法の詳細については、IAM *ユーザーガイド*の[AWS 「IAM と連携するサービス](https://docs.aws.amazon.com/STS/latest/UsingSTS/UsingTokens.html)」を参照してください。

1. 結果の値を、Amazon SWF への HTTP リクエストの `x-amzn-authorization` ヘッダーの `Signature` 名の値として配置します。

1. Amazon SWF はリクエストを認証し、指定されたオペレーションを実行します。