View a markdown version of this page

末尾ヘッダーの署名計算 (チャンクアップロード) (AWS 署名バージョン 4) - Amazon Simple Storage Service

末尾ヘッダーの署名計算 (チャンクアップロード) (AWS 署名バージョン 4)

Authorization ヘッダーを使用してリクエストを認証する場合、ペイロードをチャンクでアップロードすることもできます。オブジェクトのデータをチャンクで送信する場合、末尾ヘッダーを含めることもできます。(詳しくは、Authorization ヘッダーの署名計算: 複数チャンクでのペイロードの転送 (チャンクアップロード) (AWS 署名バージョン 4) を参照してください)。このセクションでは、複数のチャンクアップロードの最後に末尾ヘッダーを含めるために必要な手順について説明します。

重要

末尾ヘッダーを含める場合は、最初のヘッダーに以下を送信する必要があります。

末尾ヘッダーは、チャンクがアップロードされた後にのみ送信されます。それ以前のチャンクは通常どおり送信され、前のセクションで説明したように署名されます。これには、ペイロードが 0 バイトの最後のチャンクの送信が含まれます。末尾ヘッダーは独自のチャンクとして含まれ、ペイロードが 0 バイトの最後のチャンクの後に送信されます。例えば、データが 100 KB のチャンクで終了した場合、以下を送信します。

  • 以前のデータチャンク

  • オブジェクトの最後の 100 KB のチャンク

  • オブジェクトの終了を示す 0 バイトのチャンク

  • 末尾ヘッダーチャンク

例: 署名計算の確認

このセクションの例を参考にして、コード内の署名計算を確認できます。例を確認する前に、次の点に注意してください。

  • これらの例の署名計算では、次のサンプルのセキュリティ認証情報を使用します。

    パラメータ
    AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
    AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  • すべての例では、リクエストのタイムスタンプとして 20130524T000000Z (Fri, 24 May 2013 00:00:00 GMT) を使用します。

  • すべての例では、バケット名として examplebucket を使用します。

  • バケットは米国東部 (バージニア北部) リージョンにあると見なされ、認証情報の ScopeSigning Key の計算ではリージョン指定子として us-east-1 が使用されます。詳細については、「Amazon Web Services General Reference」(Amazon ウェブサービス全般のリファレンス) の「Regions and endpoints」(リージョンとエンドポイント) をご参照ください。

  • パススタイルまたは仮想ホスト形式のリクエストのいずれかを使用できます。次の例では、仮想ホスト形式のリクエストを使用します。次に例を示します。

    https://examplebucket.s3.amazonaws.com/photos/photo1.jpg

    詳細については、「Amazon Simple Storage Service ユーザーガイド」の「バケットの仮想ホスティング」を参照してください。

次の例では、オブジェクトをアップロードする PUT リクエストを送信します。署名の計算では、次のことを前提としています。

  • 65 KB のテキストファイルをアップロードしようとしています。ファイルの内容は文字「a」で構成される 1 文字の文字列です。

  • チャンクサイズは 64 KB です。その結果、ペイロードは 3 つのチャンク (64 KB、1 KB、およびチャンクデータが 0 バイトの最後のチャンク) に分けてアップロードされます。

  • 生成されるオブジェクトのキー名は chunkObject.txt です。

  • x-amz-storage-class リクエストヘッダーを追加して、ストレージクラスとして REDUCED_REDUNDANCY をリクエストしています。

  • 転送には、末尾ヘッダーとして CRC32C チェックサム値が含まれています。

API アクションの詳細については、「PutObject」を参照してください。一般的なリクエストの構文は次のとおりです。

PUT /examplebucket/chunkObject.txt HTTP/1.1 Host: s3.amazonaws.com x-amz-date: 20130524T000000Z x-amz-storage-class: REDUCED_REDUNDANCY Authorization: SignatureToBeCalculated x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER Content-Encoding: aws-chunked x-amz-decoded-content-length: 66560 x-amz-trailer: x-amz-checksum-crc32c Content-Length: 66946 <Payload>

次の手順は、署名の計算を示しています。

  1. シード署名 – 署名する文字列を作成する
    1. CanonicalRequest

      PUT /examplebucket/chunkObject.txt content-encoding:aws-chunked host:s3.amazonaws.com x-amz-content-sha256:STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER x-amz-date:20130524T000000Z x-amz-decoded-content-length:66560 x-amz-storage-class:REDUCED_REDUNDANCY x-amz-trailer:x-amz-checksum-crc32c content-encoding;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class;x-amz-trailer STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER

      リクエストにクエリパラメータがないため、正規リクエストの 3 行目は空です。最後の行は、ハッシュされたペイロードの値として提供される定数文字列で、x-amz-content-sha256 header の値と同じである必要があります。

    2. StringToSign

      AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 44d48b8c2f70eae815a0198cc73d7a546a73a93359c070abbaa5e6c7de112559

      注記

      署名する文字列の各行については、シード署名の計算を説明する図を参照してください。

  2. SigningKey

    signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request")

  3. シード署名

    106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e

  4. Authorization ヘッダー

    その結果得られる Authorization ヘッダーは以下のようになります。

    AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=content-encoding;content-length;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class,Signature=106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e

  5. チャンク 1: (65536 バイト、文字「a」の値 97)
    1. 署名するチャンク文字列。

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 bf718b6f653bebc184e1479f1935b8da974d701b893afcf49e701f3e2f9f9c5a

      注記

      署名する文字列の各行の詳細については、署名する文字列のさまざまなコンポーネントを示す前のトピック (シード署名の計算) の図を参照してください。例えば、最後の 3 行は以下で構成されます。

      • previous-signature

      • hash("")

      • hash(current-chunk-data)

    2. チャンク署名。

      b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2
    3. 送信されたチャンクデータ。

      10000;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 <65536-bytes>
  6. チャンク 2: (1024 バイト、文字「a」の値 97)
    1. 署名するチャンク文字列。

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 2edc986847e209b4016e141a6dc8716d3207350f416969382d431539bf292e4a
    2. チャンク署名。

      1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7
    3. 送信されたチャンクデータ。

      400;chunk-signature=1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 <1024-bytes>
  7. チャンク 3: (0 バイトのデータ)
    1. 署名するチャンク文字列。

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    2. チャンク署名。

      2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
    3. 送信されたチャンクデータ。

      0;chunk-signature=2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
  8. チャンク 4: 末尾ヘッダー
    1. 署名するトレーラーチャンク文字列。

      AWS4-HMAC-SHA256-TRAILER 20130524T000000Z 20130524/us-east-1/s3/aws4_request 2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992 1e376db7e1a34a8ef1c4bcee131a2d60a1cb62503747488624e10995f448d774
      注記

      最後の 2 行は、previous-signature (0 バイトのデータチャンク署名) と、hash(trailing-checksum-header-name:base64-encoded-trailing-checksum-value\n) です。

      ハッシュは空白なしで次のように計算されます。

      • 末尾チェックサムヘッダー名

      • コロン (:)

      • base64 でエンコードされた末尾のチェックサム値

      • 改行文字 (\n)。

      この例では、crc32c ハッシュアルゴリズムを使用し、base64 でエンコードされたチェックサム値 sOO8/Q== を使用して、次のように計算を表すことができます。hash('x-amz-checksum-crc32c:sOO8/Q==\n')

    2. チャンク署名。

      d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435
    3. 送信されたチャンクデータ。

      x-amz-checksum-crc32c:sOO8/Q== x-amz-trailer-signature:d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435