Un modo rapido per ottenere il numero di account AWS dagli strumenti AWS CLI?


99

Alla ricerca di un modo rapido per estrarre il mio numero di conto, avevo inizialmente pensato di utilizzare, aws iam get-account-authorization-details --max-items 1ma ci sono diversi problemi con farlo in questo modo. C'è un modo per farlo che potrebbe non incrociare le origini dell'account?

Risposte:


217

È possibile ottenere il numero di account dal sottocomando Secure Token Serviceget-caller-identity utilizzando quanto segue:

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

2
Questo dovrebbe essere molto più affidabile dei gruppi di sicurezza poiché è possibile eliminare il gruppo di sicurezza predefinito.
Justin

4
comando più breve se feed a jqaws sts get-caller-identity|jq -r ".Account"
BMW

aveva bisogno di memorizzare in una variabile ma stava ottenendo una riga in più, questo sarebbe meglio per quelloaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim

Per me funziona quando rimuovo la --query 'Account'parte.
coliveira

@BMW Sfortunatamente non puoi sempre fare affidamento sul fatto di jqessere coinvolto o installato su un sistema. Alcuni server vietano l'installazione di pacchetti estranei per motivi di sicurezza. Potresti fare qualcosa del genere aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'ma è un po 'fastidioso e potresti anche farlo --query 'Account' --output texta quel punto.
ehime

33

Dalla mia risposta correlata per AWS PowerShell CLI , il tuo ID account fa parte dell'Arn delle risorse che crei ... e di quelle che vengono create automaticamente per te. Alcune risorse ti elencheranno anche come OwnerId.

Il gruppo di sicurezza predefinito viene creato automaticamente nel VPC predefinito di ciascuna regione come gruppo di sicurezza riservato. Dalla documentazione :

Non puoi eliminare un gruppo di sicurezza predefinito. Se provi a eliminare il gruppo di sicurezza predefinito EC2-Classic, riceverai il seguente errore: Client.InvalidGroup.Reserved: il gruppo di sicurezza "default" è riservato. Se provi a eliminare un gruppo di sicurezza predefinito VPC, riceverai il seguente errore: Client.CannotDelete: il gruppo specificato: "sg-51530134" nome: "predefinito" non può essere eliminato da un utente.

Questo lo rende un candidato affidabile per il recupero del nostro ID account, purché tu sia in EC2 classic o disponga di un VPC predefinito (* vedi casi limite se non lo fai).

Esempio:

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

Questo utilizza --queryper filtrare l'output fino all '"ID proprietario" per il primo risultato di questa richiesta, quindi utilizza --outputper visualizzare l'ID account come testo normale:

123456781234

Custodie Edge:

(Grazie @kenchew) Tieni presente che se hai eliminato il tuo VPC predefinito in una determinata regione, questo gruppo di sicurezza non esiste più e dovresti utilizzare una di queste soluzioni alternative:

Ulteriore lettura:


9

Se si esegue su un server in esecuzione con un ruolo presunto non è possibile chiamare aws sts get-caller-identity. Inoltre, describe-security-groupsnon puoi sempre utilizzare il --group-namesfiltro (non funziona se non hai un VPC predefinito), quindi scegli il primo gruppo di sicurezza. Ho trovato che questo è il più affidabile indipendentemente dal tipo di autenticazione che usi o dal tipo di VPC che hai.

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

D'accordo con questo. get-caller-identity sembra sempre restituire l'account utente, indipendentemente dal ruolo che hanno assunto. Se vuoi il ruolo assunto, sembra che tu debba usare ancora qualcosa del genere (2 anni dopo ..)
suitupgeek

2

Il mio metodo preferito è quello di utilizzare aws iam get-user [--profile <profile>]poiché per funzionare è necessario solo il ruolo self-service IAM.


3
Nota che non funziona quando usi AssumedRole
Sanoob
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.