驗證 Amazon SQS 的請求 - Amazon Simple Queue Service

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

驗證 Amazon SQS 的請求

身分驗證是辨識與確認傳送請求的當事方身分的過程。在驗證的第一階段, AWS 驗證生產者的身份以及生產者是否已註冊使用 AWS (如需詳細資訊,請參閱步驟 1:建立 AWS 帳戶 和 IAM 使用者)。接下來, AWS 遵循以下程序:

  1. 生產者 (發送者) 必須取得必要的登入資料。

  2. 生產者將請求和登入資料發送給消費者 (接收者)。

  3. 消費者使用登入資料來確認是否為生產者發送請求。

  4. 以下其中一種情況將發生:

    • 若身分驗證成功,消費者便會繼續進行流程。

    • 若身分驗證失敗,消費者便會拒絕請求並傳回錯誤。

使用 HMAC-SHA 的基本身分驗證流程

使用查詢 API 存取 Amazon SQS 時,必須提供下列項目以對您的請求進行身分驗證:

  • 識別您的AWS 存取金鑰 ID AWS 帳戶, AWS 用來查詢您的秘密存取金鑰。

  • HMAC-SHA 請求簽名,使用您的密鑰訪問密鑰(只有您知道的共享密鑰)進行計算,如 AWS需更多信息,請參閱 RFC2104)。AWS 開發套件會處理簽署程序,但若您透過 HTTP 或 HTTPS 提交查詢請求,則每一次查詢請求都必須附上簽章。

    1. 衍生 Signature 第 4 版簽署金鑰。如需詳細資訊,請參閱使用 Java 衍生簽署金鑰

      注意

      Amazon SQS 支援 Signature 第 4 版,此版本比起之前版本提供更佳的 SHA256 型安全性與效能。若您建立的新應用程式會用到 Amazon SQS,請使用 Signature 第 4 版。

    2. 對請求簽章進行 Base64 編碼。以下範例 Java 程式碼執行此作業:

      package amazon.webservices.common; // Define common routines for encoding data in AWS requests. public class Encoding { /* Perform base64 encoding of input bytes. * rawData is the array of bytes to be encoded. * return is the base64-encoded string representation of rawData. */ public static String EncodeBase64(byte[] rawData) { return Base64.encodeBytes(rawData); } }
  • 請求的時間戳記 (或過期時間)。在請求中使用的時間戳記必須是 dateTime 物件,有完整的日期,包含小時、分鐘、秒鐘。例如:2007-01-31T23:59:59Z。儘管並非必要,但建議您使用國際標準時間 (格林威治標準時間) 時區提供此物件。

    注意

    請確定您的伺服器時間設定正確。如果您指定時間戳記 (而非過期),請求會在指定時間後 15 分鐘自動過期 (AWS 不會處理時間戳記早於 AWS 伺服器上目前時間 15 分鐘的要求)。

    如果您是使用 .NET,切勿傳送過於精確的時間戳記 (因為該平台對於如何去除多餘的時間準度有不同的解釋)。在此情況下,應手動建構精準度不超過一毫秒的 dateTime 物件。

第 1 部分:來自使用者的請求

以下是使用 HMAC-SHA 請求簽名驗證 AWS 請求時必須遵循的過程。

描述來自用戶的請求的圖表。
  1. 建構要求 AWS。

  2. 使用您的私密存取金鑰,計算金鑰式雜湊訊息身分驗證碼 (HMAC-SHA) 簽章。

  3. 在請求中包含簽名和您的訪問密鑰 ID,然後將請求發送到 AWS。

第 2 部分:來自的回應 AWS

AWS 開始響應以下過程。

描述來自的響應的圖表 AWS。
  1. AWS 使用存取金鑰 ID 來查詢您的秘密存取金鑰。

  2. AWS 使用與計算要求中傳送的簽章相同的演算法,從請求資料和秘密存取金鑰產生簽章。

  3. 以下其中一種情況將發生:

    • 如果 AWS 生成的簽名與您在請求中發送的簽名匹配,則 AWS 認為該請求是真實的。

    • 如果比較失敗,則會捨棄要求,並 AWS 傳回錯誤。