How to use IAM role with AWS Java SDK

Lovey picture Lovey · Aug 16, 2016 · Viewed 9.1k times · Source

My use case is as follows:

I need to push some data into AWS SQS queue using JAVA SDK and by help of IAM role (not using credential provider implementation).

Is there any way to do that?

Thanks for help in advance.

Answer

Jon Nichols picture Jon Nichols · Oct 14, 2018

It's been a while, but this is not currently the case, it is now possible to use assume role with the Java SDK with a user. You can configure credentials in your .aws/credentials file as follows:

[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

Then, when you launch, set an environment variable: AWS_PROFILE=somerole

The SDK will use the credentials defined in useraccount to call assumeRole with the role_arn you provided. You'll of course need to be sure that the user with those credentials has the permissions to assume that role.

Note that if you're not including the full Java SDK in your project (i.e. you're including just the libraries for the services you need), you also need to include the aws-java-sdk-sts library in your classpath for this to work.

It is also possible to do all of this programmatically using STSAssumeRoleSessionCredentialsProvider, but this would require you to directly configure all of the services so it might not be as convenient as the profile approach which should just work for all services.