Як зашифрувати двійкові файли в Ansible?


9

Ми використовуємо Ansible Vault для зберігання паролів, приватних ключів для сертифікатів тощо у нашому сховищі git Ansible Playbook. Всі наші існуючі приватні дані у текстовій формі, тому ми можемо зберігати їх у змінних. Потім вони використовуються в шаблонах або з contentпараметром модуля копіювання.

Тепер ми маємо файл Java KeyStore, який, на жаль, має двійковий формат. Як такий, він не може зберігатися всередині змінної - або, принаймні, я не знаю, як це зробити. Який би був найпростіший спосіб, щоб наш файл був зашифрований належним чином, поки він знаходиться в git, але доступний під час роботи ansible-playbook?

Що я вже намагався без успіху:

  • Кодування двійкового файлу в base64, зберігання кодованих даних у змінній та використання модуля шаблону з {{base64_data | b64decode}}. Приводить до безлічі EF BF BDшестигранних дампів отриманого файлу. Три байти кодують символ заміни Unicode в UTF-8, тому виникає проблема з інтерпретацією бінарних даних як тексту.
  • Кодування двійкового файлу в base64, зберігання кодованих даних у змінній та використання модуля копіювання з content="{{base64_data | b64decode}}". Відповідач скаржиться на те, що "Змінна вставила новий параметр в аргументи модуля." При використанні одиничних лапок замість подвійних лапок, Ansible нарікає на "аргумент рядка аргументу рядка" та копію всіх бінарних даних, скидаються на термінал ...

З обговорення в groups.google.com/d/topic/ansible-project/IinZK14FyX4 я роблю висновок, що ansible цього не підтримує, і вам доведеться робити якісь базові 64 речі самостійно, але, можливо, є деякі сторонні речі що може полегшити.
Антоніс Христофідес

Дякую, це виглядає добре. Спробую і
доповім

Ні, це, на жаль, не працює (див. Відредаговане запитання). Існує деяка дискусія навколо запиту на підтягування, який може бути актуальним: github.com/ansible/ansible-modules-extras/pull/142
Даніель Сієтер

Чи думали ви про те, щоб завершити це за допомогою GPG-дзвінків? Ви можете мати ASCII-представлення приватного ключа GPG, що зберігається в Ansible Vault, і використовувати його для розшифрування вашого бінарного файлу, який потім може зберігатися в git без проблем.
Крістофер Карел

Дякуємо за вашу пропозицію, але це вирішення дещо більше, ніж я хотів би. Я вже думав про те, щоб скопіювати KeyStore, кодований base64, на цільову машину та мати обробник, який декодує файл при оновленні, але я вважаю за краще рішення, яке не кидає тимчасові файли.
Даніель Сітер

Відповіді:


4

Для цього можна використовувати команду оболонки зі змінною base64.

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

Ерік


Це, безумовно, варіант, тим більше, що він не використовує тимчасовий файл. На жаль, це не дозволяє Ansible виявляти, чи було внесено зміни, але це краще, ніж усі інші рішення, які я бачив.
Даніель Сітер

1
Я думаю, що Vault це підтримує і зараз: "Функція vault може також шифрувати довільні файли, навіть бінарні файли. Якщо файл, зашифрований у сховищі, подається як аргумент src до модуля копіювання, файл буде розміщений у пункті призначення на цільовому хості розшифровується (припустимо, що при запуску відтворення вводиться дійсний пароль сховища. " - docs.ansible.com/ansible/playbooks_vault.html
Майк Глісон-молодший Кутюр’є

2
Зауважте, що вони, як видається, перемістили текст, цитований @MikeGleasonjrCouturier, на іншу сторінку в ансамблі, що відповідає. див. docs.ansible.com/ansible/latest/vault.html зараз.
Ліам

2

Як ми це робимо для нашої відповідальної установки:

-Ми шифруємо окремий конфіденційний матеріал (невеликий підмножина нашого сховища) за допомогою https://www.agwa.name/projects/git-crypt/ -Всі ми завжди здійснюємо використання тегів знаків git. - Періодично перевіряємо, чи є неподписані файли

Перевага git-crypt полягає в тому, що, оскільки він спирається на фільтри git, шифрування є прозорим. Крім того, ви можете надати доступ до сховища розробникам без шкоди для зашифрованого вмісту (він буде ігнорувати зашифровані файли, якщо не вдасться отримати ключ розшифровки).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.