假设Java STS客户端不起作用,有关Java的AWS文档?

时间:2018-08-10 14:51:39

标签: amazon-web-services amazon-s3 aws-java-sdk aws-sts

先决条件,请参见this页。

因此,我可以创建一个小应用程序,该应用程序实际上是其提供的代码的复制粘贴。它确实为给定用户运行,我已将全局变量更改为适当的值,并且可以通过AWS CLI承担我想要的STS角色。但是,此代码仍将不发挥适当的作用。

我将代码导出为可执行jar,将其放在我的EC2实例(基本AWS linux实例)上,然后运行它。我确实从正确且正确的STS凭证中输出了密钥,但是一旦它到达S3客户端,我就会被拒绝访问(403)。

我的角色如下:

  • EC2没有作用,但是凭据文件中有用户访问信息(我们称其为MyUser)
  • MyUser能够承担STS角色和IAM功能(IAM功能不是必需的,仅用于测试目的)
  • STS角色只能由MyUser承担,并且允许在帐户内完全访问S3

有时会碰到AWS文档,但是我找不到其他遇到此代码问题的人。就像我说的那样,如果我执行通过CLI承担STS角色的相同过程,那么我可以做到这一点,并且它可以正常工作,这会使情况更加混乱。

在此先感谢任何可以提供帮助的人!

1 个答案:

答案 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();