使用AWS IAM的AWS S3存储桶API调用用户角色凭证:
问题描述:
使用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);
答
临时凭证是毫无意义的 - 和未确认的 - 的API,除非他们是在配合使用他们的服务随附的会话/安全令牌。
当正在准备签署的请求......
您加入会话令牌HTTP头或命名
X-Amz-Security-Token
查询字符串参数。您将会话令牌添加到HTTP标头或查询字符串参数,但不能同时添加。
然而,从骆驼docs,这不是明显的如何通过令牌,或者是否他们甚至实施了这种支持。
我正在向您提出的有关骆驼支持此事的相同结论。我会看看是否有任何实现或缺乏骆驼接口内传递自定义凭据的规则。我发现的任何其他信息将在您的答案下作为单独的答案和评论发布! –
似乎最近的aws sdk与骆驼不兼容,因此凭证检索工作正常,但客户端不能与骆驼一起使用。 –