Szybki sposób na uzyskanie numeru konta AWS z narzędzi AWS CLI?

100

Szukając szybkiego sposobu na pobranie numeru konta, początkowo myślałem o użyciu, aws iam get-account-authorization-details --max-items 1ale jest kilka problemów z zrobieniem tego w ten sposób. Czy istnieje sposób na zrobienie tego, który może nie pochodzić z wielu kont?

ehime
źródło

Odpowiedzi:

219

Numer konta można uzyskać z komendy Secure Token Service,get-caller-identity korzystając z następującego polecenia:

aws sts get-caller-identity --query Account --output text
Taras Alenin
źródło
2
Powinno to być znacznie bardziej niezawodne niż grupy zabezpieczeń, ponieważ można usunąć domyślną grupę zabezpieczeń.
Justin
4
krótsze polecenie, jeśli karmisz do jqaws sts get-caller-identity|jq -r ".Account"
BMW
potrzebne do przechowywania w zmiennej, ale otrzymywałem dodatkową linię, byłoby lepiejaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim
U mnie działa, gdy usuwam --query 'Account'część.
coliveira
@BMW Niestety nie zawsze możesz polegać na jqbyciu zaangażowanym lub zainstalowanym w systemie. Niektóre serwery zakazują instalacji dodatkowych pakietów ze względu na bezpieczeństwo. Możesz zrobić coś takiego, aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'ale jest to trochę denerwujące i równie dobrze możesz zrobić to --query 'Account' --output textw tym momencie.
ehime
33

Z mojej pokrewnej odpowiedzi dla interfejsu wiersza polecenia AWS PowerShell , Twój identyfikator konta jest częścią ARN zasobów, które tworzysz ... i tych, które są tworzone automatycznie dla Ciebie. Niektóre zasoby będą również wyświetlać Ciebie jako OwnerId.

Domyślna grupa zabezpieczeń jest tworzona automatycznie w domyślnym środowisku VPC każdego regionu jako zarezerwowana grupa zabezpieczeń. Z dokumentacji :

Nie możesz usunąć domyślnej grupy zabezpieczeń. Jeśli spróbujesz usunąć domyślną grupę zabezpieczeń EC2-Classic, pojawi się następujący błąd: Client.InvalidGroup.Reserved: Grupa zabezpieczeń „default” jest zarezerwowana. Jeśli spróbujesz usunąć domyślną grupę zabezpieczeń VPC, pojawi się następujący błąd: Client.CannotDelete: określona grupa: „sg-51530134” name: „default” nie może zostać usunięta przez użytkownika.

To sprawia, że ​​jest to niezawodny kandydat do pobierania naszego identyfikatora konta, o ile korzystasz z EC2 classic lub masz domyślny VPC (* zobacz przypadki skrajne, jeśli nie masz).

Przykład:

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

Wykorzystuje to --querydo odfiltrowania danych wyjściowych do „identyfikatora właściciela” dla pierwszego wyniku z tego żądania, a następnie --outputdo wyświetlenia identyfikatora konta w postaci zwykłego tekstu:

123456781234

Przypadki brzegowe:

(Dzięki @kenchew) Pamiętaj, że jeśli usunąłeś domyślny VPC w danym regionie, ta grupa zabezpieczeń już nie istnieje i powinieneś użyć jednego z tych alternatywnych rozwiązań:

Dalsze czytanie:

Anthony Neace
źródło
9

Jeśli pracujesz na serwerze, który działa z założoną rolą, nie możesz zadzwonić aws sts get-caller-identity. Ponadto describe-security-groupsnie zawsze możesz użyć --group-namesfiltra (nie działa, jeśli nie masz domyślnego VPC), więc po prostu wybierz pierwszą grupę zabezpieczeń. Okazało się, że jest to najbardziej niezawodne, niezależnie od rodzaju używanego uwierzytelniania lub typu VPC.

aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text
Philip Kirkland
źródło
Zgadzam się z tym. get-caller-identity zawsze wydaje się zwracać konto użytkownika, niezależnie od przyjętej roli. Jeśli chcesz przyjąć rolę, wydaje się, że nadal musisz użyć czegoś takiego (2 lata później ..)
suitupgeek
2

Moją ulubioną metodą jest użycie, aws iam get-user [--profile <profile>]ponieważ potrzebujesz tylko roli samoobsługi IAM, aby to zadziałało.

user2976775
źródło
3
Zauważ, że to nie działa, gdy używasz AssumedRole
Sanoob