View a markdown version of this page

驗證請求AWS (簽章第 4 版) - Amazon Simple Storage Service

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

驗證請求AWS (簽章第 4 版)

與 Amazon S3 的每次互動,可以經過驗證身分或是匿名進行。本節說明使用 AWS Signature 第 4 版演算法請求身分驗證。

注意

如果您使用 AWS SDKs(請參閱範例程式碼和程式庫) 來傳送請求,則不需要閱讀本節,因為 SDK 用戶端會使用您提供的存取金鑰來驗證您的請求。除非您有充分理由不這麼做,否則您應該一律使用 AWS SDKs。在支援兩種簽章版本的區域中,您可以請求 AWS SDKs使用特定的簽章版本。如需詳細資訊,請參閱使用 AWS SDKs 傳送已驗證的請求。只有在自訂用戶端中實作 AWS Signature 第 4 版演算法時,才需要閱讀本節。

使用 AWS Signature 第 4 版進行身分驗證可提供以下部分或全部內容,具體取決於您選擇簽署請求的方式:

  • 驗證請求者的身分 – 驗證的請求需要您使用存取金鑰 (存取金鑰 ID、私密存取金鑰) 建立的簽章。如需有關取得存取金鑰的資訊,請參閱《》中的了解和取得您的安全登入資料AWS 一般參考。如果您使用暫時安全憑證,則簽章計算還需要安全字符。如需詳細資訊,請參閱《 IAM 使用者指南》中的請求臨時安全憑證

  • 傳輸中資料保護 – 為了防止在傳輸中竄改請求,您可以使用一些請求元素來計算請求簽章。收到請求時,Amazon S3 會使用相同的請求元素來計算簽章。如果 Amazon S3 收到的任何請求元件不符合用於計算簽章的元件,Amazon S3 將拒絕請求。

  • 避免重複使用請求的已簽署部分 – 請求的已簽署部分 (使用 AWS Signatures) 在請求中的時間戳記的 15 分鐘內有效。有權存取已簽署請求的未經授權方可以修改請求的未簽署部分,而不會影響請求在 15 分鐘內的有效性。因此,我們建議您簽署請求標頭和內文、向 Amazon S3 提出 HTTPS 請求,以及使用 AWS 政策中的 s3:x-amz-content-sha256 條件金鑰 (請參閱 Amazon S3 Signature 第 4 版身分驗證特定政策金鑰) 要求使用者簽署 Amazon S3 請求內文,以最大化保護。

注意

Amazon S3 支援 Signature 第 4 版,這是一種通訊協定,用於驗證對 AWS 服務的傳入 API 請求 AWS 區域。目前,在 2014 年 1 月 30 日之前 AWS 區域 建立的 將繼續支援先前的通訊協定 Signature 第 2 版。2014 年 1 月 30 日之後的任何新區域將僅支援 Signature 第 4 版,因此所有對這些區域的請求都必須使用 Signature 第 4 版提出。如需 AWS Signature 第 2 版的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的簽署和驗證 REST 請求

身分驗證方法

您可以使用下列其中一種方法來表達身分驗證資訊:

  • HTTP 授權標頭 – 使用 HTTP Authorization標頭是驗證 Amazon S3 請求最常見的方法。所有 Amazon S3 REST 操作 (使用 POST 請求的瀏覽器型上傳除外) 都需要此標頭。如需Authorization標頭值以及如何計算簽章和相關選項的詳細資訊,請參閱 驗證請求:使用授權標頭AWS (簽章第 4 版)

  • 查詢字串參數 – 您可以使用查詢字串完全在 URL 中表達請求。在此情況下,您可以使用查詢參數來提供請求資訊,包括驗證資訊。由於請求簽章是 URL 的一部分,因此此類型 URL 通常稱為預先簽章的 URL。您可以使用預先簽章URLs,以 HTML 內嵌可點選連結,有效期間最長可達七天。如需詳細資訊,請參閱驗證請求:使用查詢參數AWS (簽章第 4 版)

Amazon S3 也支援使用 HTTP POST 請求的瀏覽器型上傳。使用 HTTP POST 請求,您可以直接從瀏覽器將內容上傳至 Amazon S3。如需有關驗證 POST 請求的資訊,請參閱 使用 POST 的瀏覽器型上傳AWS (簽章第 4 版)

簽署請求簡介

您在請求中傳送的驗證資訊必須包含簽章。若要計算簽章,請先串連選取請求元素以形成字串,稱為要簽署的字串。然後,您可以使用簽署金鑰來計算要簽署的字串的雜湊訊息驗證碼 (HMAC)。

在 AWS Signature 第 4 版中,您不使用您的私密存取金鑰來簽署請求。相反,首先使用私密存取金鑰來衍生簽署金鑰。衍生的簽署金鑰根據日期、服務和區域而特定。如需如何以不同程式設計語言衍生簽署金鑰的詳細資訊,請參閱如何衍生 Signature 第 4 版簽署金鑰的範例

下圖說明計算簽章的一般程序。

顯示使用 HMAC-SHA256 建立 StringToSign、簽署金鑰衍生和簽章運算的三個步驟程序。

要簽署的字串取決於請求類型。例如,當您使用 HTTP 授權標頭或查詢參數進行驗證時,請使用不同的請求元素組合來建立要簽署的字串。對於 HTTP POST 請求,請求中的 POST 政策是您簽署的字串。如需有關要簽署的運算字串的詳細資訊,請遵循本節結尾提供的連結。

對於簽署金鑰,圖表顯示了一系列的計算,然後將每一步驟的結果饋送到下一個步驟。最後的步驟是簽署金鑰。

收到已驗證的請求時,Amazon S3 伺服器會使用請求中包含的身分驗證資訊重新建立簽章。如果簽章相符,Amazon S3 會處理您的請求;否則,請求會遭到拒絕。

如需驗證請求的詳細資訊,請參閱下列主題: