Короткий ответ
Ansible Vault шифрует файлы (или отдельные строки) с чувствительными данными симметричным шифрованием по паролю/ключу, позволяя безопасно хранить секреты в репозитории рядом с остальным кодом и расшифровывать их только во время выполнения playbook.
Как это работает подробнее
команда ansible-vault encrypt шифрует YAML-файл целиком (AES256) под паролем, который хранится отдельно (менеджер секретов, файл с ограниченным доступом, переменная окружения); при запуске playbook Ansible расшифровывает файл "на лету", получив пароль через --ask-vault-pass, --vault-password-file или интеграцию с внешним менеджером секретов.
Пример кода
commands.sh
$ ansible-vault encrypt group_vars/prod/vault.yml
$ ansible-playbook site.yml --vault-password-file ~/.vault_pass.txtЧто использовать на практике
- Практика. распространённый паттерн — хранить обычные переменные в
vars.yml, а секреты вvault.yml, зашифрованном Vault, и подключать оба файла; для разных окружений можно использовать разные vault-пароли (vault-id), чтобы доступ к prod-секретам был ограничен.
Подводные камни
- Ошибка. закоммитить расшифрованный файл по ошибке из-за отсутствия pre-commit/CI проверки на незашифрованные секреты; хранить vault-пароль в том же репозитории, что полностью обесценивает шифрование.