WSセキュリティを利用せずに SOAP リクエストを処理する方法

本セクションでは、WSセキュリティを利用せずに SOAP リクエストを認証する方法について説明しています。以下のトピックでは基本的な要件および必要な認証情報、SOAP リクエストのどの部分に情報を設定すべきかについて記載しています。

基本的な要件

WSセキュリティを利用せずに SOAP リクエストを処理する場合、

  • SOAP1.1 または SOAP1.2 をご利用いただけます。

  • リクエストを送信する際は、HTTPS をご使用いただく必要があります。

必要な認証情報

WSセキュリティを利用しない場合の SOAP リクエストの認証は、AWS アクセスキー識別子と HMAC-SHA256 を使用して行われます。リクエストには、以下に記載されたパラメータを含めていただく必要があります。

パラメータ説明

AWSAccessKeyId

AWS アクセスキー ID. 詳細については、AWSアクセスキー識別子をご参照ください。

Timestamp

タイムスタンプ。このパラメータは、Signature パラメータをリクエストに含める場合は必須となります。含めていない場合はオプションとなります。こちらについても初期値は存在しません。リクエストに含めるタイムスタンプは、 dateTime オブジェクトである必要があり、すなわち、date オブジェクトおよび time オブジェクトの全ての情報を含めたもの(年月日・時分秒)となります(こちらに関するより詳細な情報については、http://www.w3.org/TR/NOTE-datetimeをご参照ください)。この値は ISO 8601 で定義された国際標準時(GMT)での表示形式となります: YYYY-MM-DDThh:mm:ssZ (T および Z はリテラル値)

[重要]重要

.NET を使用されている場合、タイムスタンプの処理プロセスの違いにより不具合が発生する可能性がるため、過度に厳密なタイムスタンプ情報を送信しないようご注意ください。問題の発生を避けるためには、ミリ秒単位以上の厳密性を持たない dateTime オブジェクトの設定をされることを推奨します。

Signature

HMAC-SHA256 署名は、AWS 秘密キーを元に、Action および Timestamp パラメータの連結により計算されます(HMAC 署名の詳細については、REST リクエストにおける HMAC-SHA 認証をご参照ください)。例えば、キューを作成するためのリクエストでは、 Signature 要素の値は以下のような HMAC-SHA256 ダイジェスト文字列となります: ItemLookup2009-01-06T00:00:00Z

署名の計算方法

  1. 標記順で Action および Timestamp リクエストのパラメータ値を連結します。

    ここで作成された文字列は、署名を生成する際に使用される文字列となります。

  2. 前のステップで作成した文字列と、お持ちの秘密キーを元に、RFC2104 準拠の HMAC-SHA256 署名を計算します。

  3. 結果の値を base64 に変換します。

  4. 最終的な値を SOAP リクエストのSignatureパラメータに使用します。

リクエスト内の認証情報の場所

バージョン 2009-10-01 においては、以下に例示されているように、認証情報は SOAP ヘッダ内の要素としなければなりません(以下のネームスペースをご利用ください: http://security.amazonaws.com/doc/2007-01-01/)。

<?xml version="1.0"?>
<soap:Envelope
   xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
   soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header
   xmlns:aws="http://security.amazonaws.com/doc/2007-01-01/">
   <aws:AWSAccessKeyId>1D9FVRAYCP1VJS767E02EXAMPLE</aws:AWSAccessKeyId>
   <aws:Timestamp>2008-02-10T23:59:59Z</aws:Timestamp>
   <aws:Signature>SZf1CHmQnrZbsrC13hCZS061ywsEXAMPLE</aws:Signature>
</soap:Header>
...
</soap:Envelope>