本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用查询 API
查询参数
HTTP基于查询的HTTP请求是使用HTTP动词GET或POST和名为Action
的查询参数的请求。
每个查询请求必须包括一些通用参数,以处理操作的身份验证和选择事宜。
有些操作会使用参数列表。这些列表都是使用 param.
表示法指定的。的价值观 n
n
是从 1 开始的整数。
查询请求身份验证
您只能发送查询请求,HTTPS并且必须在每个查询请求中包含签名。本部分描述了如何创建签名。以下过程中说明的方法称为签名版本 4。
下面介绍了对发送至 AWS的请求进行身份验证的基本步骤。这假设您已注册 AWS 并拥有访问密钥 ID 和私有访问密钥。
查询身份验证流程
-
发件人向构造一个请求。 AWS
-
发送者计算请求签名,即基于哈希的消息身份验证码 (HMAC) 的Keyed-Hashing,哈希函数为 SHA -1,如本主题下一节所定义。
-
请求的发送者将请求数据、签名和访问密钥 ID(所使用的私有访问密钥的密钥标识符)发送到。 AWS
-
AWS 使用访问密钥 ID 来查找私有访问密钥。
-
AWS 使用与计算请求中的签名相同的算法,根据请求数据和私有访问密钥生成签名。
-
如果签名匹配,那么请求将被视为可信。如果比较签名这一操作失败,那么请求将被丢弃,同时 AWS 将返回错误响应。
注意
如果请求包含一个 Timestamp
参数,那么针对请求计算的签名将在被赋予值后的 15 分钟失效。
如果请求包含一个 Expires
参数,那么签名将在 Expires
参数指定的时间失效。
计算请求签名
-
创建标准化的查询字符串,您在此过程的稍后部分需要用到它:
-
按参数名称按自然字节顺序对 UTF -8 查询字符串组件进行排序。参数可以来自GETURI或POST主体(当 Content-Type 为 applic x-www-form-urlencoded ation/ 时)。
-
URL根据以下规则对参数名称和值进行编码:
-
不要对 RFC 398 URL 6 定义的任何非保留字符进行编码。这些未预留字符是 A–Z、a–z、0–9、连字符(-)、下划线(_)、句点(.)和波形符(~)。
-
使用 %XY 对所有其他参数进行百分比编码,其中“X”和“Y”分别代表十六进制字符 0-9 和大写字母 A-F。
-
以 %XY%ZA 的形式对扩展的 UTF -8 个字符进行百分比编码...
-
将空白字符百分号编码为 %20(不是普通编码方案中的 +)。
-
-
使用等号 (=)(字ASCII符 61)将编码后的参数名称与其编码值分开,即使参数值为空也是如此。
-
使用与号 (&) 分隔名称/值对(代码 38)。ASCII
-
-
根据以下伪语法创建待签字符串(“\ n” 代表换行符)。ASCII
StringToSign = HTTPVerb + "\n" + ValueOfHostHeaderInLowercase + "\n" + HTTPRequestURI + "\n" + CanonicalizedQueryString <from the preceding step>
该HTTPRequestURI组件是查询字符串的HTTPURI绝对路径组件,但不包括查询字符串。如果为空,HTTPRequestURI则使用正斜杠 (/)。
-
使用您刚刚创建的字符串、您的私HMAC有访问密钥作为密钥和 SHA256 /或SHA1作为哈希算法来计算RFC符合 2104 的值。
欲了解更多信息,请参阅 https://www.ietf。 org/rfc/rfc
2104.txt。 -
将结果值转换为 base64。
-
将此值作为请求中的
Signature
参数值。
例如,下面是一个示例请求(为清晰起见,添加了换行符)。
https://memory-db.us-east-1.amazonaws.com/ ?Action=DescribeClusters &ClusterName=myCluster &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2021-01-01
对于前面的查询字符串,您需要计算以下字符串的HMAC签名。
GET\n memory-db.amazonaws.com\n Action=DescribeClusters &ClusterName=myCluster &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2021-01-01 &X-Amz-Algorithm=Amazon4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE%2F20140523%2Fus-east-1%2Fmemorydb%2Faws4_request &X-Amz-Date=20210801T223649Z &X-Amz-SignedHeaders=content-type%3Bhost%3Buser-agent%3Bx-amz-content-sha256%3Bx-amz-date content-type: host:memory-db.us-east-1.amazonaws.com user-agent:ServicesAPICommand_Client x-amz-content-sha256: x-amz-date:
结果是下面的已签名请求。
https://memory-db.us-east-1.amazonaws.com/ ?Action=DescribeClusters &ClusterName=myCluster &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2021-01-01 &X-Amz-Algorithm=Amazon4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20141201/us-east-1/memorydb/aws4_request &X-Amz-Date=20210801T223649Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=2877960fced9040b41b4feaca835fd5cfeb9264f768e6a0236c9143f915ffa56
有关签名流程和计算请求签名的详细信息,请参阅主题签名版本 4 签名流程及其副主题。