AWS CLI araçlarından AWS Hesap numarasını almanın hızlı yolu?


102

Hesap numaramı almanın hızlı bir yolunu arıyorum, başlangıçta kullanmayı düşünmüştüm, aws iam get-account-authorization-details --max-items 1ancak bu şekilde yapmanın birkaç sorunu var. Bunu yapmanın, hesap kökenleri arasında geçmeyen bir yolu var mı?

Yanıtlar:


223

Hesap numarasını aşağıdakileri kullanarak Secure Token Service alt komutundan alabilirsiniz get-caller-identity:

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

2
Varsayılan güvenlik grubunu silebileceğiniz için bu, güvenlik gruplarından çok daha güvenilir olmalıdır.
Justin

4
jq için besleme ise daha kısa komutaws sts get-caller-identity|jq -r ".Account"
BMW

bir değişkende saklanması gerekiyordu ancak fazladan bir satır alıyordu, bunun için daha iyi olurduaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim

Benim için --query 'Account'parçayı çıkardığımda işe yarıyor .
coliveira

@BMW Ne yazık ki her zaman jqbir sisteme dahil olmaya veya bir sisteme kurulmaya güvenemezsiniz . Bazı sunucular güvenlik nedeniyle gereksiz paket kurulumlarını yasaklar. Bunun gibi bir şey yapabilirsiniz aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'ama bu biraz can sıkıcı ve --query 'Account' --output texto noktada da yapabilirsiniz.
ehime

33

Benim itibaren AWS PowerShell CLI için ilgili cevap , Hesap Kimliği oluşturduğunuz kaynakların Arn bir parçasıdır ... ve sizin için otomatik olarak oluşturulur olanlar. Bazı kaynaklar da sizi bir Sahip Kimliği olarak listeleyecektir.

Varsayılan Güvenlik Grubu, her bölgenin varsayılan VPC'sinde ayrılmış bir güvenlik grubu olarak sizin için otomatik olarak oluşturulur. Gönderen belgeler :

Varsayılan bir güvenlik grubunu silemezsiniz. EC2-Classic varsayılan güvenlik grubunu silmeye çalışırsanız, şu hatayı alırsınız: Client.InvalidGroup.Reserved: Güvenlik grubu 'varsayılan' rezerve edilmiştir. Bir VPC varsayılan güvenlik grubunu silmeye çalışırsanız, şu hatayı alırsınız: Client.CannotDelete: belirtilen grup: "sg-51530134" adı: "varsayılan" bir kullanıcı tarafından silinemez.

Bu, EC2 classic'te olduğunuz veya varsayılan bir VPC'ye sahip olduğunuz sürece hesap kimliğimizi almak için güvenilir bir aday olmasını sağlar (* yoksa uç durumlara bakın).

Misal:

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

Bu, --querybu istekten gelen ilk sonuç için çıktıyı "sahip kimliği" olarak filtrelemek için kullanır ve daha sonra --output, hesap kimliğinizi düz metin olarak çıkarmak için kullanır :

123456781234

Uç durumlarda:

(Teşekkürler @kenchew) Belirli bir bölgede varsayılan VPC'nizi sildiyseniz, bu güvenlik grubunun artık mevcut olmadığını ve şu alternatif çözümlerden birini kullanmanız gerektiğini unutmayın:

Daha fazla okuma:


10

Varsayılan bir rolle çalışan bir sunucuda çalışıyorsanız arayamazsınız aws sts get-caller-identity. Ayrıca, filtreyi describe-security-groupsher zaman kullanamazsınız --group-names(varsayılan bir VPC'niz yoksa çalışmaz), bu nedenle ilk güvenlik grubunu seçin. Ne tür bir kimlik doğrulama kullandığınıza veya ne tür bir VPC'ye sahip olduğunuza bakılmaksızın bunu en güvenilir buldum.

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

Buna katılıyorum. get-caller-identity, üstlendikleri role bakılmaksızın her zaman Kullanıcı Hesabını döndürüyor gibi görünüyor. Eğer varsayılan rolü istiyorsanız, buna benzer bir şeyi hala kullanmanız gerekiyor gibi görünüyor (2 yıl sonra ..)
suitedupgeek

2

En sevdiğim yöntem kullanmaktır, aws iam get-user [--profile <profile>]çünkü bunun çalışması için yalnızca IAM self servis rolüne ihtiyacınız vardır.


3
AssumedRole
Sanoob
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.