Cara menggunakan Variabel dan Vault Ansible

Bagaimana ExpressVPN memanfaatkan Ansible

Cara kami menggunakan Ansible secara luas di ExpressVPN

Tim pengembangan kami bekerja secara independen, artinya, sebuah tim memiliki produk mereka untuk siklus hidup penuhnya. Pengaturan ini berarti pemahaman Ansible kami berasal dari kumpulan pengetahuan dari banyak tim berbeda di perusahaan daripada kelompok terpusat yang mengelola Ansible.

Tenaga kerja yang terdesentralisasi memberi tim kami banyak fleksibilitas dan mobilitas tetapi juga memberi tekanan pada individu untuk tahu banyak tentang banyak alat.

Untuk mempermudah berbagi pengetahuan dan menggunakan alat dengan benar, kami telah memutuskan untuk menstandarisasi cara kami menggunakan Kemungkinan untuk manajemen konfigurasi dan operasi server.

Blog ini mencakup pelajaran yang telah kami pelajari tentang operasi pada skala kami, refleksi tentang cara kami bekerja, dan bagaimana kami mengelola Ansible dalam konteks seperti itu.

Dokumentasi yang memungkinkan

Mari kita selesaikan! Dokumentasi untuk Ansible meninggalkan beberapa hal yang diinginkan, terutama ketika datang ke dokumentasi end-to-end (seperti, bagaimana Anda mendapatkan dari titik A ke titik Z?).

Beberapa pertanyaan yang sering kita temui adalah: "Bagaimana cara kerja presedensi variabel?" Dan "Bagaimana Anault Vault masuk?"

Kedua masalah tersebut didokumentasikan dengan sangat baik secara independen (di sini dan di sini), dan halaman Ansible Variables memiliki bagian yang sangat bagus tentang presedensi secara eksplisit, tetapi persimpangan keduanya hanya mendapat penyebutan singkat. Masalahnya adalah bahwa tidak ada tautan antara dokumentasi tentang Variabel dan kubah, memberi kesan bahwa tanggung jawab ada pada pengguna untuk mencari tahu bagaimana keduanya berpotongan satu sama lain..

Jadi, hari ini kami akan mencoba mencakup persimpangan antara Variabel dan Vault dan praktik terbaik.

Untuk apa Anda dapat menggunakan file Vault Ansible

Singkatnya: Dokumentasi Vault menyatakan itu Anda pada dasarnya dapat mengenkripsi apa pun di dalam folder Ansible Anda ke dalam file Vault, dan Ansible akan mencoba "secara cerdik" mendekripsinya setiap kali sebuah permainan memasukkan file-file ini. Hah. Keren!

Dokumentasi tentang Variabel sama sekali tidak menyebutkan tentang file Vault, yang aneh karena Vault dirancang untuk file Variable. Jadi bagaimana mereka cocok? Penting untuk dicatat itu File vault sendiri tidak memiliki arti khusus untuk pemrosesan Variabel atau diutamakan, jadi ada banyak fleksibilitas. Tetapi secara potensial hal ini tidak memberi Anda cukup informasi tentang cara menggunakannya dengan benar.

Bagaimana tidak menggunakan AnsibleKamu melakukannya dengan salah.

Ambil contoh folder Ansible sederhana ini:

.
├── group_vars
│ ├── semuanya
│ ├── produksi
│ └── pementasan
├── ansible.cfg
├── inventaris
└── playbook.yml

Sekilas, pengaturan ini terlihat bagus; ini akan menjadi struktur yang relatif umum untuk dihasilkan jika Anda membaca dokumentasi. Seorang pengamat berpotensi berasumsi bahwa pementasan dan produksi file dalam group_vars adalah Vault, tetapi itu tidak selalu benar, yang dengan sendirinya merupakan masalah.

Sekarang, file "semua" tidak bisa menjadi file Vault karena Anda (semoga) mengenkripsi file Vault staging dan produksi dengan kata sandi yang berbeda. Tetapi itu juga berarti bahwa file group_vars Anda untuk lingkungan perlu mengandung campuran rahasia dan non-rahasia karena Anda terbatas pada satu file per lingkungan.

Karena itu — dan jika Anda memperkirakan sedikit setelah membaca intro ke Vaults dalam dokumentasi Ansible — Anda mungkin membuat kubah produksi / pementasan dengan menyalin konten "semua" pada awalnya dan kemudian mengubahnya.

