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

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

签署 Amazon API 请求

重要

这些区域有:Amazon软件开发工具包Amazon Command Line Interface(Amazon CLI)和其他Amazon工具会使用您在配置工具时指定的访问密钥为您签署 API 请求。当您使用这些工具时,您不必了解如何签署 API 请求。以下文档介绍如何签署 API 请求,但是仅限如果您正在编写自己的代码来发送和签名AmazonAPI 请求。建议使用Amazon开发工具包或其他Amazon工具来发送 API 请求,而不是编写自己的代码。

当您将 API 请求发送到Amazon,您可以对请求进行签名,以便Amazon可以识别谁发送他们。您将使用您的 Amazon 访问密钥来签署请求,该访问密钥包含访问密钥 ID 和秘密访问密钥。一些请求不需要签署,包括对 Amazon Simple Storage Service (Amazon S3) 的匿名请求以及Amazon Security Token Service(Amazon STS),例如AssumeRoleWithWebIdentity.

何时签署请求

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

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

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

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

为什么签署请求

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

  • 验证请求者的身份

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

  • 保护传输中的数据

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

  • 防止潜在的反演攻击

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

签署请求

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

  • 使用 HTTP Authorization 标头。

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

签名版本

Amazon支持签名版本 4 (SigV4) 和签名版本 2 (SigV2)。全部Amazon所有服务Amazon地区支持 SIGv4,但需要 SIGv2 的 Amazon SimpleDB 除外。这些区域有:Amazon软件开发工具包,包括Amazon CLI,会自动将 SiGv4 用于支持它的所有服务。如果手动签署 API 请求,则应执行相同的操作。