Bagaimana cara mengenkripsi file biner dalam Kemungkinan?

9

Kami menggunakan Ansible Vault untuk menyimpan kata sandi, kunci pribadi untuk sertifikat, dll. Di repositori git Playbook Ansible kami. Semua data pribadi kami yang ada adalah dalam bentuk teks, sehingga kami dapat menyimpannya dalam variabel. Ini kemudian digunakan dalam template atau dengan contentparameter modul salin.

Sekarang, kami memiliki file Java KeyStore, yang sayangnya memiliki format biner. Dengan demikian, itu tidak dapat disimpan di dalam variabel - atau setidaknya saya tidak tahu bagaimana melakukannya. Apa cara termudah untuk membuat file kita dienkripsi dengan benar sementara itu berada di git, tetapi tersedia saat dijalankan ansible-playbook?

Apa yang sudah saya coba tanpa keberhasilan:

  • Pengkodean file biner di base64, menyimpan data yang dikodekan dalam variabel dan menggunakan modul template dengan {{base64_data | b64decode}}. Mengarah ke banyak EF BF BDdump hex dari file yang dihasilkan. Tiga byte mengkodekan karakter pengganti Unicode di UTF-8, jadi ada masalah dengan menafsirkan data biner sebagai teks.
  • Pengkodean file biner di base64, menyimpan data yang dikodekan dalam variabel dan menggunakan modul salin dengan content="{{base64_data | b64decode}}". Kemungkinan mengeluh dengan "Variabel memasukkan parameter baru ke dalam argumen modul." Saat menggunakan tanda kutip tunggal dan bukan tanda kutip ganda, Ansible mengeluh dengan "string argumen parsing kesalahan", dan salinan dari semua data biner, dibuang ke terminal ...
Daniel Seither
sumber
Dari diskusi di groups.google.com/d/topic/ansible-project/IinZK14FyX4 saya berkesimpulan bahwa ansible tidak mendukung ini, dan Anda harus melakukan beberapa hal base64 sendiri, tetapi mungkin ada beberapa hal pihak ketiga itu bisa membuatnya lebih mudah.
Antonis Christofides
Terima kasih, ini terlihat bagus. Akan mencobanya dan melaporkan kembali ...
Daniel Seither
Tidak, sayangnya tidak berfungsi (lihat pertanyaan yang diedit). Ada beberapa diskusi seputar permintaan tarik yang mungkin yang mungkin relevan: github.com/ansible/ansible-modules-extras/pull/142
Daniel Seither
Pernahkah Anda berpikir untuk membungkus ini dengan panggilan GPG? Anda dapat memiliki representasi ASCII dari kunci pribadi GPG yang disimpan di Ansible Vault, dan menggunakannya untuk mendekripsi file biner Anda, yang kemudian dapat disimpan dalam git tanpa masalah.
Christopher Karel
Terima kasih atas saran Anda, tetapi solusi ini sedikit lebih terlibat daripada yang saya inginkan. Saya sudah berpikir tentang menyalin KeyStore yang dikodekan base64 ke mesin target dan memiliki handler yang menerjemahkan file pada pembaruan, tapi saya lebih suka solusi yang tidak membuang-buang file sementara.
Daniel Seither

Jawaban:

4

Anda dapat menggunakan perintah shell dengan variabel base64 untuk melakukan itu.

- vars:
  - myvar: "<my_base64_var>"
- name: Create binary file
  shell: "echo '{{myvar}}' | base64 -d > /var/tmp/binary.dat"

Eric

elhostis
sumber
Ini jelas merupakan pilihan, terutama karena tidak menggunakan file sementara. Sayangnya, itu tidak memungkinkan untuk mendeteksi apakah suatu perubahan telah dibuat, tetapi lebih baik daripada semua solusi lain yang pernah saya lihat.
Daniel Seither
1
Saya pikir vault mendukungnya sekarang: "Fitur vault juga dapat mengenkripsi file sewenang-wenang, bahkan file biner. Jika file yang dienkripsi vault diberikan sebagai argumen src ke modul copy, file akan ditempatkan di tujuan pada host target didekripsi (dengan asumsi kata sandi kubah yang valid diberikan saat menjalankan permainan). " - docs.ansible.com/ansible/playbooks_vault.html
Mike Gleason jr Couturier
2
Perhatikan bahwa mereka tampaknya telah memindahkan teks yang dikutip oleh @MikeGleasonjrCouturier ke halaman lain di dokumentasi yang dimungkinkan; lihat docs.ansible.com/ansible/latest/vault.html sekarang.
Liam
2

Cara kami melakukannya untuk pengaturan yang memungkinkan kami adalah:

-Kami mengenkripsi materi sensitif individual (sebagian kecil dari repositori kami) menggunakan https://www.agwa.name/projects/git-crypt/ -Kita semua selalu berkomitmen menggunakan tag tanda git -Kami secara berkala memeriksa apakah ada file yang tidak ditandatangani

Keuntungan dari git-crypt adalah karena bergantung pada filter git, enkripsi menjadi transparan. Plus, Anda dapat memberikan akses ke repositori kepada pengembang tanpa mengurangi konten terenkripsi (itu akan mengabaikan file yang dienkripsi jika tidak ada kunci dekripsi yang dapat diperoleh).

MemCtrl
sumber