Когда вы работаете с Ansible, часто возникает необходимость хранить пароли, ключи доступа, токены и другие чувствительные данные. Хранить их в открытом виде в плейбуках или переменных — плохая практика. Здесь на помощь приходит Ansible Vault — встроенный инструмент для шифрования и безопасного хранения секретов.
Что такое Ansible Vault
Ansible Vault позволяет:
- шифровать отдельные файлы или переменные;
- безопасно хранить секреты в репозиториях;
- запускать плейбуки с зашифрованными данными.
Вы можете шифровать любые файлы: YAML, текстовые файлы, конфиги и даже целые плейбуки.
Основные команды
Создание и редактирование файлов
ansible-vault create secret.txt # Создать новый зашифрованный файл
ansible-vault view secret.txt # Просмотреть содержимое файла
ansible-vault edit secret.txt # Отредактировать зашифрованный файл
Шифрование и расшифровка существующих файлов
ansible-vault encrypt file.yml # Зашифровать файл
ansible-vault decrypt file.yml # Расшифровать файл
Смена пароля шифрования
ansible-vault rekey secret.txt # Поменять пароль у файла
Использование с плейбуками
Чтобы запустить плейбук, использующий зашифрованные переменные:
ansible-playbook encryptedplaybook.yml --ask-vault-pass
Или указать файл с паролем:
ansible-playbook encryptedplaybook.yml --vault-password-file my.pass
Шифруем отдельные строки
Иногда нужно зашифровать только одну переменную, а не весь файл. Для этого используется encrypt_string:
# Вводим строку в stdin для шифрования
echo -n "SECRET" | ansible-vault encrypt_string
Можно сразу задать имя переменной, чтобы получить готовый YAML:
echo -n "mypassword" | ansible-vault encrypt_string --stdin-name "DB_PASSWORD"
В результате вы получите зашифрованное значение, которое можно вставлять прямо в ваши плейбуки:
DB_PASSWORD: !vault |
$ANSIBLE_VAULT;1.1;AES256
616263646566...
Важные рекомендации
- Один пароль на несколько секретов. Если в одном файле шифруется несколько переменных, используйте один пароль ко всем. Ansible Vault применяет единый пароль к файлу, и разные пароли в одном файле не поддерживаются.
- Хранение паролей. Можно хранить пароль в файле и использовать его через
--vault-password-file, чтобы автоматизировать запуск плейбуков. - Любые файлы можно шифровать. Это не обязательно YAML — текстовые конфиги,
.envфайлы и прочее тоже можно защищать.
Вывод
Ansible Vault — простой, но мощный инструмент для безопасного управления секретами в инфраструктуре. Он позволяет шифровать файлы и строки, интегрируется с плейбуками и поддерживает автоматизацию через файл с паролем. Использование Vault помогает держать ваши пароли и ключи в безопасности и не раскрывать их в git или на серверах.
Чеклист-командник по Ansible Vault
ansible-vault create <имя_файла>— создать новый зашифрованный файлansible-vault view <имя_файла>— посмотреть содержимое файлаansible-vault edit <имя_файла>— редактировать зашифрованный файлansible-vault encrypt <имя_файла>— зашифровать файлansible-vault decrypt <имя_файла>— расшифровать файлansible-vault rekey <имя_файла>— сменить парольansible-playbook <плейбук>.yml --ask-vault-pass— запуск плейбука с запросом пароляansible-playbook <плейбук>.yml --vault-password-file <файл_с_паролем>— запуск плейбука с файлом пароляecho -n "строка" | ansible-vault encrypt_string— зашифровать строкуecho -n "строка" | ansible-vault encrypt_string --stdin-name "VAR_NAME"— зашифровать строку с именем переменной