0

さまざまな aws ec2 リージョンを知る必要があります。aws にはこのためのコマンド ライン ツールがあることはわかっていますが、aws api を使用したいので、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=

私は次の応答を得ました

<?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] 完了 curl -v -get --data-urlencode DATA https://ec2.amazonaws.com/?action=DescribeRegions

[2] 完了 AWSAccessKeyId=

[3] 完了 Version=2013-02-01

[4] 完了 タイムスタンプ=2013-05-24T12%3A35%3A00Z

[5]- 完了 SignatureVersion=2

[6]+ 完了 SignatureMethod=HmacSHA256

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 スクリプトとは別に、このカール要求を与えました。

$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=

どこが間違っているのか教えてもらえますか?

4

1 に答える 1

0

リクエスト URL を引用する必要があります。シェルによって解釈されている文字が含まれています。

手がかりは、のような出力行にあります"[1] Done ..."。URL 内のアンパサンドにより、URL のフラグメントがバックグラウンド サブシェルとして実行されます。これらの行は、これらのサブシェルが終了したことを報告するシェルです。

于 2013-05-24T11:41:56.360 に答える