本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS API 請求的簽章版本 4
重要
如果您使用 AWS SDK (請參閱範例程式碼和程式庫
在支援多個簽章版本的區域中,手動簽署要求意味著您必須指定要使用的簽章版本。當您向多區域存取點提供請求時,SDK 和 CLI 會自動切換為使用第 4A 版簽署程序,而不需其他組態。
您在請求中傳送的身分驗證資訊必須包含簽章。 AWS Signature 第 4 版 (SigV4) 是將身分驗證資訊新增至 AWS API 請求的 AWS 簽署通訊協定。
您不會使用私密存取金鑰來簽署請求。相反,您使用 SigV4 簽署程序。簽署請求涉及:
-
根據請求詳細資訊來建立正式請求。
-
使用您的 AWS 登入資料計算簽章。
-
將此簽章作為授權標頭新增至請求。
AWS 然後複寫此程序,並驗證簽章、授予或拒絕相應存取。
對稱 SigV4 需要您在特定日期,將範圍限定為單一 AWS 服務的金鑰衍生到單一 AWS 區域中。這使得每個區域的金鑰和計算簽章不同,意味著您必須知道簽章的目的地區域。
非對稱簽章程序第 4 版 (SigV4a) 是支援使用新演算法進行簽署的延伸版,並產生可在多個 AWS 區域中驗證的個別簽章。使用 SigV4a,您可以簽署多個區域的請求,並在區域之間進行無縫路由和容錯移轉。當您使用 AWS SDK 或 AWS CLI 來叫用需要多區域簽署的功能時,簽章類型會自動變更為使用 SigV4a。如需詳細資訊,請參閱 如何運作 AWS SigV4a 。
如何運作 AWS SigV4
下列步驟說明使用 SigV4 來計算簽章的一般程序:
-
要簽署的字串取決於請求類型。例如,當您使用 HTTP 授權標頭或查詢參數進行驗證時,請使用請求元素組合來建立要簽署的字串。對於 HTTP POST 請求,請求中的
POST
政策是您簽署的字串。 -
簽署金鑰是一系列計算,每個步驟的結果會饋送至下一個步驟。最後的步驟是簽署金鑰。
-
當 AWS 服務收到已驗證的請求時,它會使用請求中包含的驗證資訊重新建立簽章。如果簽章相符,則服務會處理請求。否則,它會拒絕請求。
如需詳細資訊,請參閱AWS API 請求簽章的元素。
如何運作 AWS SigV4a
SigV4a 使用基於公有/私有金鑰密碼的非對稱簽章。SigV4a 會經歷與 SigV4 類似的範圍憑證衍生程序,但 Sigv4a 使用相同的金鑰來簽署所有請求,而不需要根據日期、服務和區域衍生不同的簽署金鑰。橢圓曲線數位簽章演算法
系統使用非對稱密碼編譯來驗證多區域簽章,因此 AWS 僅需要存放您的公有金鑰。公有金鑰不是秘密,無法用於簽署請求。多區域 API 請求需要非對稱簽章,例如使用 Amazon S3 多區域存取點。
下列步驟說明使用 SigV4a 運算簽章的一般程序:
-
要簽署的字串取決於請求類型。例如,當您使用 HTTP 授權標頭或查詢參數進行驗證時,請使用請求元素組合來建立要簽署的字串。對於 HTTP POST 請求,請求中的
POST
政策是您簽署的字串。 -
簽署金鑰是透過一系列計算衍生自 AWS 私密存取金鑰,每個步驟的結果會饋送至下一個步驟。最後一個步驟會產生金鑰對。
-
當 AWS 服務收到使用 Sigv4a 簽署的請求時, 只會使用金鑰對的公有半數來 AWS 驗證簽章。如果簽章有效,則會驗證請求,並且服務會處理請求。會拒絕具有無效簽章的請求。
如需有關多區域 API 請求的 SigV4a 詳細資訊,請參閱 GitHub 上的 sigv4a-signing-examples
簽署請求的時機
當您編寫傳送 API 請求的自訂程式碼時 AWS,您必須包含簽署請求的程式碼。您可能會因為以下原因編寫自訂程式碼:
-
您使用的程式設計語言沒有 AWS 軟體開發套件。
-
您需要完全控制傳送請求的方式 AWS。
當 API 使用 AWS SigV4 請求驗證存取時 AWS CLI , AWS SDKs會使用您提供的存取金鑰來驗證您的請求。如需使用 AWS SDKs和 驗證 的詳細資訊 AWS CLI,請參閱 其他資源。
為什麼要簽署請求
簽署程序有助於以下列方式保護請求的安全:
-
驗證請求者的身分
經過驗證的請求需要您使用存取金鑰 (存取金鑰 ID、私密存取金鑰) 建立的簽章。如果您使用暫時安全憑證,則簽章計算還需要安全字符。如需詳細資訊,請參閱 AWS 安全憑證程式設計存取權。
-
保護傳輸中的資料
為了防止傳送中的請求遭到竄改,有些請求元素可用來計算請求的雜湊 (摘要),而產生的雜湊值會包含在請求中。當 AWS 服務 收到請求時,它會使用相同的資訊來計算雜湊,並將其與請求中的雜湊值進行比對。如果值不相符, 會 AWS 拒絕請求。
-
抵禦潛在重播攻擊的侵害
在大多數情況下,請求必須在請求中時間戳記的五分鐘 AWS 內到達。否則, 會 AWS 拒絕請求。
AWS SigV4 可以在 HTTP 授權標頭中表達,或在 URL 中表達為查詢字串。如需詳細資訊,請參閱身分驗證方法。
其他資源
-
如需不同服務的 SigV4 簽署程序的詳細資訊,請參閱 請求簽章範例。
-
若要設定 CLI AWS 的程式設計存取憑證,請參閱 AWS 命令列界面使用者指南中的身分驗證和存取憑證。
-
AWS SDKs 包含 GitHub 上的原始碼,用於簽署 AWS API 請求。如需程式碼範例,請參閱 AWS 範例儲存庫中的專案範例。
-
AWS SDK for .NET – AWS4Signer.cs
-
AWS SDK for C++ – AWSAuthV4Signer.cpp
-
適用於 Go 的 AWS SDK – sigv4.go
-
AWS SDK for Java – BaseAws4Signer.java
-
AWS SDK for JavaScript – signature-v4
-
AWS SDK for PHP – SignatureV4.php
-
AWS SDK for Python (Boto) – https://signers.py
-
AWS SDK for Ruby – signer.rb
-