← Назад к вопросам

Как хранится Ansible Vault

1.7 Middle🔥 231 комментариев
#Ansible и управление конфигурацией

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Хранение паролей Ansible Vault

Ansible Vault — это механизм шифрования, встроенный в Ansible, предназначенный для защиты конфиденциальных данных, таких как пароли, ключи API, сертификаты и другие секреты, которые не должны храниться в открытом виде в системе контроля версий (например, Git). Он использует симметричное шифрование на основе пароля или ключевого файла.

Основные методы и места хранения пароля (ключа) для Ansible Vault

Ключевой момент: сам зашифрованный файл (например, vars/secrets.yml) можно хранить в Git. А вот пароль или ключ для его расшифровки хранится отдельно и никогда не добавляется в репозиторий.

1. Пароль в виде файла на диске (Vault Password File)

Самый распространённый и рекомендуемый для автоматизации способ. Пароль записывается в обычный текстовый файл, права доступа к которому строго ограничиваются.

  • Местоположение: Обычно это файл с именем .vault_pass, .vault_password, vault.txt или подобным. Его размещают вне репозитория Ansible (например, в домашнем каталоге пользователя или на защищённом сетевом диске) или добавляют в .gitignore, если он находится внутри директории проекта.
  • Использование: При запуске playbook пароль автоматически считывается из этого файла.
    ansible-playbook site.yml --vault-password-file ~/.ansible/vault_pass
    
  • Безопасность: Критически важно установить строгие права доступа chmod 600 (только для владельца), чтобы другие пользователи системы не могли прочитать файл.
    chmod 600 ~/.ansible/vault_pass
    

2. Переменная окружения (Environment Variable)

Пароль может быть передан через переменную окружения ANSIBLE_VAULT_PASSWORD_FILE (для указания пути к файлу) или с помощью кастомных переменных, если используется специальный скрипт.

  • Пример:
    export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass
    ansible-playbook deploy.yml
    
    Более сложный вариант — скрипт, который динамически получает пароль (например, из менеджера секретов). Такой скрипт должен быть исполняемым и возвращать пароль в `stdout`.
```bash
#!/bin/bash
# vault_pass_script.sh — пример скрипта, получающего пароль из другого источника
echo $(get_secret_from_vault)
```
```bash
ansible-playbook site.yml --vault-password-file vault_pass_script.sh
```

3. Интерактивный запрос (Interactive Prompt)

Используется при ручных операциях. Ansible запрашивает пароль у пользователя через консоль.

ansible-playbook site.yml --ask-vault-pass

Не подходит для автоматизации (CI/CD), так как требует взаимодействия с пользователем.

4. Интеграция с менеджерами секретов (Secret Managers)

Передовой подход для серьёзных инфраструктур. Пароль от Vault или сами секреты хранятся в специализированных системах, таких как:

  • Hashicorp Vault
  • AWS Secrets Manager
  • Azure Key Vault
  • Google Cloud Secret Manager
  • CyberArk

В этом случае используется скрипт-обёртка (vault password script), который перед выполнением Ansible обращается к API менеджера секретов, получает ключ и передаёт его в Ansible. Этот скрипт и является тем самым --vault-password-file.

#!/usr/bin/env python3
# Пример скрипта для получения пароля из Hashicorp Vault
import hvac
import sys

client = hvac.Client(url='https://vault.example.com', token=os.environ['VAULT_TOKEN'])
secret = client.secrets.kv.v2.read_secret_version(path='ansible/vault_pass')
sys.stdout.write(secret['data']['data']['password'])

Практическая архитектура хранения

В типичном проекте структура может выглядеть так:

ansible-project/
├── inventories/
├── group_vars/
│   └── all/
│       └── vault.yml          # <-- ЭТОТ ФАЙЛ ЗАШИФРОВАН (можно в Git)
├── .gitignore                 # Содержит строки: .vault_pass, vault.txt
└── playbooks/

А пароль (~/.vault_pass) лежит на CI/CD-сервере (Jenkins, GitLab Runner) или на рабочих станциях администраторов с ограниченными правами доступа.

Рекомендации по безопасности

  1. Никогда не коммитьте пароль или ключ в систему контроля версий.
  2. Используйте отдельные пароли для разных сред (dev, staging, prod) или проектов, чтобы минимизировать ущерб в случае компрометации одного из них.
  3. Регулярно меняйте пароли и перешифровывайте файлы с помощью ansible-vault rekey.
  4. Строгие права доступа: 600 для файлов паролей на Unix-e.
  5. Для CI/CD предпочтительнее использовать менеджер секретов, встроенный в систему (например, Secret Variables в GitLab CI, Credentials в Jenkins), который временно создаст файл с паролем на этапе выполнения пайплайна.
  6. Рассмотрите использование нескольких уровней шифрования: например, сам пароль от Vault хранится в менеджере секретов, доступ к которому контролируется ролевой моделью и аудитом.

Таким образом, Ansible Vault обеспечивает безопасное хранение самих секретов в репозитории, а пароль для доступа к ним управляется внешними, более надёжными средствами, что соответствует лучшим практикам DevSecOps.

Как хранится Ansible Vault | PrepBro