先决条件,请参见this页。
因此,我可以创建一个小应用程序,该应用程序实际上是其提供的代码的复制粘贴。它确实为给定用户运行,我已将全局变量更改为适当的值,并且可以通过AWS CLI承担我想要的STS角色。但是,此代码仍将不发挥适当的作用。
我将代码导出为可执行jar,将其放在我的EC2实例(基本AWS linux实例)上,然后运行它。我确实从正确且正确的STS凭证中输出了密钥,但是一旦它到达S3客户端,我就会被拒绝访问(403)。
我的角色如下:
有时会碰到AWS文档,但是我找不到其他遇到此代码问题的人。就像我说的那样,如果我执行通过CLI承担STS角色的相同过程,那么我可以做到这一点,并且它可以正常工作,这会使情况更加混乱。
在此先感谢任何可以提供帮助的人!
答案 0 :(得分:2)
您linked的页面根据其文档有错误的代码。 AssumeRole方法具有不同的示例代码不正确。还有其他解决该问题的文档,请参见此page。 API文档示例具有
AssumeRoleResult response = client.assumeRole(request);
其中AssumeRole函数返回一个AssumeRoleResult对象,该对象具有与从GetSessionTokenRequest类返回的凭据不同的凭据。返回的凭据的长度/大小不同,由于某种原因无效。
修复:
documentation上显示的此代码无效。
stsClient.assumeRole(roleRequest);
GetSessionTokenRequest getSessionTokenRequest = new GetSessionTokenRequest();
getSessionTokenRequest.setDurationSeconds(900);
GetSessionTokenResult sessionTokenResult = stsClient.getSessionToken(getSessionTokenRequest);
Credentials sessionCredentials = sessionTokenResult.getCredentials();
上面的代码应替换为以下找到的here。
AssumeRoleResult response = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = response.getCredentials();