Apa praktik terbaik penataan variabel enkripsi sejak Ansible 2.3.0?

8

Dokumen ini menunjukkan bahwa karena An 2.3 mungkin harus mengenkripsi vars tertentu menggunakan !vault |awalan alih-alih meletakkan variabel dan kunci dalam file vault dan mengenkripsi sepenuhnya.

notsecret: myvalue
mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136
other_plain_text: othervalue

Saat ini strukturnya adalah sebagai berikut:

ansible/group_vars/testing/vars
ansible/group_vars/testing/vault

Ketika variabel terenkripsi dipindahkan dari vault ke direktori vars dan ansible-vault decrypt ansible/group_vars/testing/varsdijalankan kembali:

ERROR! input is not vault encrypted data for ansible/group_vars/testing/vars

Variabel berkubah ini didekripsi dengan rahasia vault yang disediakan dan digunakan sebagai variabel normal. Baris perintah anault-vault mendukung stdin dan stdout untuk mengenkripsi data dengan cepat, yang dapat digunakan dari editor favorit Anda untuk membuat variabel berkubah ini; Anda hanya perlu memastikan untuk menambahkan tag! vault sehingga Ansible dan YAML menyadari kebutuhan untuk mendekripsi. | juga diperlukan, karena enkripsi vault menghasilkan string multi-line.

Pertanyaan

  1. Haruskah variabel yang perlu dienkripsi, dienkripsi satu per satu menggunakan baris perintah?
  2. Apa praktik terbaik untuk merestrukturisasi struktur Ansible lama? Misalnya menghapus file vault dan meletakkan semua vars terenkripsi dalam file vars?
030
sumber

Jawaban:

2

Setelah bekerja dengan kubah yang mungkin baru-baru ini (khususnya mengenai apa yang mengenkripsi dan cara mengenkripsi hal-hal itu tanpa membuat kode tidak dapat dibaca) Saya telah menemukan sedikit insentif untuk mengubah kebiasaan saya di 2.3.

Jika saya akan memiliki serangkaian variabel terenkripsi, atau file, simpan terpisah (saya awali semuanya vault_) dan biarkan saja.

Beberapa kali saya telah menggunakan fitur vault! Tapi dibiarkan tidak jelas karena tampaknya lebih mudah untuk menjadi sangat eksplisit tentang apa yang dan tidak berasal dari file rahasia. Dengan begitu, tidak ada yang mengedit permainan saya membuat asumsi tentang apa itu data sensitif dan tidak.

hvindin
sumber
1

Saya telah memutuskan untuk menghapus ansible/group_vars/testingdirektori dan menggantinya dengan file, yaitu ansible/group_vars/testingyang berisi vars terenkripsi:

mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136

Alih-alih menjalankan, ansible-vault edit ansible/group_vars/testing/vaultseseorang dapat mem-pipe nilai-nilai yang perlu dienkripsi ke ansible-vault, yaitu printf mysecret | ansible-vault encrypt. Yang terakhir akan mengenkripsi mysecretdan hasilnya bisa ditambahkan ke ansible/group_vars/testingfile. Ketika ansible-playbookakan dijalankan, variabel yang dienkripsi akan didekripsi jika file vault yang diijinkan ditentukan tentu saja.

Jika nilai terenkripsi perlu di-debug maka kode berikut ini dapat digunakan:

- debug: msg="Decrypted value: {{ encrypted_var }}"
030
sumber