Amazon API 请求签名的元素 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon API 请求签名的元素

重要

除非您使用 Amazon SDK 或 CLI,否则您必须编写代码来计算在请求中提供身份验证信息的签名。Amazon 签名版本 4 中的签名计算可能是一项复杂的任务,我们建议您尽可能使用 Amazon SDK 或 CLI。

每个使用 Signature Version 4 签名的 HTTP/HTTPS 请求都必须包含这些元素。

终端节点规范

指定您要向其发送请求的端点的 DNS 名称。此名称通常包含服务代码和区域。例如,us-east-1 区域的 Amazon DynamoDB 端点为 dynamodb.us-east-1.amazonaws.com

对于 HTTP/1.1 请求,您必须使用 Host 标头。对于 HTTP/2 请求,您可以使用 :authority 标头或 Host 标头。仅使用 :authority 标头以符合 HTTP/2 规范。并非所有服务都支持 HTTP/2 请求。

操作

为服务指定 API 操作。例如,DynamoDB CreateTable 操作或 Amazon EC2 DescribeInstances 操作。

有关每项服务支持的操作,请参阅 服务授权参考

操作参数

指定请求中指定的操作的参数。每个 Amazon API 操作都有一组必备参数和可选参数。API 版本通常是必需参数。

有关 API 操作支持的参数,请参阅服务的 API 参考。

Date

指定请求的日期和时间。在请求中包括日期和时间有助于防止第三方拦截您的请求并稍后重新提交。您在凭证范围中指定的日期必须与您请求的日期匹配。

时间戳必须采用 UTC 表示,并具有以下 ISO 8601 格式:YYYYMMDDTHHMMSSZ。例如,20220830T123600Z。请勿在时间戳中包含毫秒。

您可以使用 date 标头或 x-amz-date 标头,或将 x-amz-date 作为查询参数包含在内。如果无法找到 x-amz-date 标头,则需要查找 date 标头。

身份验证信息

您发送的每个请求都必须包含以下信息。Amazon 使用这些信息来确保请求的有效性和真实性。

  • 算法 – 您在签名过程中使用的算法。

    • SigV4 – 使用 AWS4-HMAC-SHA256HMAC-SHA256 哈希算法指定 Signature Version 4。

    • SigV4a – 使用 AWS4-ECDSA-P256-SHA256 指定 ECDSA-P256-SHA-256 哈希算法。

  • 凭证 – 通过将您的访问密钥 ID 和凭证范围组件串联起来而形成的字符串。

    • SigV4 – 凭证范围包括访问密钥 ID、YYYYMMDD 格式的日期、区域代码、服务代码和 aws4_request 终止字符串,用斜杠(/)分隔。区域代码、服务代码和终止字符串必须使用小写字符。

      AKIAIOSFODNN7EXAMPLE/YYYYMMDD/region/service/aws4_request
    • SigV4a – 凭证范围包括 YYYYMMDD 格式的日期、服务名称和 aws4_request 终止字符串,用斜杠(/)分隔。请注意,凭证范围不包括区域,因为该区域包含在单独的标头 X-Amz-Region-Set 中。

      AKIAIOSFODNN7EXAMPLE/YYYYMMDD/service/aws4_request
  • 已签名标头 – 签名中要包含的 HTTP 标头,用分号(;)分隔。例如,host;x-amz-date

    对于 SigV4a,您必须包含一个区域集标头,该标头指定请求将在哪一组区域中生效。标头 X-Amz-Region-Set 被指定为逗号分隔值的列表。下面的示例显示一个区域标头,该标头允许在 us-east-1 和 us-west-1 区域中进行请求。

    X-Amz-Region-Set=us-east-1,us-west-1

    您可以在区域中使用通配符(*)来指定多个区域。在下面的示例中,标头允许在 us-west-1 和 us-west-2 中进行请求。

    X-Amz-Region-Set=us-west-*
  • 签名 – 代表计算得到的签名的十六进制编码字符串。您必须使用您在 Algorithm 参数中指定的算法来计算签名。

有关更多信息,请参阅 身份验证方法