使用AWS IAM用户角色的动机是让AWS自动处理每个服务调用的AWS密钥/凭证。这种方法正在Apache Camel背后使用,后者使用凭证安全地进行数据传输,即不在源代码中存储任何凭证。
我发现的问题是IAM工具中的凭据只能在aws cli中工作。
例如,我使用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 Camel的知识,我的代码示例如下:
String awsS3Connection = "aws-s3://x" + "?accessKey=" + accessId +
"&secretKey=" + accessKey;
from(awsS3Connection)
.to(importProcessingEndpoint);
答案 0 :(得分:1)
临时凭证对服务API没有意义 - 并且无法识别 - 除非它们与其附带的会话/安全令牌一起使用。
正在准备签名的请求时......
将会话令牌添加到HTTP标头或名为
X-Amz-Security-Token
的查询字符串参数。您将会话令牌添加到HTTP标头或查询字符串参数,但不是两者都添加。
但是,从Camel docs来看,如何传递令牌或者是否实现了对此的支持并不明显。
答案 1 :(得分:0)