Segera setelah Anda mulai bekerja dengan lebih dari satu proyek atau organisasi di AWS cloud, pertanyaan pertama yang mungkin Anda miliki adalah bagaimana mengelola kredensial awscli dan harus menggunakannya dengan mudah dan aman untuk mendapatkan akses ke semua akun dan lingkungan AWS Anda. Artikel ini akan membahas aws-vault – alat untuk menyimpan dan mengakses kredensial AWS di lingkungan pengembangan dengan aman.
Masalahnya
Saya selalu bukan penggemar berat ~/.aws/credentials
file, karena setiap kali saya datang ke pelanggan baru, saya perlu membuka file ini untuk mengedit untuk menambahkan kredensial baru. Akibatnya, saya terus-menerus merasa bahwa saya menampilkan semua kredensial saya yang ada ke semua kamera keamanan di kantor. Tuhan, berkati penemu layar privasi!
Masalah kedua dengan kredensial adalah bahwa mereka perlu diperbarui dari waktu ke waktu. Semakin banyak akun yang Anda miliki, semakin banyak upaya yang Anda habiskan untuk rotasi kredensial.
Dan masalah ketiga – mengasumsikan peran dalam sesi terminal dan bekerja di beberapa lingkungan berbeda secara bersamaan.
Solusi
Sebagai solusi untuk dua masalah pertama, belum lama ini, saya mulai menggunakan:
- aws-vault – Pengelola kredensial AWS.
Sebagai solusi untuk dua masalah terakhir, saya menemukan bahwa tumpukan perkakas berikut paling sesuai dengan kebutuhan saya:
- terminal zsh dan oh-my-zsh –.
- zsh-aws-vault – Penyorotan lingkungan AWS untuk sesi terminal.
Mengelola kredensial AWS
Berikut panduan memulai cepat.
Instalasi
Saya berasumsi di sini bahwa Anda sudah memiliki zsh
dan oh-my-zsh
diinstal.
Mari kita instal aws-vault
. Berikut daftar lengkap langkah penginstalan untuk sebagian besar platform yang tersedia.
Kami akan melakukan segalanya untuk OS X (macOS):
brew cask install aws-vault
Memilih aws-vault backend
aws-vault mendukung beberapa backend untuk menyimpan kredensial Anda. Preferensi saya adalah menggunakan file terenkripsi. Jadi, Anda perlu menambahkan variabel berikut ke ~/.zshrc
. Anda :
export AWS_VAULT_BACKEND="file"
Memindahkan kredensial ke aws-vault
Sekarang buka ~/.aws/credentials
your Anda mengajukan. Untuk setiap profil yang ada, tambahkan kredensial ke aws-vault
.
cat ~/.aws/credentials
aws-vault add profile_1
aws-vault add profile_2
Sekarang, aws-vault memiliki AWS_VAULT_FILE_PASSPHRASE
variabel, yang dapat digunakan untuk menghentikan aws-vault dari menanyakan kata sandi lemari besi Anda berulang kali. Ada dua cara untuk menggunakannya:
Cara tidak aman
Tambahkan variabel berikut ke ~/.zshrc
. Anda atau ~/.bashrc
file, untuk mencegah aws-vault dari meminta kata sandi Anda setiap saat:
export AWS_VAULT_FILE_PASSPHRASE="my_strong_password"
Cara aman
Daripada menyimpan AWS_VAULT_FILE_PASSPHRASE
variabel di .*rc
file, Anda dapat membuat AWS Systems Manager Parameter Store SecureString
parameter, yang berisi aws-vault
. Anda kata sandi:
aws ssm put-parameter \
--name '/laptop/aws-vault/password' \
--description 'aws-vault password on my laptop' \
--value 'my_super_secret_password' \
--type SecureString
Mari buat skrip pembungkus, yang akan memanggil aws-vault call aws-vault dan menyiapkan AWS_VAULT_FILE_PASSPHRASE
dengan nilai yang diperlukan dari AWS Systems Manager Parameter Store:
mkdir -p $HOME/bin
cat > $HOME/bin/call-aws-vault.sh <<- EOF
#!/usr/bin/env bash
export PROFILE=$1
export AWS_VAULT_FILE_PASSPHRASE=$(aws ssm get-parameters --profile default --names '/laptop/aws-vault/password' --with-decryption --query 'Parameters[0].Value' --output text)
aws-vault exec -j $PROFILE
EOF
chmod +x $HOME/bin/call-aws-vault.sh
Sekarang Anda dapat menggunakan pembungkus ini di ~/.aws/config
seperti itu:
[profile my_new_profile]
credential_process = ~/bin/call-aws-vault.sh my_new_profile
Anda dapat mengganti nama ~/.aws/credentials dan kemudian hapus sepenuhnya segera setelah Anda menguji semuanya.
Beralih Profil AWS
Untuk membuat daftar semua profil AWS Anda, cukup ketik:
aws-vault list
Bagus, sekarang Anda dapat dengan mudah mengubah lingkungan dan melihat tempat Anda bekerja:
aws-vault exec --duration 8h default
Begini tampilan akhirnya:
Pendekatan berbasis peran
Oke, kami baru saja memindahkan semua kredensial AWS kami ke brankas aman dan mengonfigurasi terminal kami untuk menampilkan aws-vault kami saat ini sidang. Sekarang saatnya mendiskusikan bagaimana kami dapat lebih meningkatkan solusi.
Organisasi multi-akun
Salah satu praktik terbaik untuk mengatur akses pengguna AWS ke akun AWS yang berbeda – adalah mengelola semua pengguna IAM dalam satu akun AWS dan menyediakan akses ke akun AWS lain dengan mengizinkan mereka menggunakan peran (sts:AssumeRole
panggilan API) dari akun tersebut.
Berikut adalah contoh khas Organisasi AWS:
AWS memberikan penjelasan yang bagus tentang Cara Menggunakan Pengguna IAM Tunggal untuk Mengakses Semua Akun Anda dengan Mudah dengan Menggunakan AWS CLI di postingan blog mereka, yang menjelaskan proses penggunaan peran dan konfigurasi awscli. Saya tidak akan menyalin-menempelkannya. Sebagai gantinya, kami akan berkonsentrasi pada aws-vault konfigurasi untuk melakukan sesuatu yang serupa, tetapi tanpa ~/.aws/credentials berkas.
Dengan asumsi Anda sudah memiliki semua hibah dan izin yang diperlukan di antara akun Anda. Jika tidak, inilah artikel bagus tentang topik tersebut – Tutorial:Mendelegasikan Akses di Seluruh Akun AWS Menggunakan Peran IAM.
Pengaturan profil default
Anda seharusnya sudah memiliki default pengaturan profil di tempat di file. Mungkin, tampilannya seperti ini:
[profile default]
region = us-east-1
Mari konfigurasikan aws-vault sebagai sumber kredensial untuk profil default kami:
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
Sekarang, jika Anda memberikan izin kepada pengguna atau peran Anda dari default profile untuk mengambil peran AWS dari akun lain, Anda akan dapat menentukan konfigurasi profil baru seperti itu:
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
mfa_serial = arn:aws:iam:::mfa/admin
[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
mfa_serial = arn:aws:iam:::mfa/admin
[profile account_1_role_admin]
region = us-east-1
role_arn = arn:aws:iam:::role/admin
source_profile = default
[profile account_2_role_qa]
region = us-east-1
role_arn = arn:aws:iam:::role/qa
source_profile = default
profil_sumber opsi konfigurasi akan memberi tahu awscli akun mana yang digunakan untuk mengambil peran untuk profil tertentu.
Pengujian
Cara tercepat untuk menguji bahwa Anda dapat mengambil peran tersebut adalah dengan menelepon:
aws sts get-caller-identify
Anda akan melihat sesuatu yang serupa untuk default
. Anda profil:
{
"UserId": "AIDDRCTFVGBHNJMGF3WI7R",
"Account": "01234567890",
"Arn": "arn:aws:iam::01234567890:user/admin"
}
Untuk menguji panggilan profil lainnya:
aws sts get-caller-identity --profile account_1_role_admin
Anda akan melihat output seperti berikut:
{
"UserId": "AROALKJHGFGDFV3IR2VSI:botocore-session-1584897134",
"Account": "012345678901",
"Arn": "arn:aws:sts::012345678901:assumed-role/admin/botocore-session-1584897134"
}
Mengasumsikan peran akun AWS
Untuk mengambil peran dari akun AWS mana pun yang Anda miliki di aws-vault Anda, jalankan perintah berikut:
aws-vault ls
aws-vault exec --duration 8h default
Di sini, kami mengasumsikan peran yang terkait dengan profil default selama 8 jam.
Bonus:Masuk konsol Web AWS tanpa kata sandi
Sebagai bonus kecil bagi Anda yang telah berakhir, berikut ini cara masuk ke konsol web AWS untuk setiap profil yang diberikan:
aws-vault ls
aws-vault login --duration 8h default
Ringkasan
Menggunakan zsh , aws-vault , dan AWS sts:AssumeRole
fitur bersama-sama dapat secara signifikan menyederhanakan dan membuat pengelolaan beberapa akun AWS dan kredensialnya menjadi lebih aman.
Jika Anda menyukai artikel ini, silakan, sebarkan ke seluruh dunia. Dan tentu saja, jika Anda memiliki pertanyaan, saran, atau komentar, jangan ragu untuk menggunakan Disqus di bawah ini.
Tetap disini!