Schneller Weg, um die AWS-Kontonummer über die AWS CLI-Tools abzurufen?

99

Auf der Suche nach einer schnellen Möglichkeit, meine Kontonummer abzurufen, hatte ich ursprünglich überlegt, sie zu verwenden, aws iam get-account-authorization-details --max-items 1aber es gibt verschiedene Probleme, dies auf diese Weise zu tun. Gibt es eine Möglichkeit, dies zu tun, bei der die Herkunft der Konten möglicherweise nicht überschritten wird?

ehime
quelle

Antworten:

217

Sie können die Kontonummer über den Unterbefehl Secure Token Service wieget-caller-identity folgt abrufen :

aws sts get-caller-identity --query Account --output text
Taras Alenin
quelle
2
Dies sollte viel zuverlässiger sein als Sicherheitsgruppen, da Sie die Standardsicherheitsgruppe löschen können.
Justin
4
kürzerer Befehl, wenn Feed zu jqaws sts get-caller-identity|jq -r ".Account"
BMW
musste in einer Variablen gespeichert werden, bekam aber eine zusätzliche Zeile, dies wäre besser dafüraws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim
Bei mir funktioniert es, wenn ich das --query 'Account'Teil entferne .
Coliveira
@BMW Sie können sich leider nicht immer darauf verlassen jq, auf einem System beteiligt oder installiert zu sein. Einige Server verbieten aus Sicherheitsgründen die Installation fremder Pakete. Sie könnten so etwas tun, aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'aber es ist ein wenig nervig und Sie könnten das genauso gut --query 'Account' --output textan diesem Punkt tun .
ehime
33

Aus meiner entsprechenden Antwort für die AWS PowerShell-CLI geht hervor , dass Ihre Konto-ID Teil des Arn der Ressourcen ist, die Sie erstellen ... und die automatisch für Sie erstellt werden. Einige Ressourcen listen Sie auch als OwnerId auf.

Die Standardsicherheitsgruppe wird automatisch für Sie in der Standard-VPC jeder Region als reservierte Sicherheitsgruppe erstellt. Aus der Dokumentation :

Sie können eine Standardsicherheitsgruppe nicht löschen. Wenn Sie versuchen, die EC2-Classic-Standardsicherheitsgruppe zu löschen, wird die folgende Fehlermeldung angezeigt: Client.InvalidGroup.Reserved: Die Sicherheitsgruppe 'default' ist reserviert. Wenn Sie versuchen, eine VPC-Standardsicherheitsgruppe zu löschen, wird die folgende Fehlermeldung angezeigt: Client.CannotDelete: Die angegebene Gruppe: "sg-51530134" Name: "Standard" kann von einem Benutzer nicht gelöscht werden.

Dies macht es zu einem zuverlässigen Kandidaten für das Abrufen unserer Konto-ID, solange Sie sich in EC2 classic befinden oder über eine Standard-VPC verfügen (* siehe Randfälle, wenn Sie dies nicht tun).

Beispiel:

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

Hiermit wird --querydie Ausgabe für das erste Ergebnis dieser Anforderung auf die "Eigentümer-ID" heruntergefiltert und anschließend --outputIhre Konto-ID als Klartext ausgegeben:

123456781234

Randfälle:

(Danke @kenchew) Beachten Sie, dass diese Sicherheitsgruppe nicht mehr vorhanden ist, wenn Sie Ihre Standard-VPC in einer bestimmten Region gelöscht haben, und Sie sollten eine der alternativen Lösungen verwenden:

Weiterführende Literatur:

Anthony Neace
quelle
9

Wenn Sie auf einem Server ausgeführt werden, auf dem eine angenommene Rolle ausgeführt wird, können Sie nicht anrufen aws sts get-caller-identity. Außerdem können describe-security-groupsSie den --group-namesFilter nicht immer verwenden (er funktioniert nicht, wenn Sie keine Standard-VPC haben). Wählen Sie einfach die erste Sicherheitsgruppe aus. Ich habe festgestellt, dass dies am zuverlässigsten ist, unabhängig davon, welche Art von Authentifizierung Sie verwenden oder welche Art von VPC Sie haben.

aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text
Philip Kirkland
quelle
Stimmen Sie dem zu. get-caller-identity scheint immer das Benutzerkonto zurückzugeben, unabhängig von der Rolle, die sie übernommen haben. Wenn Sie die angenommene Rolle wollen, müssen Sie anscheinend noch so etwas verwenden (2 Jahre später ..)
geeignetupgeek
2

Meine Lieblingsmethode ist die Verwendung, aws iam get-user [--profile <profile>]da Sie nur die IAM-Self-Service-Rolle benötigen, damit dies funktioniert.

user2976775
quelle
3
Beachten Sie, dass es nicht funktioniert, wenn Sie AssumedRole
Sanoob