Швидкий спосіб отримати номер рахунку AWS за допомогою інструментів CLI AWS?


99

Шукаючи швидкий спосіб отримати номер мого рахунку, я спочатку думав скористатися цим, aws iam get-account-authorization-details --max-items 1але є кілька проблем із цим. Чи є спосіб зробити це, який може не перетинати джерела рахунків?

Відповіді:


217

Ви можете отримати номер рахунку в підкоманді Secure Token Service,get-caller-identity використовуючи наступне:

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

2
Це має бути набагато надійніше, ніж групи безпеки, оскільки Ви можете видалити групу безпеки за замовчуванням.
Джастін,

4
коротша команда, якщо подавати на jqaws sts get-caller-identity|jq -r ".Account"
BMW

потрібно було зберігати у змінній, але отримував додатковий рядок, це було б краще для цьогоaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Асім

Для мене це працює, коли я виймаю --query 'Account'деталь.
coliveira

@BMW На жаль, ви не завжди можете розраховувати на jqучасть або встановлення в системі. Деякі сервери забороняють сторонні інсталяції пакетів через безпеку. Ви могли б зробити щось подібне, aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'але це трохи дратує, і ви могли б також зробити це --query 'Account' --output textв той момент.
ehime

33

З моєї відповіді на відповідь для AWS PowerShell CLI , ваш ідентифікатор облікового запису є частиною Arn ресурсів, які ви створюєте ... і тих, які автоматично створюються для вас. Деякі ресурси також відображатимуть вас як OwnerId.

Група безпеки за замовчуванням автоматично створюється для вас у VPC кожного регіону за замовчуванням як зарезервована група безпеки. З документації :

Ви не можете видалити групу безпеки за замовчуванням. Якщо ви спробуєте видалити групу безпеки за замовчуванням EC2-Classic, ви отримаєте таку помилку: Client.InvalidGroup.Reserved: Група безпеки "за замовчуванням" зарезервована. Якщо ви спробуєте видалити групу безпеки VPC за замовчуванням, ви отримаєте таку помилку: Client.CannotDelete: вказана група: "sg-51530134" name: "default" не може бути видалений користувачем.

Це робить його надійним кандидатом для отримання нашого ідентифікатора облікового запису, якщо ви перебуваєте в класичній версії EC2 або маєте VPC за замовчуванням (* див. Крайні випадки, якщо цього немає).

Приклад:

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

Це використовує --queryдля фільтрації результату до "ідентифікатора власника" для першого результату цього запиту, а потім використовує --outputдля виведення ідентифікатора вашого облікового запису як відкритого тексту:

123456781234

Крайові футляри:

(Спасибі @kenchew) Зверніть увагу, що якщо ви видалили свій VPC за замовчуванням у певному регіоні, ця група безпеки більше не існує, і вам слід використовувати одне з таких альтернативних рішень:

Подальше читання:


9

Якщо ви працюєте на сервері, який працює із передбачуваною роллю, ви не можете зателефонувати aws sts get-caller-identity. Крім того, describe-security-groupsоскільки ви не завжди можете використовувати --group-namesфільтр (він не працює, якщо у вас немає VPC за замовчуванням), тому просто виберіть першу групу безпеки. Я виявив, що це найнадійніше, незалежно від того, який тип автентифікації ви використовуєте або який тип VPC у вас є.

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

Погодьтеся з цим. get-caller-identity завжди, здається, повертає Обліковий запис користувачів, незалежно від ролі, яку вони взяли на себе. Якщо ви хочете взяти на себе роль, вам, здається, потрібно ще щось подібне використовувати (через 2 роки ..)
suitedupgeek

2

Моїм улюбленим методом є використання, aws iam get-user [--profile <profile>]оскільки для роботи вам потрібна лише роль самообслуговування IAM.


3
Зауважте, що це не працює, коли ви використовуєте AssumedRole
Sanoob
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.