aws api 错误 操作 DescribeRegions 对此 Web 服务无效

Posted

技术标签:

【中文标题】aws api 错误 操作 DescribeRegions 对此 Web 服务无效【英文标题】:aws api error The action DescribeRegions is not valid for this web service 【发布时间】:2013-05-24 09:05:51 【问题描述】:

我需要了解不同的 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] 完成版本=2013-02-01

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

[5]- 完成 SignatureVersion=2

[6]+ 完成签名方法=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= 然后我将这个 curl 请求与上面的 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=

谁能告诉我哪里出错了?

【问题讨论】:

【参考方案1】:

您需要引用请求 URL。它包含您的 shell 正在解释的字符。

线索在像"[1] Done ..." 这样的输出行中。 URL 中的 & 号导致 URL 的片段作为后台子 shell 执行。这些行是报告这些子shell 已完成的shell。

【讨论】:

非常感谢您的回答和很好的解释它是 qoutes " " 我错过了。但是现在又是另一个问题,响应查询说 SignatureDoesNotMatch我们的请求签名计算的与您提供的签名不匹配。检查您的 AWS 秘密访问密钥和签名方法。我验证了我的 aws 访问密钥和 aws 秘密密钥都很好。我的意思是它们非常适用于 aws 命令行工具;那么它们如何导致问题在 ec2 api 请求查询中。我用于签署请求查询的 cmd bash 脚本是否正确?即 echo -n "$q" | openssl dgst.. 我只能猜测您没有完全正确地生成签名。我最近开始使用新的 AWS CLI (aws.amazon.com/cli) 来处理这类事情,它为您完成了所有繁琐的工作,并且比旧的 AWS 命令​​行工具更好用。

以上是关于aws api 错误 操作 DescribeRegions 对此 Web 服务无效的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS Amplify 设置 API 连接时出现问题

AWS API Gateway OPTIONS 请求返回 500 错误

如何使用 aws-amplify 处理 api 错误?

使用授权方后 AWS Amplify API Gateway cors 错误:aws_iam

从帖子正文读取时,AWS API 网关 CORS 错误

AWS Lambda 网关 API 给出错误消息