Amazon Web Services
一般参考 (Version 1.0)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

签署 AWS API 请求

当您将 HTTP 请求发送到 AWS 时,您需要签署请求,以便 AWS 能够识别发送它们的用户。您将使用您的 AWS 访问密钥来签署请求,该访问密钥包含访问密钥 ID 和秘密访问密钥。一些请求不需要签署,例如发送到 Amazon Simple Storage Service (Amazon S3) 的匿名请求以及 AWS Security Token Service (AWS STS) 中的一些 API 操作(例如 AssumeRoleWithWebIdentity)。

注意

仅当您手动创建 HTTP 请求时,您才需要了解如何签署这些请求。当您使用 AWS Command Line Interface (AWS CLI) 或其中一个 AWS 开发工具包来向 AWS 发出请求时,这些工具会自动使用您在配置工具时指定的访问密钥为您签署请求。当您使用这些工具时,您不必了解如何亲自签署这些请求。

您何时需要签署请求?

当您编写自定义代码来将 HTTP 请求发送到 AWS 时,就需要包含用于签署请求的代码。您可能出于以下原因来执行该操作:

  • 您正在使用的编程语言没有对应的 AWS 开发工具包。

  • 您希望完全控制将请求发送到 AWS 的方式。

在使用 AWS Command Line Interface (AWS CLI) 或其中一个 AWS 开发工具包时,您不需要签署请求。这些工具会管理连接详细信息,例如计算签名、处理请求重试和错误处理。在大多数情况下,它们还包含示例代码、教程和其他资源,可帮助您开始编写与 AWS 交互的应用程序。

为什么签署请求

签名过程通过以下方式帮助保护请求:

  • 验证请求者的身份

    签名可以确保请求是由某个具有有效访问密钥的用户发送的。有关更多信息,请参阅 了解并获取您的安全凭证

  • 保护传输中的数据

    为了防止传输时请求被篡改,一些请求元素将用于计算请求的哈希(摘要),得到的哈希值将包括在请求中。在 AWS 服务收到请求时,它将使用相同信息计算哈希,并将其与您的请求中包括的哈希值进行匹配。如果值不匹配,AWS 将拒绝请求。

  • 防止潜在的反演攻击

    在大多数情况下,请求必须在请求中的时间戳的 5 分钟内到达 AWS。否则,AWS 将拒绝该请求。

签名请求

要对请求签名,请先计算请求的哈希 (摘要)。然后,您使用哈希值、来自请求的其他一些信息以及您的私密访问密钥,计算另一个称为签名 的哈希。接下来,您可以通过以下方式之一将签名添加到请求:

  • 使用 HTTP Authorization 标头。

  • 将查询字符串值添加到请求中。在本例中,由于签名是 URL 的一部分,因此这类 URL 被称为预签名 URL

签名版本

AWS 支持两个签名版本:Signature Version 4 和签名版本 2。您应使用Signature Version 4。除需要签名版本 2 的 Amazon SimpleDB 之外,所有 AWS 服务均支持Signature Version 4。对于同时支持这两个版本的 AWS 服务,建议您使用Signature Version 4。

所有 AWS 区域均支持Signature Version 4。