Cara menguji kredensial untuk Alat Baris Perintah AWS

149

Apakah ada perintah / sub-perintah yang dapat diteruskan ke awsutilitas yang dapat 1) memverifikasi bahwa kredensial dalam ~/.aws/credentialsfile tersebut valid, dan 2) memberikan beberapa indikasi pengguna pengguna kredensial yang mana? Saya mencari sesuatu yang umum yang tidak membuat asumsi tentang pengguna yang memiliki izin untuk IAM atau layanan tertentu.

Kasus penggunaan untuk ini adalah pemeriksaan kewarasan waktu penyebaran untuk memastikan bahwa kredensial baik. Idealnya akan ada beberapa cara untuk memeriksa nilai kembali dan membatalkan penyebaran jika ada kredensial yang tidak valid.

smitelli
sumber
3
Bolehkah saya menyarankan bahwa ini akan lebih baik ditanyakan di serverfault.com ? Stack Overflow khusus untuk pertanyaan pemrograman.
Tripp Kinetics
4
@ Trippinetinet Ya, saya berada di pagar tentang di mana harus bertanya. Dalam benak saya, daging pertanyaannya lebih tentang pemrograman permintaan API daripada mengelola server per se.
smitelli

Jawaban:

220

Gunakan GetCallerIdentity :
aws sts get-caller-identity

Tidak seperti panggilan API / CLI lainnya, panggilan akan selalu berfungsi, terlepas dari izin IAM Anda.

Anda akan mendapatkan output dalam format berikut:

{
    "Account": "123456789012", 
    "UserId": "AR#####:#####", 
    "Arn": "arn:aws:sts::123456789012:assumed-role/role-name/role-session-name"
}

Format ARN yang tepat akan tergantung pada jenis kredensial, tetapi sering kali menyertakan nama pengguna (manusia).

Ini menggunakan kode kesalahan AWS CLI standar yang memberikan 0 pada keberhasilan dan 255 jika Anda tidak memiliki kredensial.

Jason
sumber
5
Ini adalah jawaban yang bagus, tetapi jika Anda menggunakan MFA, perhatikan - ini lebih rumit. Dengan MFA, Anda perlu menggunakan kredensial yang berfungsi (i) dikombinasikan dengan token MFA untuk mendapatkan kredensial sementara yang berbeda (ii) dan dengan solusi ini, Anda mendapatkan hasil yang sama untuk kredensial (i) atau (ii).
Mark Chackerian
3
@ MarkChackerian Itu tidak selalu terjadi. Saya telah membuat pengguna yang MFA-nya diberlakukan menggunakan kebijakan Trek10 . Dengan sesi MFA token tidak aktif, jika saya jalankan aws iam get-user --profile test-mfa, saya mendapatkan: An error occurred (AccessDenied) when calling the GetUser operation. Namun, aws sts get-caller-identity --profile test-mfakeluaran (sama, tanpa token sesi MFA aktif) test-mfaAkun, ARN, dan UserId.
Ville
54

Ada cara yang lurus - aws iam get-userakan memberi tahu detail tentang siapa Anda (Pengguna IAM saat ini) - asalkan pengguna memiliki iamhak istimewa.

Ada beberapa panggilan CLI yang mendukung --dry-runflag seperti aws ec2 run-instancesyang Anda beri tahu apakah Anda memiliki konfigurasi / kredit yang diperlukan untuk melakukan operasi.

Ada juga --auth-dry-runyang memeriksa apakah Anda memiliki izin yang diperlukan untuk perintah tersebut, tanpa benar-benar menjalankan perintah. Jika Anda memiliki izin yang diperlukan, perintah mengembalikan DryRunOperation; jika tidak, ia mengembalikan Operasi Tidak Sah. [Dari Dokumentasi AWS - Opsi Umum ]

Anda dapat mendaftar Kunci Akses IAM dari Konsol Manajemen yang dapat Anda periksa silang untuk melihat siapa yang telah ditetapkan kunci mana.

Cara terbaik untuk memahami pengguna / peran mana yang memiliki hak istimewa adalah dengan menggunakan Simulator Kebijakan IAM .

Naveen Vijay
sumber
16
Ironisnya, pengguna saya menjalankan tes karena mendapat AccessDeniedkesalahan - yang termasuk arn:aws:iam::123...890:user/somebodystring penuh sebagai bagian dari output kesalahan.
smitelli
7
Sepenuhnya mungkin pengguna tidak memiliki izin untuk 'mendapatkan-pengguna' sendiri. : - /
Jason
Ya, saya punya situasi ini. Di Konsol AWS di sebelah Pengguna ARN itu menunjukkan N / A, dan arahkan kursor menjelaskan bahwa "Pengguna dan: aws: iam: ...: pengguna / steve tidak diizinkan untuk melakukan iam: GetUser pada sumber daya: pengguna steve"
Steve Bennett