Ansible में बाइनरी फ़ाइलों को एन्क्रिप्ट कैसे करें?


9

हम अपने Ansible Playbook git रिपॉजिटरी में पासवर्ड, प्रमाण पत्र के लिए निजी कुंजी आदि को संग्रहीत करने के लिए Ansible Vault का उपयोग कर रहे हैं । हमारे सभी मौजूदा निजी डेटा टेक्स्ट फॉर्म में हैं, इसलिए हम इसे वेरिएबल्स में स्टोर कर सकते हैं। फिर इनका उपयोग टेम्पलेट्स में या contentकॉपी मॉड्यूल के पैरामीटर के साथ किया जाता है ।

अब, हमारे पास एक जावा कीस्टोर फाइल है, जो दुखद रूप से एक द्विआधारी प्रारूप है। जैसे, यह एक चर के अंदर संग्रहीत नहीं किया जा सकता है - या कम से कम मुझे नहीं पता कि यह कैसे करना है। यह आसान तरीका होगा कि हमारी फ़ाइल ठीक से एन्क्रिप्ट की गई हो, जबकि यह git में टिकी हो, लेकिन उपलब्ध होने पर ansible-playbook?

मैंने पहले ही सफलता के बिना क्या करने की कोशिश की है:

  • बेस 64 में बाइनरी फ़ाइल को एनकोड करना, एन्कोडेड डेटा को एक चर में संग्रहीत करना और टेम्पलेट मॉड्यूल का उपयोग करना {{base64_data | b64decode}}EF BF BDपरिणामस्वरूप फ़ाइल के हेक्स डंप के बहुत सारे की ओर जाता है । तीन बाइट्स यूटीएफ -8 में यूनिकोड रिप्लेसमेंट चरित्र को एनकोड करते हैं, इसलिए बाइनरी डेटा को टेक्स्ट के रूप में व्याख्या करने के साथ एक समस्या है।
  • बेस 64 में बाइनरी फ़ाइल को एनकोड करना, एन्कोडेड डेटा को एक चर में संग्रहीत करना और कॉपी मॉड्यूल का उपयोग करना content="{{base64_data | b64decode}}"। "एक चर मॉड्यूल मॉड्यूल में एक नया पैरामीटर डाला" के साथ Ansible शिकायत करता है। दोहरे उद्धरण-चिह्नों के बजाय एकल उद्धरणों का उपयोग करते समय, अंसिबल ने "त्रुटि पार्सिंग तर्क स्ट्रिंग", और टर्मिनल पर डंप किए गए सभी बाइनरी डेटा की एक प्रतिलिपि के साथ शिकायत की ...

समूहों में एक चर्चा से ।google.com /d/topic/ansible-project/ IinZK14FyX4 मैं यह निष्कर्ष निकालता हूं कि ansible इसका समर्थन नहीं करता है, और आपको अपने आधार पर कुछ आधार 64 सामान करना होगा, लेकिन यह कि कोई तीसरा पक्ष सामान हो सकता है यह आसान बना सकता है।
एंटोनी क्रिस्टोफ़ाइड्स

धन्यवाद, यह अच्छा लग रहा है। यह कोशिश करेंगे और वापस रिपोर्ट करेंगे ...
डैनियल सीज़र

नहीं, यह दुख की बात है काम नहीं करता है (संपादित प्रश्न देखें)। वहाँ कुछ ansible पुल अनुरोध है कि प्रासंगिक हो सकता है के आसपास कुछ चर्चा है: github.com/ansible/ansible-modules-extras/pull/142
डैनियल Seither

क्या आपने इसे GPG कॉल के साथ लपेटने के बारे में सोचा है? आपके पास एंसिबल वॉल्ट में संग्रहीत एक GPG निजी कुंजी का ASCII प्रतिनिधित्व हो सकता है, और अपनी बाइनरी फ़ाइल को डिक्रिप्ट करने के लिए इसका उपयोग कर सकते हैं, जिसे तब बिना किसी समस्या के git में संग्रहीत किया जा सकता है।
क्रिस्टोफर कारेल

आपके सुझाव के लिए धन्यवाद, लेकिन यह वर्कअराउंड थोड़ा और अधिक शामिल है जितना मैं चाहूंगा। मैंने पहले ही बेस 64-इनकोडेड कीस्टस्टोर को लक्ष्य मशीन में कॉपी करने और हैंडलर होने के बारे में सोचा था जो अपडेट पर फाइल को डीकोड करता है, लेकिन मैं एक समाधान पसंद करूंगा जो अस्थायी फाइलों के आसपास नहीं फेंके।
डैनियल सीहोर

जवाबों:


4

आप ऐसा करने के लिए एक base64 चर के साथ एक शेल कमांड का उपयोग कर सकते हैं।

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

एरिक


यह निश्चित रूप से एक विकल्प है, खासकर जब से यह एक अस्थायी फ़ाइल का उपयोग नहीं करता है। अफसोस की बात है कि यह अन्सिबल को यह पता लगाने की अनुमति नहीं देता है कि क्या बदलाव किया गया था, लेकिन यह उन सभी अन्य समाधानों से बेहतर है जो मैंने देखे हैं।
डैनियल Seither

1
मुझे लगता है कि वॉल्ट अब इसका समर्थन करता है: "वॉल्ट फीचर मनमानी फाइलों, यहां तक ​​कि बाइनरी फाइलों को भी एन्क्रिप्ट कर सकता है। यदि वॉल्ट-एन्क्रिप्टेड फाइल को कॉपी मॉड्यूल के लिए src तर्क के रूप में दिया जाता है, तो फाइल को लक्ष्य होस्ट पर गंतव्य पर रखा जाएगा। डिक्रिप्ट (एक मान्य वॉल्ट पासवर्ड खेलते समय आपूर्ति की जाती है)। - docs.ansible.com/ansible/playbooks_vault.html
माइक

2
ध्यान दें कि वे @MikeGleasonjrCouturier के हवाले से लिखे गए पाठ को अनसूचित दस्तावेज में एक अलग पृष्ठ पर ले गए हैं; अब docs.ansible.com/ansible/latest/vault.html देखें ।
लियाम

2

जिस तरह से हम अपने ansible सेटअप के लिए है:

-हम https://www.agwa.name/projects/git-crypt/ का उपयोग करके व्यक्तिगत संवेदनशील सामग्री (हमारी भंडार का एक छोटा सबसेट) को एन्क्रिप्ट करते हैं। हम सभी हमेशा git साइन टैग का उपयोग करने के लिए प्रतिबद्ध हैं-यदि कोई अहस्ताक्षरित फ़ाइलें हैं तो हम समय-समय पर जांच करते हैं।

गिट-क्रिप्ट का लाभ यह है कि जैसे यह गिट फिल्टर पर निर्भर करता है, एन्क्रिप्शन पारदर्शी है। इसके अलावा आप एन्क्रिप्टेड सामग्री से समझौता किए बिना डेवलपर्स को रिपॉजिटरी तक पहुंच दे सकते हैं (यह एन्क्रिप्टेड फ़ाइलों को अनदेखा कर देगा यदि कोई डिक्रिप्शन कुंजी प्राप्त नहीं की जा सकती है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.