【问题标题】:How to use IAM role with AWS Java SDK如何将 IAM 角色与 AWS Java 开发工具包一起使用
【发布时间】:2021-01-17 03:36:55
【问题描述】:

我的用例如下:

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

有什么办法吗?

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    已经有一段时间了,但目前情况并非如此,现在可以通过 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 以编程方式完成所有这些操作,但这需要您直接配置所有服务,因此它可能不如只适用于所有服务的配置文件方法方便。

    【讨论】:

    • 问题是关于不使用凭据,但在您的回答中,您仅间接使用凭据,对吗?
    • 谢谢,这真的帮助了我。顺便说一句,gradle 中的 aws-java-sdk-sts" 是工件 software.amazon.awssdk:sts:VERSION(确认它适用于版本 = 2.5.29
    • Gradle 与它无关。我认为您的意思是:使用 AWS SDK for Java 2.x 时使用的工件是 software.amazon.awssdk:sts vs com.amazonaws:aws-java-sdk-sts 用于 AWS SDK for Java 1.x
    【解决方案2】:

    您只能在 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

    【讨论】:

    • 感谢您的回复! IAM 角色也可以在 ECS 级别(任务/容器)关联。不知道你为什么说它的限制只在 EC2 级别。
    • 抱歉,我知道这是一个新功能,所以我才忘记了。 Lambda 函数也可以使用角色。
    猜你喜欢
    • 1970-01-01
    • 2016-12-15
    • 2018-01-19
    • 2021-07-08
    • 2020-01-18
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多