签署 Amazon API 请求 - Amazon 一般参考
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

签署 Amazon API 请求

重要

Amazon SDK Amazon Command Line Interface (Amazon CLI) 和其他 Amazon 工具会使用您在配置工具时指定的访问密钥为您签署 API 请求。当您使用这些工具时,您不必了解如何签署这些 API 请求。以下文档说明了如何签署 API 请求,但适用于您编写自己的代码来发送和签署 Amazon API 请求的情况。建议使用 Amazon SDK 或其他 Amazon 工具来发送 API 请求,而不是编写自己的代码。

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

何时签署请求

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

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

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

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

为什么签署请求

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

  • 验证请求者的身份

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

  • 保护传输中的数据

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

  • 防止潜在的反演攻击

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

签署请求

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

  • 使用 HTTP Authorization 标头。

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

签名版本

Amazon 支持 Signature Version 4(SigV4)和 Signature Version 2(SigV2)。所有 Amazon Web Services 区域 中的全部 Amazon 服务都支持 SigV4,但 Amazon SimpleDB 除外,它要求使用 SigV2。Amazon SDK (包括 Amazon CLI)会自动将 SigV4 应用于支持它的所有服务。如果手动签署 API 请求,您需执行同样的操作。

Amazon 正在推出 SigV4 的扩展,称为签名版本 4A(SigV4A)。此扩展支持签名在多个 Amazon Web Services 区域 中有效。这是签署多区域 API 请求所必需的,例如 Amazon S3 多区域访问点。Amazon SDK 和 Amazon CLI 支持 SigV4A,并在需要时自动使用。

注意

要将 SigV4A 与临时安全凭证一起使用(例如,在使用 IAM 角色时),请确保从 Amazon Security Token Service (Amazon STS) 中的区域端点请求临时凭证。不要使用 Amazon STS (sts.amazonaws.com) 的全局端点,因为默认情况下,全局端点的临时凭证不适用于 SigV4A。您可以使用任何 Amazon STS 的区域端点