【发布时间】:2021-01-17 03:36:55
【问题描述】:
我的用例如下:
我需要使用 JAVA 开发工具包并借助 IAM 角色将一些数据推送到 AWS SQS 队列中(不使用凭证提供程序实施)。
有什么办法吗?
提前感谢您的帮助。
【问题讨论】:
标签: amazon-web-services amazon-sqs amazon-iam
我的用例如下:
我需要使用 JAVA 开发工具包并借助 IAM 角色将一些数据推送到 AWS SQS 队列中(不使用凭证提供程序实施)。
有什么办法吗?
提前感谢您的帮助。
【问题讨论】:
标签: amazon-web-services amazon-sqs amazon-iam
已经有一段时间了,但目前情况并非如此,现在可以通过 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 以编程方式完成所有这些操作,但这需要您直接配置所有服务,因此它可能不如只适用于所有服务的配置文件方法方便。
【讨论】:
software.amazon.awssdk:sts:VERSION(确认它适用于版本 = 2.5.29)
software.amazon.awssdk:sts vs com.amazonaws:aws-java-sdk-sts 用于 AWS SDK for Java 1.x
您只能在 EC2 实例、ECS 容器和 Lambda 函数上使用基于角色的身份验证。无法在本地或本地服务器上使用它们。
DefaultAWSCredentialsProviderChain 如果无法通过任何其他方法找到凭证,它将自动选择 EC2 实例角色。您还可以创建一个自定义的 AWSCredentialsProviderChain 对象,只需像这里一样向它注入一个 InstanceProfileCredentialsProvider 的实例
AWSCredentialsProviderChain myCustomChain = new AWSCredentialsProviderChain(new InstanceProfileCredentialsProvider());
欲了解更多信息:https://docs.aws.amazon.com/java-sdk/latest/developer-guide/java-dg-roles.html
【讨论】: