Amazon web services 假设STS客户端不工作,Java上的AWS文档?

Amazon web services 假设STS客户端不工作,Java上的AWS文档?,amazon-web-services,amazon-s3,aws-java-sdk,aws-sts,Amazon Web Services,Amazon S3,Aws Java Sdk,Aws Sts,作为预请求,请参见第页 所以我可以创建一个小应用程序,它实际上是他们提供的代码的复制粘贴。它确实为给定的用户运行,我已经将全局变量更改为正确的值,并且我可以通过AWS CLI承担我想要的STS角色。但是,此代码仍然不会承担适当的角色 我将代码导出为可执行jar,将其放到我的EC2实例(基本AWS linux实例)上,然后运行它。我确实让它从STS凭证中输出正确的密钥,但是一旦它到达S3客户端,我就得到了拒绝访问的消息(403) 我的职责如下: EC2没有角色,但在凭证文件中有一个用户访问信息(

作为预请求,请参见第页

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

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

我的职责如下:

  • EC2没有角色,但在凭证文件中有一个用户访问信息(我们称他为MyUser)
  • MyUser能够承担STS角色和IAM功能(IAM功能不是必需的,只是出于测试目的)
  • STS角色只能由MyUser设置,并允许完全访问帐户中的S3
AWS文档有时会出错,但我找不到任何其他人遇到此代码的问题。正如我所说的,如果我通过CLI执行相同的假定STS角色的过程,我可以做到这一点,并且它可以正常工作,这会让人更加困惑

提前感谢任何能提供帮助的人

根据他们的文档,您的页面有错误的代码。AssumeRole方法具有不同的示例代码不正确。还有其他文档可以解决这个问题,请参见此。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();
上述代码应替换为以下代码


您是否使用相同的凭据从同一台计算机上运行此代码和CLI?是。EC2没有权限。它具有MyUser的凭据,因此它充当用户。我在此实例上运行cli。我调用假定角色CLI命令并正确调整环境变量。当我尝试S3命令时,它们会工作。
AssumeRoleResult response = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = response.getCredentials();