我的用例如下:
我需要使用JAVA SDK并借助IAM角色(不使用凭据提供程序实现)将一些数据推送到AWS SQS队列。
有没有办法做到这一点?
提前感谢您的帮助。
答案 0 :(得分:4)
您只能在EC2实例,ECS容器和Lambda函数上使用基于角色的身份验证。无法在本地或在本地服务器上使用它们。
如果无法通过任何其他方法找到凭据,DefaultAWSCredentialsProviderChain将自动选择EC2实例角色。您也可以创建一个自定义AWSCredentialsProviderChain对象,只需向其注入一个InstanceProfileCredentialsProvider实例,就像这里一样
myWebView = (WebView) rootView.findViewById(R.id.webview);
了解更多信息:https://docs.aws.amazon.com/java-sdk/latest/developer-guide/java-dg-roles.html
答案 1 :(得分:3)
已经有一段时间了,但是目前情况并非如此,现在可以与用户一起对Java SDK使用承担角色。您可以按照以下步骤在.aws/credentials
文件中配置凭据:
[useraccount]
aws_access_key_id=<key>
aws_secret_access_key=<secret>
[somerole]
role_arn=<the ARN of the role you want to assume>
source_profile=useraccount
然后,当您启动时,设置一个环境变量:AWS_PROFILE=somerole
SDK将使用useraccount
中定义的凭据用您提供的assumeRole
调用role_arn
。当然,您需要确保拥有这些凭据的用户具有承担该角色的权限。
请注意,如果您没有在项目中包含完整的Java SDK(即,仅包含所需服务的库),则还需要在类路径中包含aws-java-sdk-sts
库,以用于这个工作。
也可以使用STSAssumeRoleSessionCredentialsProvider
以编程方式完成所有这些操作,但这将要求您直接配置所有服务,因此它可能不像仅适用于所有服务的配置文件方法那样方便