Cách nhanh chóng để nhận số Tài khoản AWS từ các công cụ AWS CLI?


99

Tìm kiếm một cách nhanh chóng để lấy số tài khoản của mình, ban đầu tôi đã nghĩ đến việc sử dụng aws iam get-account-authorization-details --max-items 1nhưng có một số vấn đề khi thực hiện theo cách này. Có cách nào để làm điều này mà có thể không có nguồn gốc tài khoản chéo không?

Câu trả lời:


217

Bạn có thể lấy số tài khoản từ lệnh con Dịch vụ Mã bảo mậtget-caller-identity bằng cách sử dụng như sau:

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

2
Điều này sẽ đáng tin cậy hơn nhiều so với các nhóm bảo mật vì bạn có thể xóa nhóm bảo mật mặc định.
Justin

4
lệnh ngắn hơn nếu nguồn cấp dữ liệu đến jqaws sts get-caller-identity|jq -r ".Account"
BMW

cần thiết để lưu trữ trong một biến nhưng đã nhận được thêm một dòng, điều này sẽ tốt hơn cho điều đóaws sts get-caller-identity --output json | jq '.Account' | sed 's/\"//g'
Asim

Đối với tôi, nó hoạt động khi tôi loại bỏ --query 'Account'một phần.
coliveira 18/09/18

@BMW Rất tiếc, bạn không thể luôn dựa vào jqviệc tham gia hoặc cài đặt trên một hệ thống. Một số máy chủ cấm cài đặt gói không liên quan do bảo mật. Bạn có thể làm điều gì đó như thế này aws sts get-caller-identity --output json |grep Account |awk -F ': "' '{print$2}' |sed 's/\".*//'nhưng nó hơi khó chịu và bạn có thể làm như vậy --query 'Account' --output texttại thời điểm đó.
ehime

33

Từ câu trả lời liên quan của tôi cho AWS PowerShell CLI , ID tài khoản của bạn là một phần của Nguồn tài nguyên mà bạn tạo ... và những tài nguyên đó được tạo tự động cho bạn. Một số tài nguyên cũng sẽ liệt kê bạn là OwnerId.

Nhóm bảo mật mặc định được tạo tự động cho bạn trong VPC mặc định của mỗi khu vực dưới dạng nhóm bảo mật dành riêng. Từ tài liệu :

Bạn không thể xóa một nhóm bảo mật mặc định. Nếu bạn cố gắng xóa nhóm bảo mật mặc định EC2-Classic, bạn sẽ gặp lỗi sau: Client.InvalidGroup.Reserved: Nhóm bảo mật 'mặc định' được bảo lưu. Nếu bạn cố gắng xóa một nhóm bảo mật mặc định VPC, bạn sẽ gặp lỗi sau: Client.CannotDelete: nhóm được chỉ định: "sg-51530134" name: "default" không thể bị xóa bởi người dùng.

Điều này làm cho nó trở thành một ứng cử viên đáng tin cậy để truy xuất Id tài khoản của chúng tôi, miễn là bạn đang ở EC2 cổ điển hoặc có VPC mặc định (* xem các trường hợp phụ nếu bạn không có).

Thí dụ:

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

Điều này sử dụng --queryđể lọc đầu ra thành "ID chủ sở hữu" cho kết quả đầu tiên từ yêu cầu này và sau đó sử dụng --outputđể xuất ID tài khoản của bạn dưới dạng văn bản rõ:

123456781234

Các trường hợp cạnh:

(Cảm ơn @kenchew) Lưu ý rằng nếu bạn đã xóa VPC mặc định của mình trong một khu vực nhất định, nhóm bảo mật này không còn tồn tại nữa và bạn nên sử dụng một trong các giải pháp thay thế sau:

Đọc thêm:


9

Nếu bạn đang chạy trên một máy chủ đang chạy với một vai trò giả định, bạn không thể gọi aws sts get-caller-identity. Ngoài ra, describe-security-groupskhông phải lúc nào bạn cũng có thể sử dụng --group-namesbộ lọc (nó không hoạt động nếu bạn không có VPC mặc định), vì vậy chỉ cần chọn nhóm bảo mật đầu tiên. Tôi thấy điều này là đáng tin cậy nhất bất kể bạn sử dụng loại xác thực nào hoặc loại VPC bạn có.

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

Đồng ý với điều này. get-caller-identity dường như luôn trả về Tài khoản Người dùng, bất kể vai trò mà họ đã đảm nhận. Nếu bạn muốn vai trò giả định bạn có vẻ như cần phải một cái gì đó sử dụng như thế này vẫn còn (2 năm sau ..)
suitedupgeek

2

Phương pháp yêu thích của tôi là sử dụng aws iam get-user [--profile <profile>]vì bạn chỉ cần vai trò tự phục vụ IAM để điều này hoạt động.


3
Lưu ý rằng, Nó không hoạt động khi bạn sử dụng AssumedRole
Sanoob
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.