View a markdown version of this page

驗證請求:使用授權標頭AWS (簽章第 4 版) - Amazon Simple Storage Service

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

驗證請求:使用授權標頭AWS (簽章第 4 版)

概觀

使用 HTTP Authorization標頭是提供身分驗證資訊的最常見方法。除了使用查詢參數簽署的 POST 請求和請求之外,所有 Amazon S3 操作都會使用Authorization請求標頭來提供身分驗證資訊。

以下是 Authorization 標頭值的範例。為了便於閱讀,向此範例新增了分行符號:

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

下表說明上述範例中Authorization標頭值的各種元件:

元件 說明
AWS4-HMAC-SHA256

用於計算簽章的演算法。當您使用 AWS Signature 第 4 版進行身分驗證時,必須提供此值。

字串指定 AWS Signature 第 4 版 (AWS4) 和簽署演算法 (HMAC-SHA256)。

Credential

您的存取金鑰 ID 和範圍資訊,包括用於計算簽章的日期、區域和服務。

此字串的格式如下:

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

其中:

  • <date> 值是使用 YYYYMMDD 格式指定。

  • <aws-service> 值是將請求傳送至 Amazon S3 s3時。

SignedHeaders

用於計算 Signature 的請求標頭清單 (以分號分隔)。此清單僅包含標頭名稱,且標頭名稱必須為小寫。例如:

host;range;x-amz-date
Signature 256 位元簽章以 64 個小寫十六進位字元表示。例如:
fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
請注意,簽章計算因您選擇傳輸承載的選項而異。

簽章計算會根據您選擇傳輸請求承載的方法而有所不同。S3 支援下列選項:

  • 在單一區塊中傳輸承載 – 在此情況下,您有下列簽章計算選項:

    • 已簽章的承載選項 – 您可以選擇性地計算整個承載檢查總和,並將其包含在簽章計算中。這可提高安全性,但您需要讀取承載兩次或將其緩衝在記憶體中。

      例如,若要上傳檔案,您需要先讀取檔案,以計算用於簽章計算的承載雜湊,並在建立請求時再次進行傳輸。對於較小的承載,此方法可能較適合。不過,對於大型檔案,讀取檔案兩次可能會效率不佳,因此您可能想要改為以區塊形式上傳資料。

      我們建議您包含承載檢查總和,以提高安全性。

    • 未簽章的承載選項 – 請勿在簽章計算中包含承載檢查總和。

    如需計算簽章和建構授權標頭值的step-by-step說明,請參閱 授權標頭的簽章計算:在單一區塊中傳輸承載AWS (簽章第 4 版)

  • 多個區塊中傳輸承載 (區塊上傳) – 在此情況下,您會在區塊中傳輸承載。無論承載大小為何,您都可以以區塊傳輸承載。

    您可以將承載分解為區塊。這些可以是固定或可變大小的區塊。透過在區塊中上傳資料,您可以避免讀取整個承載來計算簽章。相反地,對於第一個區塊,您可以計算僅使用請求標頭的種子簽章。第二個區塊包含第一個區塊的簽章,而每個後續區塊包含其前面區塊的簽章。在上傳結束時,您會傳送包含 0 個位元組資料的最終區塊,其中包含承載最後一個區塊的簽章。如需詳細資訊,請參閱授權標頭的簽章計算:以多個區塊傳輸承載 (區塊上傳)AWS (簽章版本 4)

簽署請求時,您可以使用 AWS Signature 第 4 版或 AWS Signature 第 4A 版。兩者之間的主要差異取決於簽章的計算方式。使用 AWS 第 4A 版簽署程序,簽章不包含區域特定的資訊,而是使用 AWS4-ECDSA-P256-SHA256 演算法計算。

除了這些選項之外,您還可以選擇在請求中包含預告片。若要在請求中包含尾隨,您需要透過將 x-amz-content-sha256設定為適當的值,在 標頭中指定 。如果您使用的是結尾標頭,則必須在標頭x-amz-trailer中包含 ,並在逗號分隔清單中將結尾標頭名稱指定為字串。所有結尾標頭都會在最後一個區塊之後寫入。如果您要在多個區塊中上傳資料,您必須先傳送含有 0 個位元組資料的最終區塊,再傳送結尾標頭。

當您傳送請求時,您必須透過使用下列其中一個值新增 x-amz-content-sha256標頭,來告知 Amazon S3 您在簽章計算中選擇的上述選項:

標頭值 說明

實際承載檢查總和值

此值是物件的實際檢查總和,只有在您以單一區塊上傳資料時,才能這麼做。

UNSIGNED-PAYLOAD

當您將物件上傳為單一未簽署區塊時,請使用此選項。

STREAMING-UNSIGNED-PAYLOAD-TRAILER

透過多個區塊傳送未簽章的承載時,請使用此選項。在這種情況下,在上傳區塊之後,您也會有一個結尾標頭。

STREAMING-AWS4-HMAC-SHA256-PAYLOAD

在透過多個區塊傳送承載時使用此值,並使用 簽署區塊AWS4-HMAC-SHA256。這會產生 SigV4 簽章。

STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER

在透過多個區塊傳送承載時使用此值,並使用 簽署區塊AWS4-HMAC-SHA256。這會產生 SigV4 簽章。此外,區塊的摘要會納入為結尾標頭。

STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD

在透過多個區塊傳送承載時使用此值,並使用 簽署區塊AWS4-ECDSA-P256-SHA256。這會產生 SigV4A 簽章。

STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD-TRAILER

在透過多個區塊傳送承載時使用此值,並使用 簽署區塊AWS4-ECDSA-P256-SHA256。這會產生 SigV4A 簽章。此外,區塊的摘要會納入為結尾標頭。

收到請求時,Amazon S3 會使用 Authorization標頭和 date標頭中的資訊,重新建立要簽署的字串。然後,它會使用與簽章相符的身分驗證服務進行驗證。您可以使用 HTTP Datex-amz-date標頭來指定請求日期。如果兩個標頭都存在,x-amz-date則 優先。

如果簽章相符,Amazon S3 會處理您的請求;否則,您的請求將會失敗。

如需詳細資訊,請參閱下列主題:

授權標頭的簽章計算:在單一區塊中傳輸承載AWS (簽章第 4 版)

授權標頭的簽章計算:以多個區塊傳輸承載 (區塊上傳)AWS (簽章版本 4)

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