回答:
Secure Token Serviceサブコマンドからアカウント番号を取得するにget-caller-identity
は、以下を使用します。
aws sts get-caller-identity --query Account --output text
aws sts get-caller-identity|jq -r ".Account"
aws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
--query 'Account'
パーツを取り外したときに機能します。
jq
、システムへの関与やシステムへのインストールに常に依存することはできません。一部のサーバーは、セキュリティ上の理由により、無関係なパッケージのインストールを禁止しています。あなたはこのようなことをすることができますaws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'
が、それは少し厄介であり--query 'Account' --output text
、その時点でそうすることもできます。
AWS PowerShell CLIに対する私の関連する回答から、アカウントIDは、ユーザーが作成したリソースの一部であり、自動的に作成されます。一部のリソースでは、OwnerIdとしてもリストされます。
デフォルトセキュリティグループは、各リージョンのデフォルトVPCで予約済みセキュリティグループとして自動的に作成されます。ドキュメントから:
デフォルトのセキュリティグループは削除できません。EC2-Classicのデフォルトのセキュリティグループを削除しようとすると、次のエラーが発生します。Client.InvalidGroup.Reserved:セキュリティグループ「デフォルト」は予約されています。VPCデフォルトセキュリティグループを削除しようとすると、次のエラーが発生します。Client.CannotDelete:指定されたグループ: "sg-51530134"名前: "default"はユーザーが削除できません。
これにより、EC2クラシックを使用している場合、またはデフォルトのVPCを使用している場合(*使用しない場合はエッジケースを参照)、アカウントIDを取得するための信頼できる候補になります。
例:
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セルフサービスの役割のみが必要なので、私のお気に入りの方法を使用します。