web-dev-qa-db-ja.com

AWS CLIツールからAWSアカウント番号を取得する簡単な方法は?

アカウント番号をすばやく取得する方法を探していましたが、最初はaws iam get-account-authorization-details --max-items 1を使用することを考えていましたが、この方法ではいくつかの問題があります。アカウントの起源を越えないかもしれないこれを行う方法はありますか?

80
ehime

以下を使用して、 Secure Token Service サブコマンド get-caller-identity からアカウント番号を取得できます。

aws sts get-caller-identity --output text --query 'Account'

178
Taras Alenin

AWS PowerShell CLIの関連する回答 から、アカウントIDは、作成するリソースの一部と、自動的に作成されるリソースの一部です。一部のリソースでは、OwnerIdとしてリストされます。

デフォルトセキュリティグループは、各地域のデフォルトVPCに予約済みセキュリティグループとして自動的に作成されます。 ドキュメント から:

デフォルトのセキュリティグループは削除できません。 EC2-Classicのデフォルトセキュリティグループを削除しようとすると、次のエラーが表示されます。Client.InvalidGroup.Reserved:セキュリティグループ 'default'は予約されています。 VPCのデフォルトセキュリティグループを削除しようとすると、次のエラーが表示されます。Client.CannotDelete:指定されたグループ: "sg-51530134" name: "default"はユーザーが削除できません。

これにより、EC2クラシックまたはデフォルトVPCを持っている限り、アカウントIDを取得するための信頼できる候補になります(*そうでない場合はEdgeケースを参照してください)。

例:

aws ec2 describe-security-groups \
    --group-names 'Default' \
    --query 'SecurityGroups[0].OwnerId' \
    --output text

これは、--queryを使用して、このリクエストからの最初の結果の出力を「所有者ID」に絞り込み、次に--outputを使用してアカウントIDをプレーンテキストとして出力します。

123456781234

エッジケース:

(ありがとう@kenchew)特定のリージョンでデフォルトのVPCを削除した場合、このセキュリティグループは存在しないため、これらの代替ソリューションのいずれかを使用する必要があります。

さらに読む:

31
Anthony Neace

想定された役割で実行されているサーバーで実行している場合、aws sts get-caller-identityを呼び出すことはできません。また、describe-security-groupsでは常に--group-namesフィルターを使用できるわけではないため(デフォルトのVPCがない場合は機能しません)、最初のセキュリティグループを選択するだけです。これは、使用する認証の種類やVPCの種類に関係なく、最も信頼性が高いことがわかりました。

aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text
9
Philip Kirkland

私のお気に入りの方法は、aws iam get-user [--profile <profile>]を使用することです。これが機能するには、IAMセルフサービスロールのみが必要です。

1
user2976775