Apa praktik terbaik untuk menggunakan Ansible Vault di CI publik dan Repositori Kontrol Sumber seperti BitBucket?

11

pengantar

Pada CI pribadi dan Repositori Kontrol Sumber seperti Gitlab-ce dimungkinkan untuk menyalin ~ / .vault_pass.txt ke server dan membiarkannya digunakan oleh CI untuk mendekripsi file menggunakan Ansible.

Masalah

Pada Repositori CI dan Source Control publik seperti Bitbucket, tidak mungkin untuk menyalin ~ / .vault_pass.txt ke server CI itu sendiri.

Diskusi

Dalam Bitbucket adalah mungkin untuk mendefinisikan variabel dienkripsi, tetapi ketika ini berkas diperiksa variabel terkait hanya VAULT adalah:

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

Variabel-variabel ini bukan pilihan untuk menyelesaikan masalah seperti ketika ANSIBLE_ASK_VAULT_PASSset ansible-vaultmasih meminta:

user@host $
Vault password:

Ketika kata sandi yang sama dimasukkan, itu dapat membuka file yang dienkripsi, tetapi tujuannya adalah untuk membuka file tanpa perlu file atau memasukkan kata sandi dalam prompt.

Upaya lain untuk menyelesaikan masalah sedang berjalan export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>, tetapi mode interaktif tetap ada.

Pilihan lain adalah export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt, tetapi kemudian file ini perlu didorong ke repositori, tetapi repositori Kontrol sumber tidak boleh mengandung kata sandi.

030
sumber
2
Hai @ 030, bisakah Anda menjelaskan apa yang Anda maksud dengan CI? Bagi saya ini berarti Integrasi Berkelanjutan , namun GitLab dan BitBucket juga merupakan Sumber Kontrol Repositori - pertanyaannya akan lebih jelas jika CI diperluas.
Richard Slater

Jawaban:

8

--vault-password-filesebagai gantinya dapat menunjuk ke skrip yang dapat dieksekusi yang menulis ke stdout. Fitur yang kurang dikenal ini harus menyelesaikan masalah Anda.

Pertama, tulis skrip sederhana yang dapat dieksekusi yang mencetak variabel lingkungan sistem, dan periksa itu ke dalam kontrol sumber Anda. Kemudian, gunakan fitur variabel terenkripsi Bitbucket untuk mengatur variabel lingkungan itu menjadi rahasia Anda-kubah. Akhirnya, jalankan seperti:

ansible-playbook site.yml --vault-password-file ./mypass.sh.

Referensi:

  1. http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault

  2. https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto

Hunter Hutan
sumber
Dan kemudian mypass.sh akan berisi echo $VARmisalnya dan var ini akan diatur di UI BitBucket?
030
Ya! Atau, inilah contoh Python: stackoverflow.com/questions/4906977/…
Woodland Hunter
([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
030
1

Menggunakan

ansible-playbook site.yml --vault-password-file ./mypass.sh

menghasilkan:

ERROR! Problem running vault password script / p a t h / t o
/ e c h o _ v a u l t _ p a s s . s h ([Errno 8] Exec format error). If this is 
not a script, remove the executable bit from the file.

Berdasarkan posting ini , yang berikut ini didefinisikan dalam bitbucket-pipeline:

image: docker:latest

pipelines:
  default:
    - step:
        script:
          - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
          - ansible-playbook -i ansible/inventory ansible/site.yml --vault-password-file .vault_password.txt
030
sumber
-1

Anda dapat mengatur tes yang tidak menjalankan produksi, dan memuat file yang berbeda untuk itu.

Buat host_vars / localhost / vault yang hanya berfungsi untuk instalasi pengujian lokal.

Dengan begitu Anda bisa menggunakan kata sandi brankas terbuka yang hanya berfungsi untuk brankas host lokal itu.

Findarato
sumber