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

How to get AWS account details using java api? Not for IAM user

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

你可以看到GetUserResult. This is returned by getUser(). GetUserResult has a method to get User。此 User 包含获取所需信息的所有字段。

查看get_user中返回的账号(iam用户) 例如,

"Arn": "arn:aws:iam::THISISYOURNUMERICACCOUNTNUMBER:user/lcerezo"

AmazonIdentityManagementClient iamClient = new AmazonIdentityManagementClient();

String 帐号 = 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,您可以使用 getCallerIdentity:

AWSSecurityTokenServiceClientBuilder.standard().build()
    .getCallerIdentity(new GetCallerIdentityRequest()).getAccount()

使用AWS v2.0 Java SDK,可以使用software.amazon.awssdk.services.sts.StsClient#getCallerIdentity.

首先对sts模块添加依赖,例如在gradle:

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

然后:

log.info("{}", StsClient.create().getCallerIdentity());

将 return:

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