AWS 关于 Java 的文档 假设 STS 客户端无法正常工作?



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

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

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

我的角色如下:

  • EC2 没有角色,但在凭证文件中具有用户访问信息(我们称他为 MyUser(
  • MyUser 能够代入 STS 角色和 IAM 功能(IAM 功能不是必需的,仅用于测试目的(
  • STS 角色只能由 MyUser 代入,并允许在账户中完全访问 S3

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

提前感谢任何可以提供帮助的人!

根据其文档,您链接的页面具有错误的代码。方法具有不同的示例代码不正确。还有其他文档可以解决此问题,请参阅此页面。API 文档示例具有

AssumeRoleResult response = client.assumeRole(request);

其中,AssumeRole 函数返回一个 AssumeRoleResult 对象,该对象具有与从 GetSessionTokenRequest 类返回的凭据不同的凭据。返回的凭据是不同的长度/大小,并且由于某种原因无效。

修复:

其文档中显示的此代码无效。

stsClient.assumeRole(roleRequest);
GetSessionTokenRequest getSessionTokenRequest = new GetSessionTokenRequest();
getSessionTokenRequest.setDurationSeconds(900);
GetSessionTokenResult sessionTokenResult = stsClient.getSessionToken(getSessionTokenRequest);
Credentials sessionCredentials = sessionTokenResult.getCredentials();

上面的代码应替换为此处找到的以下内容。

AssumeRoleResult response = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = response.getCredentials();

最新更新