Itu berarti file "semua" Anda mungkin terlihat seperti ini:

basis data:
nama pengguna: default_user
kata sandi: salah

super_important_var_that_should_be_one: 1

Dan file Vault produksi Anda mungkin terlihat seperti ini:

basis data:
nama pengguna: produser
kata sandi: supersecretpasswordnoonecansee

super_important_var_that_should_be_one: 1

(Jangan khawatir, ini bukan kata sandi produksi kami yang sebenarnya! Kami memeriksa ulang.)

Di atas berbahaya karena alasan yang mungkin tidak jelas. Misalnya, Anda mungkin kehilangan mengubah default untuk produksi, dan / atau "semua" file Anda bahkan mungkin salah dan tidak disertakan sama sekali! (Ini adalah akar penyebab pemadaman yang kami alami minggu lalu.)

Praktik terbaik: Cara menggunakan file Vault Ansible dengan aman

Seperti yang dinyatakan di halaman praktik terbaik, membuat file menjadi file Vault mengaburkan konten file, sehingga mereka datang dengan kelemahan besar: Anda tidak dapat mencari variabel apa yang ada di dalam file Vault tanpa secara eksplisit mendekripsi mereka. Sistem ini berarti bahwa siapa pun yang melihat konfigurasi Ansible Anda tidak tahu apa yang ada di dalam file-file ini tanpa juga mengetahui kata sandi Vault (mengerikan untuk ulasan kode!). Oleh karena itu, kami sarankan untuk meletakkan sesedikit mungkin Variabel secara manusiawi di dalam file Vault. (Dengan kata lain, hanya letakkan rahasia di file Vault!)

Jadi, mari kita lihat struktur yang akan membuatnya lebih mudah untuk tidak menembak diri sendiri di kaki:

.
├── group_vars
│ ├── semuanya
│ │ └── vars.yml
│ ├── produksi
│ │ ├── vars.yml
│ │ └── vault.yml
│ └── pementasan
│ └── vault.yml
├── ansible.cfg
├── inventaris
└── playbook.yml

Dokumentasi praktik terbaik juga merekomendasikan penggunaan "lapisan tipuan," yang berarti bahwa Anda harus menggunakan semua Variabel dalam file Vault ke dalam Variabel yang dirujuk dalam buku pedoman Anda. Ini juga merekomendasikan Anda untuk mengawali variabel vault Anda dengan "vault_" yang berarti semua / vars.yml Anda bisa terlihat seperti:

basis data:
nama pengguna: default_user
kata sandi: "{{vault_database_password}}"

super_important_var_that_should_be_one: 1

Produksi Anda / vars.yml terlihat seperti ini:

basis data:
nama pengguna: produser

Dan file production / vault.yml Anda seharusnya hanya berisi ini:

vault_database_password: supersecretpasswordnoonecansee

Struktur yang direvisi ini memiliki beberapa manfaat. Pertama-tama, jika Anda melakukan tinjauan kode (silakan lakukan!), Itu artinya pengulas Anda dapat melihat apa yang telah Anda ubah, bersama dengan apa yang telah Anda tambahkan dan hapus di (hampir semua) konfigurasi Anda. Dengan struktur ini, pengulas tidak akan hanya melihat perubahan file lengkap pada Vault yang perlu didekripsi secara manual, disimpan ke disk, dan berbeda dengan versi sebelumnya..

Dan, yang lebih penting, Ansible akan gagal bahkan memberikan vars jika tidak ada vault_database_password Variabel dalam Vault, yang akan menyelamatkan Anda dari setidaknya sejumlah masalah yang mungkin Anda temui jika Anda tidak menjaga tab dekat pada file Vault Anda.

Jika Anda tetap pada pola ini, tidak peduli apakah itu grup host dalam suatu lingkungan, lingkungan penuh yang Anda atur untuk Variabel, atau bahkan folder "semua", rekan-rekan Anda tidak akan pernah bingung tentang apa yang ada dan yang tidak ada di dalam Vault.

Itu saja untuk saat ini, kami harap ini berguna bagi Anda!

Cara menggunakan Variabel dan Vault Ansible
admin Author
Sorry! The Author has not filled his profile.