Ответ
Ansible Vault — это встроенный механизм шифрования для безопасного хранения конфиденциальных данных (паролей, API-ключей, сертификатов) прямо в репозитории с кодом инфраструктуры. Он использует симметричное шифрование AES-256.
Зачем это нужно в DevOps: Без Vault секреты пришлось бы хранить в отдельном, незакоммиченном файле или передавать через ненадежные каналы. Vault позволяет версионировать секреты вместе с плейбуками, обеспечивая их безопасность и воспроизводимость.
Основные команды и использование:
# Создать новый зашифрованный файл переменных
ansible-vault create secrets.yml
# Зашифровать существующий файл
ansible-vault encrypt database_credentials.yml
# Редактировать зашифрованный файл
ansible-vault edit secrets.yml
# Расшифровать файл (с осторожностью!)
ansible-vault decrypt secrets.yml --output=secrets-decrypted.yml
Интеграция в плейбук:
В плейбуке вы просто подключаете зашифрованный файл как vars_files:
---
- name: Deploy application with secrets
hosts: app_servers
vars_files:
- vaulted_secrets.yml # Этот файл зашифрован Vault
tasks:
- name: Ensure service is running
ansible.builtin.systemd:
name: myapp
state: started
environment:
DB_PASSWORD: "{{ vaulted_db_password }}"
Запуск плейбука с секретами:
# Запрос пароля интерактивно
ansible-playbook site.yml --ask-vault-pass
# Использование файла с паролем (права 600!)
ansible-playbook site.yml --vault-password-file ~/.ansible/vault_pass
# Использование переменной окружения
ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass ansible-playbook site.yml
Best Practice: Никогда не храните пароль от Vault в репозитории. Используйте защищенные секреты CI/CD (например, GitLab CI Variables, GitHub Secrets) для автоматической передачи пароля при запуске плейбуков из пайплайна.