amazon-web-services - 違い - iam management console




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

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

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

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


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

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

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

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

デフォルトのセキュリティグループは削除できません。 EC2-Classicのデフォルトセキュリティグループを削除しようとすると、次のエラーが表示されます。Client.InvalidGroup.Reserved:セキュリティグループ「default」は予約されています。 VPCのデフォルトセキュリティグループを削除しようとすると、次のエラーが表示されます。Client.CannotDelete:指定されたグループ: "sg-51530134" name: "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を削除した場合、このセキュリティグループは存在しないため、これらの代替ソリューションのいずれかを使用する必要があります。

  • @TarasごとにクエリSTS get-caller-identity
  • @Phillipごとに返された最初のセキュリティグループを使用する

参考文献:





aws-sts