请求结构
服务地址
备注:查询亚太东北 1(东京)地域的监控数据时,请使用华东 1 (杭州)的服务地址。
通信协议
支持通过HTTP进行请求通信。
请求方法
支持HTTP GET或POST方法发送请求,GET方式下请求参数需要包含在请求的URL中。
请求参数
每个请求都需要包含公共的鉴权、签名相关请求参数和相关操作所特有的请求参数。
字符编码
请求及返回结果都使用UTF-8字符集进行编码。
公共参数
签名机制
CloudMonitor服务会对每个访问的请求进行身份验证,使用HTTP需要在请求中包含签名(Signature)信息。CloudMonitor通过使用Access Key ID和Access Key Secret进行对称加密的方法来验证请求的发送者身份。
Access Key ID和Access Key Secret由阿里云官方颁发给访问者(可以通过阿里云官方网站申请和管理),其中Access Key ID用于标识访问者的身份;Access Key Secret是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有阿里云和用户知道。
Java 签名算法可直接引用
签名算法参考。
签名处理步骤
- 使用请求参数构造规范化的请求字符串(Canonicalized Query String)。
- 使用上一步构造的规范化字符串按照下面的规则构造用于计算签名的字符串。[backcolor=transparent]StringToSign[backcolor=transparent]=
- [backcolor=transparent]HTTPMethod[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]“&”[backcolor=transparent] [backcolor=transparent]+
- [backcolor=transparent]percentEncode[backcolor=transparent](“/”)[backcolor=transparent] [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]”&”[backcolor=transparent] [backcolor=transparent]+
- [backcolor=transparent]percentEncode[backcolor=transparent]([backcolor=transparent]CanonicalizedQueryString[backcolor=transparent])
其中HTTPMethod是提交请求用的HTTP方法,比GET.percentEncode(“/”)是按照1.b中描述的URL编码规则对字符“/”进行编码得到的值,即“%2F”。
percentEncode(CanonicalizedQueryString)是对第1步中构造的规范化请求字符串按1.b中描述的URL编码规则编码后得到的字符串
按照RFC2104的定义,使用上面的用于签名的字符串计算签名HMAC值。注意:计算签名时使用的Key就是用户持有的Access Key Secret并加上一个“&”字符(ASCII:38),使用的哈希算法是SHA1。按照Base64编码规则把上面的HMAC值编码成字符串,即得到签名值(Signature)。将得到的签名值作为Signature参数添加到请求参数中,即完成对请求签名的过程。
构造请求字符串的方法
- 按照参数名称的字典顺序对请求中所有的请求参数(包括文档中描述的“公共请求参数”和给定了的请求接口的自定义参数,但不能包括“公共请求参数”中提到Signature参数本身)进行排序。
注:当使用GET方法提交请求时,这些参数就是请求URI中的参数部分(即URI中“?”之后由“&”连接的部分)。 - 对每个请求参数的名称和值进行编码。名称和值要使用UTF-8字符集进行URL编码。
a. 对于字符 A-Z、a-z、0-9以及字符“-”、“_”、“.”、“~”不编码。
b. 对于其他字符编码成“%XY”的格式,其中XY是字符对应ASCII码的16进制表示。比如英文的双引号(”)对应的编码就是%22。
c. 对于扩展的UTF-8字符,编码成“%XY%ZA…”的格式。
d. 需要说明的是英文空格( )要被编码是%20,而不是加号(+)。
注:一般支持URL编码的库(比如Java中的java.net.URLEncoder)都是按照“application/x-www-form-urlencoded”的MIME类型的规则进行编码的。实现时可以直接使用这类方式进行编码,把编码后的字符串中加号(+)替换成%20、星号(*)替换成%2A、%7E替换回波浪号(~),即可得到上述规则描述的编码字符串。 - 对编码后的参数名称和值使用英文等号(=)进行连接。
- 再把英文等号连接得到的字符串按参数名称的字典顺序依次使用&符号连接,即得到规范化请求字符串。
以QueryMetricList为例,签名前的请求URL为:
- [backcolor=transparent]http[backcolor=transparent]:[backcolor=transparent]//metrics.aliyuncs.com/?Action=QueryMetricList&period=60&StartTime=2016-03-22T11:30:27Z&Dimensions={instanceId:'i-abcdefgh123456'}&Timestamp=2017-03-23T06:59:55Z&Project=acs_ecs_dashboard&SignatureVersion=1.0&Format=JSON&SignatureNonce=aeb03861-611f-43c6-9c07-b752fad3dc06&Version=2015-10-20&AccessKeyId=TestId&Metric=cpu_idle&SignatureMethod=HMAC-SHA1
那么StringToSign就是:
- [backcolor=transparent]GET[backcolor=transparent]&%[backcolor=transparent]2F[backcolor=transparent]&[backcolor=transparent]AccessKeyId[backcolor=transparent]%[backcolor=transparent]3DTestId[backcolor=transparent]&[backcolor=transparent]Action[backcolor=transparent]%[backcolor=transparent]3DQueryMetricList[backcolor=transparent]&[backcolor=transparent]Dimensions[backcolor=transparent]%[backcolor=transparent]3D[backcolor=transparent]%[backcolor=transparent]257BinstanceId[backcolor=transparent]%[backcolor=transparent]253A[backcolor=transparent]%[backcolor=transparent]2527i[backcolor=transparent]-[backcolor=transparent]abcdefgh123456[backcolor=transparent]%[backcolor=transparent]2527[backcolor=transparent]%[backcolor=transparent]257D[backcolor=transparent]&[backcolor=transparent]Format[backcolor=transparent]%[backcolor=transparent]3DJSON[backcolor=transparent]&[backcolor=transparent]Metric[backcolor=transparent]%[backcolor=transparent]3Dcpu[backcolor=transparent]_idle[backcolor=transparent]&[backcolor=transparent]Project[backcolor=transparent]%[backcolor=transparent]3Dacs[backcolor=transparent]_ecs_dashboard[backcolor=transparent]&[backcolor=transparent]SignatureMethod[backcolor=transparent]%[backcolor=transparent]3DHMAC[backcolor=transparent]-[backcolor=transparent]SHA1[backcolor=transparent]&[backcolor=transparent]SignatureNonce[backcolor=transparent]%[backcolor=transparent]3Daeb03861[backcolor=transparent]-[backcolor=transparent]611f[backcolor=transparent]-[backcolor=transparent]43c6[backcolor=transparent]-[backcolor=transparent]9c07[backcolor=transparent]-[backcolor=transparent]b752fad3dc06[backcolor=transparent]&[backcolor=transparent]SignatureVersion[backcolor=transparent]%[backcolor=transparent]3D1.0[backcolor=transparent]&[backcolor=transparent]StartTime[backcolor=transparent]%[backcolor=transparent]3D2016[backcolor=transparent]-[backcolor=transparent]03[backcolor=transparent]-[backcolor=transparent]22T11[backcolor=transparent]%[backcolor=transparent]253A30[backcolor=transparent]%[backcolor=transparent]253A27Z[backcolor=transparent]&[backcolor=transparent]Timestamp[backcolor=transparent]%[backcolor=transparent]3D2016[backcolor=transparent]-[backcolor=transparent]03[backcolor=transparent]-[backcolor=transparent]23T06[backcolor=transparent]%[backcolor=transparent]253A59[backcolor=transparent]%[backcolor=transparent]253A55Z[backcolor=transparent]&[backcolor=transparent]Version[backcolor=transparent]%[backcolor=transparent]3D2015[backcolor=transparent]-[backcolor=transparent]10[backcolor=transparent]-[backcolor=transparent]20[backcolor=transparent]&[backcolor=transparent]period[backcolor=transparent]%[backcolor=transparent]3D60
假如使用的Access Key Id是“TestId”,Access Key Secret是“TestSecret”,用于计算HMAC的Key就是“TestSecret&”,则计算得到的签名值是:
- [backcolor=transparent]umY[backcolor=transparent]/[backcolor=transparent]Jy1KWYWvFy9KABIm7ajKURQ[backcolor=transparent]=
签名后的请求URL为(注意增加了Signature参数):
- [backcolor=transparent]http[backcolor=transparent]:[backcolor=transparent]//metrics.aliyuncs.com/?Action=QueryMetricList&period=60&StartTime=2016-02-02T10%3A33%3A56Z&Dimensions=%7BinstanceId%3A%27i-abcdefgh123456%27%7D
- [backcolor=transparent]&[backcolor=transparent]Timestamp[backcolor=transparent]=[backcolor=transparent]2016[backcolor=transparent]-[backcolor=transparent]23[backcolor=transparent]-[backcolor=transparent]04T06[backcolor=transparent]%[backcolor=transparent]3A59[backcolor=transparent]%[backcolor=transparent]3A55Z[backcolor=transparent]&[backcolor=transparent]Project[backcolor=transparent]=[backcolor=transparent]acs_ecs_dashboard[backcolor=transparent]&[backcolor=transparent]SignatureVersion[backcolor=transparent]=[backcolor=transparent]1.0[backcolor=transparent]&[backcolor=transparent]Format[backcolor=transparent]=[backcolor=transparent]JSON[backcolor=transparent]&[backcolor=transparent]SignatureNonce[backcolor=transparent]=[backcolor=transparent]aeb03861[backcolor=transparent]-[backcolor=transparent]611f[backcolor=transparent]-[backcolor=transparent]43c6[backcolor=transparent]-[backcolor=transparent]9c07[backcolor=transparent]-[backcolor=transparent]b752fad3dc06
- [backcolor=transparent]&[backcolor=transparent]Version[backcolor=transparent]=[backcolor=transparent]2015[backcolor=transparent]-[backcolor=transparent]10[backcolor=transparent]-[backcolor=transparent]20[backcolor=transparent]&[backcolor=transparent]AccessKeyId[backcolor=transparent]=[backcolor=transparent]TestId[backcolor=transparent]&[backcolor=transparent]Metric[backcolor=transparent]=[backcolor=transparent]cpu_idle[backcolor=transparent]&[backcolor=transparent]SignatureMethod[backcolor=transparent]=[backcolor=transparent]HMAC[backcolor=transparent]-[backcolor=transparent]SHA1 [backcolor=transparent]&[backcolor=transparent]Signature[backcolor=transparent]=[backcolor=transparent]yelYr99iwDHg9biDPVZOGrlcEss[backcolor=transparent]%[backcolor=transparent]3D