```{index} ansible; ansible vault, vault; ansible vault, encryption, secrets, внешние ссылки, секреты, шифрование ``` % Альтернатива: использовать синтаксис ReST с соответствующей директивой: % % ```{eval-rst} % .. index:: % single: ansible; ansible vault % single: vault; ansible vault % single: encryption % single: secrets % single: внешние ссылки % single: секреты % single: шифрование % ``` % TODO: Использовать переносы строк в строках кода вместо % {container} full-width? # Ansible Vault Можно зашифровать одну или несколько переменных, и записать их в обычные плейбук, инвентарь, файл с переменными. Можно собрать все секреты в один или несколько файлов и зашифровать файлы целиком (даже плейбук / файл с тасками / ролью). ## Основы и использование зашифрованной переменной Команда для шифрования отдельной переменной (например, пароля или любой строки) с помощью `ansible-vault`: ``````{container} full-width ```bash ansible-vault encrypt_string --vault-id @prompt --stdin-name 'my_ansible_secret:' ``` `````` В `` указываем ***идентификатор*** для используемого пароля, нужен только для удобства, это своего рода *памятка*, с его помощью легко понять, какой именно пароль был использован для шифрования данного артефакта. `@promt` --- указание Ansible, что пароль будет введён интерактивно. `@/path/to/password/file` --- указание, что пароль нужно прочитать из указанного файла. ``````{container} full-width ```{note} - Можно использовать сколько угодно разных паролей, хоть каждую новую переменную шифровать с разными паролями. - Ansible не следит за уникальностью идентификаторов и/или соответствию их используемым паролям. Вы можете зашифровать три разные переменные тремя разными паролями, но указать для всех один идентификатор. Я бы так делать не стал --- но так можно. ``` `````` В примерах будет использован идентификатор `my_id`. Получаем результат: ``````{container} full-width ```yaml my_ansible_secret: !vault | $ANSIBLE_VAULT;1.2;AES256;my_id 61653232646132333838353365663134346264653139363166316661343730306135346237386635 6235623933653464376535383262626530376531353039300a353333613731396466333134303364 66343964616232623561346334646432306564353066633930626136336639646538303330666132 3332663730656162630a323933313165396366613730393736303039613965376135666638636432 34323862343431663162336662396338616464333236656239333261303535316639333961373266 3230356433303065323766396233306462323163643665366331 ``` `````` Его используем как обычную переменную Ansible: ```yaml need_to_use_secret_here: "{{ my_ansible_secret }}" ``` Для использования плейбука, содержащего данную переменную: ``````{container} full-width ```bash ansible-playbook --vault-id my_id@prompt playbook/this_playbook_uses_secret.yml ``` `````` Если мы сохранили пароль для `ansible-vault` в файл (полезно для скриптов), то плейбук будем вызывать так: ``````{container} full-width ```bash ansible-playbook --vault-id my_id@/path/to/password/file playbook/this_playbook_uses_secret.yml ``` `````` ## Использование зашифрованного файла Шифрование существующего файла: ```bash ansible-vault encrypt --vault-id my_id@prompt foo.yml ``` В плейбуке файл используется аналогично незашифрованному. ```{seealso} [https://docs.ansible.com/ansible/latest/user\_guide/vault.html#encrypting-existing-files](https://docs.ansible.com/ansible/latest/user\_guide/vault.html#encrypting-existing-files) ``` ## Ссылка на документацию [https://docs.ansible.com/ansible/latest/user\_guide/vault.html](https://docs.ansible.com/ansible/latest/user\_guide/vault.html)