簽署 AWS API 要求 - AWS Identity and Access Management

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

簽署 AWS API 要求

重要

如果您使用 AWS SDK (請參閱範例程式碼和程式庫) 或 AWS 命令列 (CLI) 工具將 API 要求傳送至 AWS,您可以略過此區段,因為 SDK 和 CLI 用戶端會使用您提供的存取金鑰來驗證您的要求。除非有充分的理由不這樣做,否則建議您始終使用 SDK 或 CLI。

在支援多個簽章版本的區域中,手動簽署要求意味著您必須指定要使用的簽章版本。當您向多區域存取點提供請求時,SDK 和 CLI 會自動切換為使用第 4A 版簽署程序,而不需其他組態。

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

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

簽名版本 4 是 AWS 簽名協議。 AWS 也支援擴充功能「簽名版本 4A」,支援多區域 API 要求的簽章。如需詳細資訊,請參閱上 GitHub的 sigv4 a-signing-examples 專案。

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

簽章部分的影像,包括要簽署的字串、簽署金鑰和計算的簽章。
  • 要簽署的字串取決於請求類型。例如,當您使用 HTTP 授權標頭或查詢參數進行驗證時,請使用不同的請求元素組合來建立要簽署的字串。對於 HTTP POST 請求,請求中的 POST 政策是您簽署的字串。

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

  • 當 AWS 服務收到已驗證的要求時,會使用要求中包含的驗證資訊重新建立簽章。如果簽章相符,則服務會處理請求。否則,它會拒絕請求。

簽署請求的時機

當您撰寫傳送 API 要求的自訂程式碼時 AWS,您必須包含簽署要求的程式碼。您可能會因為以下原因編寫自訂程式碼:

  • 您使用的程式設計語言沒有 AWS 軟體開發套件。

  • 您需要完全控制要求傳送至的方式 AWS。

為什麼要簽署請求

簽署程序有助於以下列方式保護請求的安全:

  • 驗證請求者的身分

    經過驗證的請求需要您使用存取金鑰 (存取金鑰 ID、私密存取金鑰) 建立的簽章。如果您使用暫時安全憑證,則簽章計算還需要安全字符。如需詳細資訊,請參閱 AWS 安全憑證程式設計存取權

  • 保護傳輸中的資料

    為了防止傳送中的請求遭到竄改,有些請求元素可用來計算請求的雜湊 (摘要),而產生的雜湊值會包含在請求中。當 AWS 服務 收到請求時,它會使用相同的信息來計算散列並將其與請求中的哈希值進行匹配。如果值不匹配,則 AWS 拒絕請求。

  • 抵禦潛在重播攻擊的侵害

    在大多數情況下,請求必須在請求中的時間戳記的五分鐘 AWS 內到達。否則, AWS 拒絕請求。