AWS API错误的操作DescribeRegions并不适用于该Web服务并不、适用于、错误、操作

2023-09-11 09:44:45 作者:我的任性你不懂

我需要知道不同的AWS EC2地区 我知道AWS有命令行工具,这一点,但我想使用AWS API,因此 我产生下面的查询请求访问AWS EC2 API

i need to know different aws ec2 regions i know aws has command line tools for this but i want to use aws api so i generated following query request for accessing aws ec2 api

的https://ec2.amazonaws.com/?Action=DescribeRegions&AWSAccessKeyId=&Version=2013-02-01&Timestamp=2013-05-24T12%3A35%3A00Z&SignatureVersion=2&SignatureMethod=HmacSHA256&Signature=xkw62EsVWEpc3rodXADy4Q3LOquKKfHmVHrrIIGQCg0=

https://ec2.amazonaws.com/?Action=DescribeRegions&AWSAccessKeyId=&Version=2013-02-01&Timestamp=2013-05-24T12%3A35%3A00Z&SignatureVersion=2&SignatureMethod=HmacSHA256&Signature=xkw62EsVWEpc3rodXADy4Q3LOquKKfHmVHrrIIGQCg0=

为此,我得到了以下响应

for which i got the following response

<?xml version="1.0" encoding="UTF-8"?>
* Connection #0 to host ec2.amazonaws.com left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
<Response>
<Errors>
 <Error>
   <Code>InvalidAction</Code>
   <Messaged >The action urn:Post is not valid for this web service.</Message>
</Error></Errors>
<RequestID>4a33917f-3403-4ebc-9a85-4b5393a031c6</RequestID>
</Response>

[1]完成卷曲-v -get --data-urlen code数据的https: //ec2.amazonaws.com/?action=DescribeRegions

[2]完成AWSAccessKeyId =

[2] Done AWSAccessKeyId=

[3]实现的版本= 2013年2月1日

[3] Done Version=2013-02-01

[4]就可以完成时间戳= 2013-05-24T12%3A35%3A00Z

[4] Done Timestamp=2013-05-24T12%3A35%3A00Z

[5] - 完成SignatureVersion = 2

[5]- Done SignatureVersion=2

[6] +完成=是SignatureMethod HmacSHA256

[6]+ Done SignatureMethod=HmacSHA256

我签署了这项请求查询follwing CMD庆典素文字

i signed this request query follwing cmd bash scipt

 #!/bin/bash

q='GET
ec2.amazonaws.com
/
AWSAccessKeyId=<aws acces_key>&Action=DescribeRegions&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-05-24T12%3A35%3A00Z&Version=2013-02-01'

echo -n "$q" | openssl dgst -sha256 -hmac "<aws secret key>" -binary | openssl enc -base64

产量为:xkw62EsVWEpc3rodXADy4Q3LOquKKfHmVHrrIIGQCg0 = 然后我给了这个请求,卷曲分别距上述bash脚本。

output was : xkw62EsVWEpc3rodXADy4Q3LOquKKfHmVHrrIIGQCg0= and then i gave this curl request separately away from above bash script.

$curl -v -get --data-encode DATA https://ec2.amazonaws.com/?Action=DescribeRegions&AWSAccessKeyId=<aws access key>&Version=2013-02-01&Timestamp=2013-05-24T12%3A35%3A00Z&SignatureVersion=2&SignatureMethod=HmacSHA256&Signature=xkw62EsVWEpc3rodXADy4Q3LOquKKfHmVHrrIIGQCg0=

可以在任何1告诉我在哪里,我要去哪里呢?

can any 1 tell me where i m going wrong?

推荐答案

您需要引用请求URL。它包含有被除preTED你的shell字符。

You need to quote the request URL. It contains characters that are being interpreted by your shell.

线索是在输出线如[1]完成......。 URL中的&号是造成URL的片段被作为背景子shell执行。这些线是外壳的报告,这些子shell完成。

The clue is in the output lines like "[1] Done ...". The ampersands in the URL are causing fragments of the URL to be executed as background subshells. These lines are the shell reporting that those subshells have finished.