如何在AWS Java SDK中使用IAM角色

时间:2016-08-16 20:04:37

标签: amazon-web-services amazon-sqs amazon-iam

我的用例如下:

需要使用JAVA SDK并借助IAM角色(不使用凭据提供程序实现)将一些数据推送到AWS SQS队列。

有没有办法做到这一点?

提前感谢您的帮助。

2 个答案:

答案 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以编程方式完成所有这些操作,但这将要求您直接配置所有服务,因此它可能不像仅适用于所有服务的配置文件方法那样方便