使用AWS IAM用户角色的动机是让AWS自动处理每个服务调用的AWS密钥/凭证。在Apache Camel之后使用了这种方法,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);
临时凭证对于服务API毫无意义,并且无法被服务API所识别,除非它们与随附的会话/安全令牌结合使用。
正在准备签名的请求时...
您可以将会话令牌添加到HTTP标头或名为的查询字符串参数中
X-Amz-Security-Token
。您将会话令牌添加到HTTP标头或查询字符串参数,但不能两者都添加。
但是,从Camel文档中,如何传递令牌以及它们是否甚至实现了对此的支持尚不清楚。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句