Latar Belakang
- Kami menggunakan Ansible untuk menyediakan dan mengelola infrastruktur Azure. Saat ini kami menjalankan Ansible "secara manual" yaitu kami secara manual menjalankan playbook untuk berbagai tugas otomatis. Tidak ada infrastruktur CI.
- Mungkin tidak relevan tetapi kami mengelola inventaris kami menggunakan skrip dinamis
azure_rm.py
. - Kami didorong untuk seaman mungkin yaitu
- Jangan menyimpan kata sandi Vault di
~/.vault_pass
atau dalam file lokal apa pun - Jangan menyimpan rahasia Azure di
~/.azure/credentials
- Jangan menyimpan sesuatu yang aman
.bashrc
.
- Jangan menyimpan kata sandi Vault di
Dalam skenario seperti itu, saya mengalami masalah dengan strategi yang koheren untuk memastikan bahwa buku pedoman saya dapat mengakses rahasia Azure, sambil mengikuti pedoman di atas.
Pertanyaan
Bagaimana saya bisa menghindari menyimpan kredensial Vault dan Azure pada file, sambil tetap memastikan playbook saya dapat mengaksesnya?
Apa yang saya coba
Sejauh ini saya telah memunculkan skrip wrapper itu
- meminta pengguna untuk kata sandi Vault
- Menggunakannya untuk mendekripsi skrip Vaulted Shell
- Mengevaluasi skrip, yang memuat variabel lingkungan Azure ke lingkungan;
- Jalankan playbook pada lingkungan yang telah ditetapkan.
Adakah solusi yang lebih baik (lebih elegan, lebih rumit, lebih "Ansible") di luar sana?
ansible
ansible-vault
Vish
sumber
sumber
Jawaban:
Kata sandi brankas
Pertama-tama, Anda harus membiasakan diri dengan fakta bahwa file sandi vault dapat berupa skrip yang dapat dieksekusi. Dalam hal ini Ansible menjalankannya dan mengharapkan untuk menerima kata sandi sebagai hasilnya.
Misalnya Anda dapat menggunakan
gpg-agent
ataukeychain
menyimpan kata sandi Anda yang sebenarnya dan membukanya saat diperlukan. Baca selengkapnya di posting blog ini: https://benincosa.com/?p=3235Jika Anda sedikit paranoid, Anda dapat menambahkan pemberitahuan saat skrip kata sandi Anda dipanggil, seperti ini:
Skrip kata sandi kubah ini digunakan
key.gpg
sebagai kunci kubah yang sebenarnya dan juga menampilkan pemberitahuan sembulan (untuk MacOS) dengan nama proses induk saat skrip digunakan. Gpg-agent cache password membuka kunci untuk beberapa waktu, sehingga tidak perlu memasukkan kata sandi setiap kali Anda memulai playbook.Cukup atur
vault_password_file = ./vault_pass.sh
diansible.cfg
.Lingkungan Hidup
Anda mengatakan bahwa Anda menggunakan
azure_rm.py
sebagai skrip inventaris dinamis. Ini berarti bahwa Anda harus menetapkan kredensial ke dalam variabel lingkungan Anda sebelum Anda memulai playbook yang memungkinkan untuk dapat menggunakannya.Anda dapat membuat dua file:
secure_env
(dienkripsi dengan brankas):set_env
(teks biasa):Ketika Anda membuka terminal baru untuk menjalankan tugas otomasi Anda, Anda harus menjalankan:
Pada saat ini, bash mengevaluasi
set_env
dansecure_env
(mendekripsi melalui ansible-vault). Setelah perintah ini, Anda memiliki kredensial Azure yang ditentukan untuk shell saat ini, sehingga Anda dapat menjalankan buku pedoman seperti biasa:Jadi, menggunakan dua pendekatan ini, Anda dapat menyimpan
key.gpg
dansecure_env
di repositori Anda; lalu di terminal call barusource set_env
satu kali, masukkan kata sandi gpg sekali (untuk membuka kunci penggunaan key.gpg); lalu teleponansible-playbook
sesering mungkin tanpa kata sandi.sumber
source
pendekatan, Anda menetapkan lingkungan sekali per sesi terminal dan dapat menggunakan semua rentang alat secara terpisah: buku pedoman yang memungkinkan, skrip inventaris, klik biru, tanpa pembungkus apa pun.Silakan baca https://docs.ansible.com/ansible/2.4/vault.html Sejak Ansible 2.4 orang dapat menggunakan
--vault-id @prompt
.Enkripsi file menggunakan vault yang dimungkinkan:
Jalankan playbook dan itu akan menghasilkan:
Ada beberapa opsi untuk mendekripsi file, termasuk
@prompt
:akan meminta:
Setelah kata sandi brankas dimasukkan, playbook akan berhasil.
sumber
--ask-vault-pass
opsi yang lebih lama . Dan saya gagal memahami bagaimana menggantinya dengan--vault-id
akan menjawab pertanyaan yang lebih besar dari alur kerja yang lebih baik.ansible-playbook --vault-id my-vault-password.py
. Saya pikir mungkin Anda punya solusi menggunakan skrip python :) Saya juga sedang memikirkan hal ini.