如何通过 AWS Java SDK 使用 IAM 角色

How to use IAM role with AWS Java SDK

我的用例如下:

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

有什么办法吗?

提前感谢您的帮助。

您只能在 EC2 实例、ECS 容器和 Lambda 函数上使用基于角色的身份验证。无法在本地或本地服务器上使用它们。

DefaultAWSCredentialsProviderChain will automatically pick the EC2 Instance Role if it can't find the credentials via any of other methods. You can also create a custom AWSCredentialsProviderChain object with only injecting a instance of InstanceProfileCredentialsProvider点赞

AWSCredentialsProviderChain myCustomChain = new AWSCredentialsProviderChain(new InstanceProfileCredentialsProvider());

更多信息:https://docs.aws.amazon.com/java-sdk/latest/developer-guide/java-dg-roles.html

已经有一段时间了,但目前情况并非如此,现在可以通过 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 中定义的凭据通过您提供的 role_arn 调用 assumeRole。您当然需要确保拥有这些凭据的用户有权担任该角色。

请注意,如果您的项目中没有包含完整的 Java SDK(即您只包含所需服务的库),则还需要包含 aws-java-sdk-sts 类路径中的库才能正常工作。

也可以使用 STSAssumeRoleSessionCredentialsProvider 以编程方式完成所有这些操作,但这需要您直接配置所有服务,因此它可能不如配置文件方法方便,后者应该只适用于所有服务。