对 Amazon SQS 请求进行身份验证 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

对 Amazon SQS 请求进行身份验证

身份验证是用于识别和验证发送请求的当事方的过程。在身份验证的第一个阶段, Amazon 将验证创建者的身份以及创建者是否已注册使用 Amazon(有关更多信息,请参阅步骤 1:创建 Amazon Web Services 账户 和 IAM 用户)。接下来,请 Amazon 遵守以下程序:

  1. 创建者(发件人)获取必要的凭证。

  2. 创建者向使用者(接收方)发送请求和凭证。

  3. 使用者使用证书来验证创建者是否发送了该请求。

  4. 将出现以下情况之一:

    • 如果身份验证成功,使用者将处理该请求。

    • 如果身份验证失败,使用者将拒绝请求并返回错误。

使用 HMAC-SHA 的基本身份验证过程

使用查询 API 访问 Amazon SQS 时,必须提供以下项来对请求进行身份验证:

  • 用于识别您的Amazon 访问密钥 ID Amazon Web Services 账户, Amazon 用于查找您的私有访问密钥。

  • 使用您的秘密访问密钥计算得出的 HMAC-SHA 请求签名(秘密访问密钥是一个只有您和 Amazon知道的共享秘密;相关详情,请参阅 RFC2104)。Amazon 开发工具包可处理签名过程;但是,如果您通过 HTTP 或 HTTPS 提交查询请求,则必须在每个查询请求中包含一个签名。

    1. 派生签名版本 4 签名密钥。有关更多信息,请参阅使用 Java 派生签名密钥

      注意

      Amazon SQS 支持 Signature Version 4,该版本相比以前的版本可提供经过改进的基于 SHA256 的安全性和性能。创建使用 Amazon SQS 的新应用程序时,应使用 Signature Version 4。

    2. 对请求签名必须采用 Base64 编码。下面的示例 Java 代码将执行此操作:

      package amazon.webservices.common; // Define common routines for encoding data in Amazon 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 分钟自动过期( Amazon 服务器上Amazon 不会处理时间戳比当前时间早于 15 分钟的请求)。

    如果使用 .NET,则不得发送过于具体的时间戳(因为对如何降低额外时间精度的解释不同)。在这种情况下,应手动构造精度不超过 1 毫秒的 dateTime 对象。

第 1 部分:来自用户的请求

以下是使用 HMAC-SHA 请求签名对 Amazon 请求进行身份验证时必须遵循的流程。

描述用户请求的图表。
  1. 构造对的请求 Amazon。

  2. 使用您的秘密访问密钥计算密钥哈希消息验证码 (HMAC-SHA) 签名。

  3. 在请求中包含签名和您的访问密钥 ID,然后将请求发送到 Amazon。

第 2 部分:来自的回应 Amazon

Amazon 作为响应,开始以下过程。

描述来自的响应的图表 Amazon。
  1. Amazon 使用访问密钥 ID 来查找您的私有访问密钥。

  2. Amazon 使用与计算请求中发送的签名相同的算法,根据请求数据和私有访问密钥生成签名。

  3. 将出现以下情况之一:

    • 如果 Amazon 生成的签名与您在请求中发送的签名相匹配,则 Amazon 认为该请求是真实的。

    • 如果比较失败,则该请求将被丢弃,并 Amazon 返回错误。