2017-02-04 157 views
1

使用AWS IAM用户角色的动机是让AWS自动处理每个服务调用的AWS密钥/凭证。这种方法在Apache Camel之后使用,后者然后使用凭证安全地进行数据传输,即不在源代码中存储任何凭证。使用AWS IAM的AWS S3存储桶API调用用户角色凭证:

我发现的问题是仅在aws cli中在IAM工具中创建的凭据。

举例来说,我从IAM自动生成凭证成功运行此(我的环境变量中设置它们):

aws s3 cp test.txt s3://x/test.txt 

然而,当我试图模仿中同一操作(相同的凭据) API调用,我给这个错误信息:

The AWS Access Key Id you provided does not exist in our records. 
(Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId;   
Request ID: 07A4FCDCA2E82F9E) 

此外,使用我的AWS账户的安全证书(即制造一个安全密钥ID和密钥),我可以得到上述API工作。所以API不是问题(考虑到我已经测试了2个全音质证书集)。

最后,我的AWS IAM用户角色设置为拥有对S3存储桶的完全访问权限,并且S3存储桶本身被配置为允许这样做。这是我开始迷失在潜在的路线上。

了解了所有这些,我已经做了一些研究并找到了类似问题的人(1)(2)。每个源代码都提出了不同的想法来解决这个问题,但是对于我使用Apache Camel的用例来说,两者都不适用。

对于我使用Apache的骆驼的知识,我的代码示例如下:

String awsS3Connection = "aws-s3://x" + "?accessKey=" + accessId + 
          "&secretKey=" + accessKey; 

    from(awsS3Connection) 
      .to(importProcessingEndpoint); 

回答

1

临时凭证是毫无意义的 - 和未确认的 - 的API,除非他们是在配合使用他们的服务随附的会话/安全令牌。

当正在准备签署的请求......

您加入会话令牌HTTP头或命名X-Amz-Security-Token查询字符串参数。您将会话令牌添加到HTTP标头或查询字符串参数,但不能同时添加。

http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#RequestWithSTS

然而,从骆驼docs,这不是明显的如何通过令牌,或者是否他们甚至实施了这种支持。

+0

我正在向您提出的有关骆驼支持此事的相同结论。我会看看是否有任何实现或缺乏骆驼接口内传递自定义凭据的规则。我发现的任何其他信息将在您的答案下作为单独的答案和评论发布! –

+0

似乎最近的aws sdk与骆驼不兼容,因此凭证检索工作正常,但客户端不能与骆驼一起使用。 –

0

经过深入研究,我发现这是骆驼不支持最新版本的AWS SDK的问题。它成功地检索凭证(请参阅this文档),但创建的客户端本身打破了骆驼。

我能找到的唯一解决方案是自定义AWS SDK,以在构建客户端时返回凭据,然后使用所述凭据构建与使用旧版AWS SDK的Camel兼容的客户端...尽管包含相同SDK的两个版本是非常不切实际和必要的,但它可以工作。

相关问题