我会告诉你我的签名请求。
https://ec2.eu-west-1.amazonaws.com?AWSAccessKeyId=THISISFAKEIDD
&Action=AuthorizeSecurityGroupIngress
&GroupId=sg-blahblah
&IpPermissions.1.FromPort=7264
&IpPermissions.1.IpProtocol=ani
&IpPermissions.1.IpRanges.1.CidrIp=272.64.292.200%2F32
&IpPermissions.1.ToPort=7264
&SignatureMethod=HmacSHA256
&SignatureVersion=2
&Timestamp=2014-06-10T05%3A25%3A10Z
&Version=2014-05-01
&Signature=FZgxzY0htCocacolaX4PXf0uJjnwmayhemDavkwCUw=
生成签名&此请求能够将我的IP地址(272.64.292.200)成功添加到安全组(sg-blahblah)中。这意味着,这个要求是正确的。我的代码中没有生成签名的错误。
行。现在,当我尝试使用具有不同IP地址参数的相同签名请求向同一组添加另一个IP地址时。时间戳,生成新签名。但我无法将其添加到安全组。签名不符合。显示的计算签名不匹配。
为什么会这样?我使用UTC时间。如果我的请求不正确,我怎么能在第一个地方添加IP地址?或者,它是来自EC2服务器端的错误??
答案 0 :(得分:1)
看起来你做了一些urlencoding,但是你错过了一件事...签名的价值。
&Signature=FZgxzY0htCocacolaX4PXf0uJjnwmayhemDavkwCUw= (incorrect)
&Signature=FZgxzY0htCocacolaX4PXf0uJjnwmayhemDavkwCUw%3D (correct)
如果你对这个值进行了urlencode,那就应该是你所缺少的。在签名中任何=+/
未编码都会破坏它。