簡體   English   中英

在使用分配的 IAM 進行訪問的 ec2 上使用 java SDK 在 aws 中扮演不同的角色

[英]assume different role in aws using java SDK on ec2 which uses assigned IAM for access

我在 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 容器上沒有憑據,甚至沒有用於放置配置的 a.aws 文件夾,而且我無法這樣做,因為我們不允許對憑據進行編碼。

有沒有辦法在我的情況下實現角色切換?

我在 intellij 中運行當前應用程序,使用臨時生成的憑據作為環境變量傳遞,以嘗試復制應用程序在 docker 容器中運行時看到的內容,但我不知道這在復制如何准確應用程序將在 EC2 實例上的 docker 容器中運行。

我對 AWS 角色也很陌生,角色轉換請原諒任何濫用的術語。

非常感謝

根據評論,有兩個問題:

  1. roleARN的格式不正確。 它應該是完整的角色。
  2. 使用ProfileCredentialsProvidergets而不是EnvironmentVariableCredentialsProvider

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM