Bagaimana cara cepat mendapatkan nomor Akun AWS dari alat AWS CLI?

100

Mencari cara cepat untuk menarik nomor akun saya, saya awalnya berpikir untuk menggunakan aws iam get-account-authorization-details --max-items 1tetapi ada beberapa masalah dengan melakukannya dengan cara ini. Adakah cara untuk melakukan ini yang mungkin tidak berasal dari lintas akun?

ehime
sumber

Jawaban:

219

Anda bisa mendapatkan nomor akun dari subperintah Secure Token Serviceget-caller-identity menggunakan berikut ini:

aws sts get-caller-identity --query Account --output text
Taras Alenin
sumber
2
Ini seharusnya lebih dapat diandalkan daripada grup keamanan karena Anda dapat menghapus grup keamanan default.
Justin
4
perintah yang lebih pendek jika diumpankan ke jqaws sts get-caller-identity|jq -r ".Account"
BMW
perlu disimpan dalam variabel tetapi mendapatkan garis tambahan, ini akan lebih baik untuk ituaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim
Bagi saya, ini berfungsi saat saya menghapus --query 'Account'bagian tersebut.
coliveira
@BMW Sayangnya Anda tidak dapat selalu mengandalkan jqketerlibatan atau penginstalan pada sistem. Beberapa server melarang penginstalan paket asing karena keamanan. Anda dapat melakukan sesuatu seperti ini aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'tetapi itu sedikit mengganggu dan Anda sebaiknya melakukannya pada --query 'Account' --output textsaat itu.
ehime
33

Dari jawaban terkait saya untuk AWS PowerShell CLI , ID Akun Anda adalah bagian dari Arn sumber daya yang Anda buat ... dan yang dibuat secara otomatis untuk Anda. Beberapa sumber daya juga akan mencantumkan Anda sebagai OwnerId.

Grup Keamanan Default secara otomatis dibuat untuk Anda di setiap VPC default kawasan sebagai grup keamanan yang dicadangkan. Dari dokumentasi :

Anda tidak dapat menghapus grup keamanan default. Jika Anda mencoba untuk menghapus grup keamanan default EC2-Classic, Anda akan mendapatkan kesalahan berikut: Client.InvalidGroup.Reserved: Grup keamanan 'default' dicadangkan. Jika Anda mencoba untuk menghapus grup keamanan default VPC, Anda akan mendapatkan error berikut: Client.CannotDelete: grup yang ditentukan: "sg-51530134" name: "default" tidak dapat dihapus oleh pengguna.

Hal ini menjadikannya kandidat yang dapat diandalkan untuk mengambil ID akun kami, selama Anda menggunakan EC2 klasik atau memiliki VPC default (* lihat kasus edge jika tidak ada).

Contoh:

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

Ini digunakan --queryuntuk memfilter keluaran ke "ID pemilik" untuk hasil pertama dari permintaan ini, dan kemudian menggunakan --outputuntuk mengeluarkan ID akun Anda sebagai teks biasa:

123456781234

Kasus tepi:

(Terima kasih @kenchew) Perhatikan bahwa jika Anda telah menghapus VPC default di wilayah tertentu, grup keamanan ini tidak ada lagi dan Anda harus menggunakan salah satu solusi alternatif berikut:

Bacaan lebih lanjut:

Anthony Neace
sumber
9

Jika Anda menjalankan di server yang dijalankan dengan peran yang diasumsikan, Anda tidak dapat memanggil aws sts get-caller-identity. Selain itu, dengan describe-security-groupsAnda tidak selalu dapat menggunakan --group-namesfilter (tidak berfungsi jika Anda tidak memiliki VPC default), jadi pilih saja grup keamanan pertama. Menurut saya ini adalah yang paling andal, terlepas dari jenis autentikasi yang Anda gunakan atau jenis VPC yang Anda miliki.

aws ec2 describe-security-groups --query 'SecurityGroups[0].OwnerId' --output text
Philip Kirkland
sumber
Setuju dengan ini. get-caller-identity sepertinya selalu mengembalikan Akun Pengguna, terlepas dari peran yang mereka ambil. Jika Anda menginginkan peran yang diasumsikan, Anda tampaknya masih perlu menggunakan sesuatu seperti ini (2 tahun kemudian ..)
adjustedupgeek
2

Metode favorit saya adalah menggunakan aws iam get-user [--profile <profile>]karena Anda hanya memerlukan peran layanan mandiri IAM agar ini berfungsi.

pengguna2976775
sumber
3
Perhatikan bahwa, Ini tidak berfungsi saat Anda menggunakan AssumedRole
Sanoob