关于 Java 的 AWS 文档假设 STS 客户端不工作?

AWS Documentation on Java Assuming STS Client not working?

作为先决条件,请参阅 this 页。

所以我可以创建一个小应用程序,它实际上是他们提供的代码的复制粘贴。它为给定用户执行 运行,我已将全局变量更改为正确的值,并且我可以通过 AWS CLI 承担我想要的 STS 角色。然而,这段代码仍然不会承担适当的角色。

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

我的角色如下:

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

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

linked has wrong code according to their documentation. The AssumeRole method has different example code is incorrect. There is other documentation that solves the issue see this page的页面。 API 文档示例有

AssumeRoleResult response = client.assumeRole(request);

其中 AssumeRole 函数 return 是一个 AssumeRoleResult 对象,它的凭据不同于 return 来自 GetSessionTokenRequest class 的凭据。凭据 returned 不同 lengths/sizes 并且由于某种原因无效。

修复:

他们 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();