0

我已经从我的客户端获得了必要的访问密钥/签名,我现在可以通过 Ruby SDK 与 API 进行交互。问题是,Ruby SDK 没有任何高级 API 方法来请求 Spot 实例。因此,我需要通过原始 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 代码以了解他们是如何做到的,但它太复杂了,我无法弄清楚这个动作实际发生在哪里。谢谢!

4

1 回答 1

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

于 2013-11-10T06:34:40.347 回答