Быстрый способ получить номер учетной записи AWS с помощью инструментов AWS CLI?

100

В поисках быстрого способа получить номер моей учетной записи, я изначально думал об использовании, aws iam get-account-authorization-details --max-items 1но есть несколько проблем с тем, чтобы сделать это таким образом. Есть ли способ сделать это, чтобы учетные записи не переключались между собой?

эхимэ
источник

Ответы:

219

Вы можете получить номер учетной записи с помощью подкоманды 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 , ваш идентификатор учетной записи является частью массива ресурсов, которые вы создаете ... и тех, которые создаются для вас автоматически. Некоторые ресурсы также будут указывать вас как OwnerId.

Группа безопасности по умолчанию автоматически создается для вас в VPC каждого региона по умолчанию в качестве зарезервированной группы безопасности. Из документации :

Вы не можете удалить группу безопасности по умолчанию. Если вы попытаетесь удалить группу безопасности EC2-Classic по умолчанию, вы получите следующую ошибку: Client.InvalidGroup.Reserved: группа безопасности «default» зарезервирована. Если вы попытаетесь удалить группу безопасности VPC по умолчанию, вы получите следующую ошибку: Client.CannotDelete: указанная группа: «sg-51530134» имя: «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.

user2976775
источник
3
Обратите внимание: это не работает при использовании AssumedRole
Sanoob