如何使用java api获取AWS帐户详细信息?不适用于IAM用户

如何使用java api获取AWS帐户详细信息?不适用于IAM用户,java,amazon-web-services,aws-sdk,amazon-iam,Java,Amazon Web Services,Aws Sdk,Amazon Iam,我们有两个AWS账户。一个用于生产,另一个用于测试。我们需要区分我们正在运行的环境。我们可以看到,一个简单的方法是获得帐户名,一旦我们得到,它将是非常直接的。但是,我们不知道如何从AWS凭据或属性获取它。有人知道如何使用AWS凭据获取帐户信息吗? 我考虑了帐户权限、帐户类型等的可能性,但我认为这不应该阻止我们获取帐户名 您可以看到。这是由返回的GetUserResult有一个要获取的方法。此用户具有获取所需信息的所有字段。查看get_用户(iam用户)中返回的帐号 例如 “Arn”:“Arn:a

我们有两个AWS账户。一个用于生产,另一个用于测试。我们需要区分我们正在运行的环境。我们可以看到,一个简单的方法是获得帐户名,一旦我们得到,它将是非常直接的。但是,我们不知道如何从AWS凭据或属性获取它。有人知道如何使用AWS凭据获取帐户信息吗?
我考虑了帐户权限、帐户类型等的可能性,但我认为这不应该阻止我们获取帐户名

您可以看到。这是由返回的
GetUserResult
有一个要获取的方法。此
用户
具有获取所需信息的所有字段。

查看get_用户(iam用户)中返回的帐号 例如


“Arn”:“Arn:aws:iam::THISISYOURNUMERICACCOUNTNUMBER:user/lcerezo”

AmazonIdentityManagementClient iamClient=new AmazonIdentityManagementClient()


字符串accountNumber=iamClient.getUser().getUser().getArn().split(“:”[4])

如果您使用的是安全令牌服务,您将无法获取用户详细信息以获取账号。您可以改为使用该角色。下面是示例代码

AmazonIdentityManagementClient iamClient = new AmazonIdentityManagementClient();
GetRoleRequest getRoleRequest = new GetRoleRequest();
getRoleRequest.setRoleName("roleName");
String accountNumber = iamClient.getRole(getRoleRequest).getRole().getArn().split(":")[4];

对于较新的aws java sdk,您可以使用:


使用AWS v2.0 Java SDK,您可以使用

首先向
sts
模块添加一个依赖项,例如在gradle中:

implementation platform("software.amazon.awssdk:bom:2.14.2")
implementation "software.amazon.awssdk:sts"
然后:

将返回:


GetCallerIdentityResponse(UserId=AJAIVBQXMUAJAIVBQXMU,Account=298232720644,Arn=Arn:aws:iam::298232720644:user/adrian)

aws具有资源组功能,它将帮助您解决问题。感谢@BMW,得到了一个要点。在Thank@Sri.U处回答,该链接在用户无权访问getUser()时特别有用然后,我们可以通过解析错误消息来获取帐户id。添加更多详细信息,说明为什么这个答案对OPT有效不是最好的方法,但对我有效。希望亚马逊的家伙们正在阅读这样的帖子,并将getAccountId添加到API中。
implementation platform("software.amazon.awssdk:bom:2.14.2")
implementation "software.amazon.awssdk:sts"
log.info("{}", StsClient.create().getCallerIdentity());