アカウント番号をすばやく取得する方法を探していましたが、最初はaws iam get-account-authorization-details --max-items 1
を使用することを考えていましたが、この方法ではいくつかの問題があります。アカウントの起源を越えないかもしれないこれを行う方法はありますか?
以下を使用して、 Secure Token Service サブコマンド get-caller-identity
からアカウント番号を取得できます。
aws sts get-caller-identity --output text --query 'Account'
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を削除した場合、このセキュリティグループは存在しないため、これらの代替ソリューションのいずれかを使用する必要があります。
さらに読む:
想定された役割で実行されているサーバーで実行している場合、aws sts get-caller-identity
を呼び出すことはできません。また、describe-security-groups
では常に--group-names
フィルターを使用できるわけではないため(デフォルトのVPCがない場合は機能しません)、最初のセキュリティグループを選択するだけです。これは、使用する認証の種類やVPCの種類に関係なく、最も信頼性が高いことがわかりました。
aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text
私のお気に入りの方法は、aws iam get-user [--profile <profile>]
を使用することです。これが機能するには、IAMセルフサービスロールのみが必要です。