2016-10-04 32 views
1

我从未能够使AWS API调用发挥作用。我正在尝试在我的网络上的Linux服务器上运行REST API以与我的企业AWS账户进行交互。使用AWS签名版本4进行REST API调用(无法签署AWS API请求)

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

我遇到的问题是创建规范请求。我收到错误“格式不正确的网址”。解析猛砸我的卷发,但与在此之后的参数问题:

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 

这有很多参数ERS。的卷曲命令到上述规范的请求将导致关于“错误的URL”和bash命令的错误不与这行确认:

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

上述方向不解释如何确定URI。我如何确定URI?如何在正确解析URI的情况下使用long curl命令,以便在调用Bash对无法识别的命令的响应的参数之间没有空格?

我已经尝试了许多curl命令的排列来列出与我的AWS账户相关的服务器或用户。似乎没有任何工作。

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

+0

恐怕,你离我们很远。你实际上并没有通过标准的请求来卷曲。这不是你创造它的原因。规范请求是一个字符串,它使用*规范*(已知的,固定的,形式化的,标准化的)格式描述**您要创建的请求。该字符串成为用于生成签名的消息的核心。你做一个正常的'curl'https://iam.amazonaws.com/?Action = ListUsers&Version = ...''请求。 –

+0

现在我想从基础开始。我如何创建curl命令?我使用哪个网址?我有几个EC2服务器(但他们没有公共DNS名称和公共IP地址)。我想列出AWS账户中的服务器或用户。 – Kiran

+0

在你提到的页面的例子中,它会是'curl'https://iam.amazonaws.com/?Action=ListUsers&Version=2010-05-08&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential = AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fiam%2Faws4_request&X-Amz-Date = 20150830T123600Z&X-Amz-SignedHeaders = content-type%3Bhost%3Bx-amz-date'' –

回答

相关问题