วิธีที่รวดเร็วในการรับหมายเลขบัญชี AWS จากเครื่องมือ AWS CLI?


102

กำลังมองหาวิธีที่รวดเร็วในการดึงหมายเลขบัญชีของฉันฉันเคยคิดจะใช้aws iam get-account-authorization-details --max-items 1แต่มีปัญหาหลายประการในการทำเช่นนี้ มีวิธีดำเนินการที่อาจไม่ข้ามจุดเริ่มต้นของบัญชีหรือไม่?

คำตอบ:


223

คุณสามารถรับหมายเลขบัญชีได้จากคำสั่งย่อยSecure Token Serviceget-caller-identityโดยใช้ดังต่อไปนี้:

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

2
สิ่งนี้น่าจะเชื่อถือได้มากกว่ากลุ่มความปลอดภัยเนื่องจากคุณสามารถลบกลุ่มความปลอดภัยเริ่มต้นได้
จัสติ

4
คำสั่งที่สั้นกว่าหาก feed to jqaws sts get-caller-identity|jq -r ".Account"
BMW

จำเป็นต้องจัดเก็บในตัวแปร แต่ได้รับบรรทัดพิเศษสิ่งนี้จะดีกว่าสำหรับสิ่งนั้นaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim

สำหรับฉันมันได้ผลเมื่อฉันถอดชิ้น--query 'Account'ส่วนออก
coliveira

@BMW คุณไม่สามารถพึ่งพาjqการมีส่วนร่วมหรือติดตั้งบนระบบได้ตลอดเวลา เซิร์ฟเวอร์บางตัวห้ามการติดตั้งแพ็คเกจที่ไม่เกี่ยวข้องเนื่องจากความปลอดภัย คุณสามารถทำอะไรแบบนี้ได้aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'แต่มันค่อนข้างน่ารำคาญเล็กน้อยและคุณอาจทำ--query 'Account' --output textในจุดนั้นได้เช่นกัน
ehime

33

จากคำตอบที่เกี่ยวข้องของฉันสำหรับ AWS PowerShell CLIรหัสบัญชีของคุณเป็นส่วนหนึ่งของแหล่งข้อมูล Arn ที่คุณสร้าง ... และที่สร้างขึ้นโดยอัตโนมัติสำหรับคุณ แหล่งข้อมูลบางอย่างจะแสดงรายการคุณเป็น OwnerId ด้วย

กลุ่มความปลอดภัยเริ่มต้นจะสร้างขึ้นโดยอัตโนมัติสำหรับคุณใน VPC เริ่มต้นของแต่ละภูมิภาคเป็นกลุ่มความปลอดภัยที่สงวนไว้ จากเอกสารประกอบ :

คุณไม่สามารถลบกลุ่มความปลอดภัยเริ่มต้น หากคุณพยายามลบกลุ่มความปลอดภัยเริ่มต้น EC2-Classic คุณจะได้รับข้อผิดพลาดต่อไปนี้: Client.InvalidGroup.Reserved: สงวนกลุ่มความปลอดภัย 'default' หากคุณพยายามลบกลุ่มความปลอดภัยเริ่มต้นของ VPC คุณจะได้รับข้อผิดพลาดต่อไปนี้ Client.CannotDelete: กลุ่มที่ระบุ: "sg-51530134" name: "default" ไม่สามารถลบได้โดยผู้ใช้

สิ่งนี้ทำให้เป็นผู้สมัครที่เชื่อถือได้ในการดึงรหัสบัญชีของเราตราบใดที่คุณอยู่ใน EC2 classic หรือมี VPC เริ่มต้น (* ดูกรณีขอบถ้าคุณไม่ได้)

ตัวอย่าง:

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

ใช้--queryเพื่อกรองผลลัพธ์ลงไปที่ "รหัสเจ้าของ" สำหรับผลลัพธ์แรกจากคำขอนี้จากนั้นใช้--outputเพื่อส่งออก ID บัญชีของคุณเป็นข้อความธรรมดา:

123456781234

ขอบกรณี:

(ขอบคุณ @kenchew) โปรดทราบว่าหากคุณลบ VPC เริ่มต้นของคุณในภูมิภาคที่กำหนดกลุ่มความปลอดภัยนี้จะไม่มีอยู่อีกต่อไปและคุณควรใช้หนึ่งในโซลูชันทางเลือกเหล่านี้:

อ่านเพิ่มเติม:


10

หากคุณกำลังรันบนเซิร์ฟเวอร์ที่รันด้วยบทบาทสมมติคุณจะไม่สามารถเรียกaws sts get-caller-identityใช้ นอกจากนี้describe-security-groupsคุณไม่สามารถใช้--group-namesตัวกรองได้ตลอดเวลา(จะใช้ไม่ได้หากคุณไม่มี VPC เริ่มต้น) ดังนั้นเพียงแค่เลือกกลุ่มความปลอดภัยแรก ฉันพบว่าสิ่งนี้น่าเชื่อถือที่สุดไม่ว่าคุณจะใช้การตรวจสอบสิทธิ์ประเภทใดหรือ VPC ประเภทใดก็ตาม

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

เห็นด้วยกับเรื่องนี้ get-caller-identity มักจะส่งคืนบัญชีผู้ใช้โดยไม่คำนึงถึงบทบาทที่พวกเขาสันนิษฐานไว้ หากคุณต้องการบทบาทสมมติคุณดูเหมือนจะต้องใช้อะไรทำนองนี้ (2 ปีต่อมา .. )
suitedupgeek

2

วิธีที่ฉันชอบคือใช้aws iam get-user [--profile <profile>]เนื่องจากคุณต้องใช้บทบาทการบริการตนเองของ IAM เท่านั้นจึงจะทำงานได้


3
โปรดทราบว่าจะใช้ไม่ได้เมื่อคุณใช้AssumedRole
Sanoob
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.