我从客户端获得了必要的访问密钥/签名,我现在可以通过Ruby SDK与API进行交互。事实上,Ruby SDK没有任何类型的高级API方法来请求点实例。因此,我需要通过原始REST API请求手动执行此操作。
基本上,我使用的身份验证信息是正确的(因为它通过Ruby SDK工作),但我无法获得原始请求...我要么回到现场请求向导网页作为响应,或错误:The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
这是我正在使用的网址:
https://ec2.amazonaws.com/?Action=RequestSpotInstances
&SpotPrice.1=0.05
&AvailabilityZoneGroup.1=us-east-1c
&LaunchSpecification.ImageId.1=THE_AMI_ID
&LaunchSpecification.KeyName.1=THE_KEYPAIR
&LaunchSpecification.InstanceType.1=m1.medium
&AWSAccessKeyId=THE_ACCESS_KEY
&Signature=THE_ACCESS_SIGNATURE
&Version=>2013-10-01
&Expires=>THE_EXPIRATION_TIME_36000_SECONDS_LATER_THAN_NOW
&SignatureVersion=2
&SignatureMethod=HmacSHA256
关于为什么这不起作用的任何想法?我已经尝试过探索Ruby SDK代码以了解它们是如何做到的,但是它太复杂了,我无法弄清楚这个动作实际发生在哪里。谢谢!
答案 0 :(得分:2)
你如何计算签名?首先检查您使用正确的签名过程版本。 AWS api实际上支持版本v2和v4。一些aws资源支持这两个版本,有些只是v2或v4。基于此,我建议做以下事项:
检查您实施的签名版本。更多关于版本: http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html
检查是否与此处描述的算法匹配:http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html