View a markdown version of this page

結尾標頭的簽章計算 (區塊上傳)AWS (簽章第 4 版) - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

結尾標頭的簽章計算 (區塊上傳)AWS (簽章第 4 版)

使用 Authorization標頭驗證請求時,您也可以上傳區塊中的承載。當您以區塊傳送物件的資料時,您也可以選擇包含結尾標頭。(如需詳細資訊,請參閱 授權標頭的簽章計算:以多個區塊傳輸承載 (區塊上傳)AWS (簽章版本 4)。) 本節說明當您要在多個區塊上傳結束時包含結尾標頭時,需要採取的步驟。

重要

當您包含結尾標頭時,您必須在初始標頭中傳送下列項目:

  • 您必須x-amz-content-sha256將 設定為適當的值,表示將包含追蹤器。若要查看 可接受的值x-amz-content-sha256,請參閱 驗證請求:使用授權標頭AWS (簽章第 4 版)

  • 您必須設定 x-amz-trailer以指出您的 包含在結尾標頭中的內容。

追蹤標頭只會在區塊上傳之後傳送。先前的區塊會正常傳送並簽署,如先前章節所述,包括傳送承載為 0 位元組的最終區塊。尾端標頭會包含在自己的區塊中,並在承載為 0 位元組的最終區塊之後傳送。例如,如果您的資料以 100 KB 區塊結尾,您可以傳送下列項目:

  • 先前的資料區塊

  • 物件的最終區塊為 100 KB

  • 0 個位元組區塊,表示物件的結尾

  • 追蹤標頭區塊

範例:檢查簽章計算

您可以使用本節中的範例做為參考,以檢查程式碼中的簽章計算。檢閱範例之前,請注意下列事項:

  • 這些範例中的簽章計算使用以下範例安全登入資料。

    參數 Value
    AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
    AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  • 所有範例都使用請求時間戳記 20130524T000000Z (Fri, 24 May 2013 00:00:00 GMT)。

  • 所有範例都會使用 examplebucket做為儲存貯體名稱。

  • 儲存貯體假設位於美國東部 (維吉尼亞北部) 區域,而登入資料ScopeSigning Key計算會使用 us-east-1做為區域指標。 如需詳細資訊,請參閱《Amazon Web Services 一般參考》中的區域和端點

  • 您可以使用路徑樣式或虛擬託管樣式請求。下列範例使用虛擬託管樣式請求,例如:

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

    如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的儲存貯體虛擬託管

下列範例會傳送上傳物件的PUT請求。簽章計算假設如下:

  • 您正在上傳 65 KB 文字檔案,而檔案內容是由字母 'a' 組成的單字元字串。

  • 區塊大小為 64 KB。因此,承載會以三個區塊上傳: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

      在正式請求中,第三行是空的,因為請求中沒有查詢參數。最後一行是做為雜湊承載值提供的常數字串,應該與 的值相同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. 授權標頭

    產生的授權標頭如下所示:

    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 位元組,值 97 表示字母 'a')
    1. 要簽署的區塊字串:

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

      注意

      如需有關要簽署之字串中每一行的資訊,請參閱上一個主題 (計算種子簽章) 中的圖表,其中顯示要簽署之字串的各種元件。例如,最後三行包含下列項目:

      • 上一個簽章

      • hash("")

      • hash(current-chunk-data)

    2. 區塊簽章:

      b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2
    3. 已傳送的區塊資料:

      10000;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 <65536-bytes>
  6. 區塊 2:(1024 個位元組,值 97 表示字母 'a')
    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
      注意

      最後兩行是 previous-signature(0 位元組的資料區塊簽章)、 hash(trailing-checksum-header-namebase64-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