2013-11-09 50 views
0

我从我的客户得到必要的访问密钥/签名,我现在就可以通过了Ruby SDK的API进行交互。事情是,Ruby SDK没有任何一种高级API方法来请求一个现场实例。所以,我需要通过原始REST API请求手动执行此操作。与AWS 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

不客气。 (在你的问题参见我清除该讨论的是在10马赫无处可去,而指的是当第一次被编辑的问题是被错过了,眨眼眨眼轻推轻推@KenWhite“谢谢!” - 让我们都拿这只是一个小那么严肃。) – BoltClock

+0

我觉得你应该先尝试做与AWS CLI工具相同,通过使用curl直生的HTTP请求,如果它的作品好,至少,你应该可以说,一切是正确的在你的结束。 –

回答

2

如何计算签名?首先检查您是否使用了正确的签名流程版本。 AWS api实际上支持版本v2和v4。一些aws资源支持这两个版本,一些只是v2或v4。在此基础上,我建议执行以下操作:

  1. 检查您实施的签名版本。更多关于版本: http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html

  2. 检查是您的实现匹配算法描述如下:http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html