Мы используем Ansible Vault для хранения паролей, закрытых ключей для сертификатов и т. д. в нашем репозитории Ansible Playbook git. Все наши существующие частные данные представлены в текстовой форме, поэтому мы можем хранить их в переменных. Затем они используются в шаблонах или с content
параметр модуля копирования.
Теперь у нас есть файл Java KeyStore, который, к сожалению, имеет двоичный формат. Таким образом, его нельзя сохранить внутри переменной - по крайней мере, я не знаю, как это сделать. Каким будет самый простой способ правильно зашифровать наш файл, пока он находится в git, но доступен при запуске ansible-playbook
?
Что я уже безуспешно пробовал:
{{base64_data | b64decode}}
. Приводит к большому количеству EF BF BD
в шестнадцатеричном дампе получившегося файла. Эти три байта кодируют символ замены Unicode в UTF-8, поэтому возникает проблема с интерпретацией двоичных данных как текста.content="{{base64_data | b64decode}}"
. Ansible жалуется: «Переменная вставила новый параметр в аргументы модуля». При использовании одинарных кавычек вместо двойных кавычек Ansible жалуется на «ошибку синтаксического анализа строки аргумента» и копию всех двоичных данных, выгруженных на терминал ...Для этого вы можете использовать команду оболочки с переменной base64.
- vars:
- myvar: "<my_base64_var>"
- name: Create binary file
shell: "echo '{{myvar}}' | base64 -d > /var/tmp/binary.dat"
Эрик
Мы делаем это для нашей настройки ansible:
-Мы шифруем отдельные конфиденциальные материалы (небольшая часть нашего репозитория), используя https://www.agwa.name/projects/git-crypt/ -Мы все всегда фиксируем, используя теги git sign -Мы периодически проверяем, есть ли неподписанные файлы
Преимущество git-crypt в том, что поскольку он полагается на фильтры git, шифрование является прозрачным. Кроме того, вы можете предоставить разработчикам доступ к репозиторию без ущерба для зашифрованного содержимого (он будет игнорировать зашифрованные файлы, если невозможно получить ключ дешифрования).