38

ドキュメントのどこにもこれが見つからないようです。AccessKeyId や SecretKey などの BasicAWSCredentials で認証されている場合、AWS アカウント ID を取得できますか?

4

12 に答える 12

35

アップデート

AWS は、専用の STS API アクションGetCallerIdentityを導入することで、この長年のギャップに静かに対処しました。これは、AWS アカウント ID を含む、API を呼び出すために使用される認証情報を持つ IAM ID に関する詳細を返します。たとえば、いくつかのサンプル応答があります。

<GetCallerIdentityResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
  <GetCallerIdentityResult>
   <Arn>arn:aws:iam::123456789012:user/Alice</Arn>
    <UserId>AKIAI44QH8DHBEXAMPLE</UserId>
    <Account>123456789012</Account>
  </GetCallerIdentityResult>
  <ResponseMetadata>
    <RequestId>01234567-89ab-cdef-0123-456789abcdef</RequestId>
  </ResponseMetadata>
</GetCallerIdentityResponse>

AWS Command Line Interfaceを使用して、アカウント ID のみを取得できます。以下に例を示します。

$ aws sts get-caller-identity --output text --query Account
121371349383

最初の回答

これは、GetUserアクション ( AWS SDK for JavaのgetUser()で利用可能) を使用して、 AWS Identity and Access Management (IAM)を介して少なくとも間接的に可能です。

ユーザーのパス、GUID、ARN など、指定されたユーザーに関する情報を取得します。

ユーザー名を指定しない場合、IAM は、リクエストに署名する AWS アクセス キー ID に基づいて暗黙的にユーザー名を決定します。

返されたUserデータ型 ( Class User ) には、 user を指定する Amazon リソースネーム (ARN)であるArn要素 ( getArn() ) が含まれています。これについては、IAM エンティティの識別子、特にセクションARNsで詳しく説明しています。ここでは、ユーザー リソース タイプの形式について説明しています。

arn:aws:iam::{account_ID}:user/{path/to/user/UserName}

Example: arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/Bob
于 2012-04-17T20:45:28.767 に答える
10

AWS CLI ツールがあれば、次のことができます。

aws iam get-user | awk '/arn:aws:/{print $2}'
于 2015-01-06T16:35:10.257 に答える
8

最新の API では、ユーザー ID を直接見つける方法があります。

BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials("your access key", "your secret key");
AmazonIdentityManagementClient iamClient = new AmazonIdentityManagementClient(basicAWSCredentials);
String userId = iamClient.getUser().getUser().getUserId();
于 2013-11-24T12:08:01.207 に答える
2

私はこれを理想的なシナリオとは考えていませんが、仕事は完了しています。これは AWSSDK 3.0 を使用します。

public string GetUserId()
{
    AmazonIdentityManagementServiceClient c = 
        new AmazonIdentityManagementServiceClient();

    GetUserRequest request = new GetUserRequest();
    GetUserResponse response = c.GetUser(request);

    //parse it from the ARN
    //should be similar to "arn:aws:iam::111111111111:user/username"
    string[] arnParts = response.User.Arn.Split(new char[] { ':' });
    return arnParts[4];
}
于 2015-09-11T02:47:25.000 に答える
2

面白い発見がありました。存在しない RoleName で GetRole を呼び出すと、返されるエラー メッセージに呼び出し元のアカウントの ARN が含まれているため、そこからアカウント番号を解析するだけです。呼び出し元が GetRole を呼び出す権限を持っていない場合でも、考えられるすべてのケースで機能するため、これは素晴らしいことです。

エラーメッセージは次のとおりです。

User: arn:aws:sts::669916120315:assumed-role/CloudMail_Server/i-31dd19cd is not authorized to perform: iam:GetRole on resource: role _no_such_role_

エラー メッセージの「669916120315」の部分は、AWS アカウント ID です。

于 2015-03-19T13:20:58.660 に答える