使用AWS签名版本4进行REST API调用(无法签署AWS API请求)

时间:2016-10-04 21:55:42

标签: bash rest amazon-web-services curl amazon-s3

我从来没有能够让AWS API调用工作。我正在尝试在我的网络上的Linux服务器上发布REST API以与我的企业AWS账户进行交互。

我正在尝试使用签名版本4签署AWS请求。我是否需要在AWS实例上执行此操作?我有共享访问密钥,RSA私钥(开始RSA私钥...结束RSA私钥)和AWS Access密钥(例如,AKAI ...值)。

我遇到的问题是创建规范请求。我收到错误“格式错误的网址”。 Bash解析了我的curl,但在此之后参数有问题:

curl -i ... -X GET / action=listusers ...

我正在尝试遵循这些指示:

http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html

我认为我的命令应该有效,因为上面的链接将此作为示例规范请求显示:

GET
/
Action=ListUsers&Version=2010-05-08
content-type:application/x-www-form-urlencoded; charset=utf-8
host:iam.amazonaws.com
x-amz-date:20150830T123600Z

content-type;host;x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

这有很多参数。对上述规范请求的curl命令将导致关于“格式错误的URL”的错误,并且无法通过此行识别bash命令:

content-type:application/x-www-form-urlencoded; charset=utf-8

以上说明并未解释如何确定URI。我如何确定URI?如何使用long curl命令正确解析URI,这样我就不会在参数之间获得空格来调用Bash关于无法识别的命令的响应?

我尝试了许多curl命令的列表来列出与我的AWS账户关联的服务器或用户。似乎没什么用。

我想发出一个基本的API命令来验证它的工作原理。我想列出AWS实例或列出与AWS账户关联的用户。但我坚持创建一个规范请求,因为显然我不知道如何确定在Curl命令中使用哪个URI或URL。如果我知道如何,我可以签署请求。如果我能让Linux curl命令工作,我最终可以使用Python的子进程来调用它们。

1 个答案:

答案 0 :(得分:3)

给出我的回答太迟了,但是对于想要找到样本bash以调用支持AWS Signature版本4的AWS API Gateway Rest的其他人来说可能会有用。可以在此处找到示例脚本:https://github.com/riboseinc/aws-authenticating-secgroup-scripts