Ansible'da ikili dosyalar nasıl şifrelenir?


9

Ansible Playbook git depomuzda şifreleri, sertifikalar için özel anahtarları vb. Saklamak için Ansible Vault kullanıyoruz . Mevcut tüm özel verilerimiz metin biçimindedir, bu yüzden değişkenlerde saklayabiliriz. Bunlar daha sonra şablonlarda veya contentkopya modülünün parametresiyle kullanılır .

Şimdi, ne yazık ki bir ikili biçime sahip bir Java KeyStore dosyası var. Bu nedenle, bir değişkenin içinde saklanamaz - veya en azından nasıl yapılacağını bilmiyorum. Git dosyasındayken dosyamızı düzgün bir şekilde şifrelemenin, ancak çalışırken kullanılabilir olmanın en kolay yolu nedir ansible-playbook?

Zaten başarılı olmadan denedim:

  • Base64 içindeki ikili dosyayı kodlama, kodlanmış verileri bir değişkene kaydetme ve şablon modülünü kullanma {{base64_data | b64decode}}. EF BF BDOrtaya çıkan dosyanın onaltılık dökümünde bir sürü yol açar . Üç bayt UTF-8'deki Unicode değiştirme karakterini kodlar, bu nedenle ikili verileri metin olarak yorumlamada bir sorun vardır.
  • Base64'deki ikili dosyayı kodlama, kodlanmış verileri bir değişkene kaydetme ve kopyalama modülünü ile kullanma content="{{base64_data | b64decode}}". Ansible, "Bir değişken, modül argümanlarına yeni bir parametre ekledi." Çift tırnak yerine tek tırnak kullanılırken Ansible, "hata ayrıştırma argüman dizesi" ve terminale dökülen tüm ikili verilerin bir kopyasından şikayet eder ...

Bir tartışmadan groups.google.com/d/topic/ansible-project/IinZK14FyX4 O yanıtlayıcı 'bunu desteklemiyor sonuçlandırmak ve kendi başınıza bazı base64 şeyler yapmak zorunda olduğunu, ancak bazı üçüncü parti şeyler olabileceğini bunu kolaylaştırabilir.
Antonis Christofides

Teşekkürler, bu iyi görünüyor. Deneyecek ve geri rapor edecek ...
Daniel Seither

Hayır, ne yazık ki çalışmıyor (düzenlenmiş soruya bakın). Ansible bir çekme isteği hakkında alakalı olabilecek bazı tartışmalar var: github.com/ansible/ansible-modules-extras/pull/142
Daniel Seither

Bunu GPG çağrılarıyla sarmalamayı düşündünüz mü? Bir GPG özel anahtarının ASCII temsilini Ansible Vault'da depolayabilir ve ikili dosyanızın şifresini çözmek için bunu kullanabilirsiniz, bu da git'te sorunsuz bir şekilde saklanabilir.
Christopher Karel

Öneriniz için teşekkürler, ancak bu geçici çözüm olmasını istediğimden biraz daha kapsayıcı. Base64 ile kodlanmış KeyStore'u hedef makineye kopyalamayı ve güncelleme sırasında dosyayı çözen bir işleyiciye sahip olmayı düşündüm, ancak geçici dosyaların etrafında dolaşmayan bir çözümü tercih ederim.
Daniel Seither

Yanıtlar:


4

Bunu yapmak için base64 değişkenli bir kabuk komutu kullanabilirsiniz.

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

Eric


Bu, özellikle geçici bir dosya kullanmadığı için kesinlikle bir seçenektir. Ne yazık ki, Ansible'ın bir değişiklik yapılıp yapılmadığını tespit etmesine izin vermiyor, ancak gördüğüm diğer tüm çözümlerden daha iyi.
Daniel Seither

1
Kasanın şimdi desteklediğini düşünüyorum: "Kasa özelliği ayrıca rasgele dosyaları, hatta ikili dosyaları şifreleyebilir. Kasa şifreli bir dosya kopyalama modülüne src bağımsız değişkeni olarak verilirse, dosya hedef ana bilgisayarda hedefe yerleştirilir şifresi çözüldü (oyunu çalıştırırken geçerli bir kasa şifresi sağlandığı varsayılarak). " - docs.ansible.com/ansible/playbooks_vault.html
Mike Gleason jr Couturier

2
@MikeGleasonjrCouturier tarafından alıntılanan metni, sorumlu dokümandaki farklı bir sayfaya taşıdıklarını unutmayın; şimdi docs.ansible.com/ansible/latest/vault.html adresine bakın .
Liam

2

Ansible kurulumumuz için bunu yapma şeklimiz:

-Bireysel hassas materyalleri (depomuzun küçük bir alt kümesi) https://www.agwa.name/projects/git-crypt/ kullanarak şifreliyoruz. -Biz her zaman git işareti etiketlerini kullanıyoruz

Git-crypt'in avantajı git filtrelerine dayandığından şifrelemenin şeffaf olmasıdır. Ayrıca şifreli içerikten ödün vermeden geliştiricilere depoya erişim verebilirsiniz (şifre çözme anahtarı alınamazsa şifrelenmiş dosyaları yok sayar).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.