gpt4 book ai didi

java - 使用ec2上的java SDK在aws中承担不同的角色,它使用分配的IAM进行访问

转载 作者:行者123 更新时间:2023-12-01 17:15:18 25 4
gpt4 key购买 nike

我正在 EC2 实例上的 docker 容器中运行一个简单的 Java 应用程序。 java应用程序本身没有硬编码凭证,并且aws sdk假定分配给EC2实例的凭证。

这工作正常,但我现在需要它在执行过程中动态地承担不同的角色。我试图让下面的代码来帮助做到这一点,但我在倒数第二行“AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);”遇到异常

    public void awsAssumeRole(String region,String roleARN, String roleName) {
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(region)
.build();

AssumeRoleRequest roleRequest = new AssumeRoleRequest()
.withRoleArn(roleARN)
.withRoleSessionName(roleName);
AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = roleResponse.getCredentials();
}

下面的异常:

Exception in thread "main" java.lang.IllegalArgumentException: No AWS profile named 'default'

我传递的变量采用以下格式:

roleARN=arn:aws:iam::account-id
roleName=role/role-name-with-path

我不知道如何指定默认配置文件,因为运行应用程序的 docker 容器上没有凭据,甚至没有 .aws 文件夹来放置配置,而且我无法指定默认配置文件,因为我们不允许编码凭据。

有没有办法可以在我的案例中实现角色切换?

我当前在 intellij 中运行应用程序,使用临时生成的凭据作为环境变量传递,试图复制应用程序在 docker 容器中运行期间看到的内容,但我不知道这在以下方面有多准确复制应用程序在 EC2 实例上的 docker 容器中运行的方式。

我对 AWS 角色也很陌生,角色切换请原谅任何误用的术语。

非常感谢

最佳答案

根据评论,有两个问题:

  1. roleARN 格式不正确。它应该是角色的全部内容。
  2. 使用 ProfileCredentialsProvidergets 而不是 EnvironmentVariableCredentialsProvider

关于java - 使用ec2上的java SDK在aws中承担不同的角色,它使用分配的IAM进行访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61401767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com