GNU/Linux >> Belajar Linux >  >> Linux

Cara menggunakan aws-vault untuk mengakses beberapa akun AWS dengan aman

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 zshaws-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!


Linux
  1. Cara Membuat Banyak Akun Pengguna di Linux

  2. Cara Menggunakan Tunneling SSH untuk Mengakses Server yang Dibatasi

  3. Cara menggunakan AWS CLI untuk mengelola Amazon S3

  1. Cara menggunakan kemampuan akses jarak jauh Kotak GNOME

  2. Cara Menggunakan Beberapa Versi Node.js menggunakan NVM

  3. Bagaimana cara menggunakan opsi jalur serentak dengan banyak jalur?

  1. Cara mengakses dan menggunakan email web Horde

  2. Cara Menggunakan Perintah SCP untuk Mentransfer File dengan Aman

  3. Cara menyimpan kunci akses pengguna AWS dan kunci rahasia di Jenkins