Секреты и Vault
Тема дорожной карты · Ansible
Управление секретами в Ansible осуществляется прежде всего через Ansible Vault — встроенную подсистему шифрования, защищающую конфиденциальные значения — пароли, API-ключи и приватные сертификаты — от хранения в открытом тексте в системе контроля версий. Целые файлы шифруются командой ansible-vault encrypt vars/secrets.yml, а отдельные значения могут быть зашифрованы встроенно с помощью ansible-vault encrypt_string и вставлены непосредственно в файл переменных как блок с тегом !vault |. Для команд, уже использующих HashiCorp Vault, collection community.hashi_vault предоставляет lookup hashi_vault — например, lookup('community.hashi_vault.hashi_vault', 'secret/db password=...') — для получения секретов во время выполнения без локального хранения. Независимо от подхода, золотое правило: ни один секрет в открытом виде не должен попадать в зафиксированный файл; зашифрованное vault содержимое безопасно коммитить, поскольку оно защищено шифрованием AES-256.
Как это работает
Секреты и Vault использует Ansible Vault для шифрования at rest: ansible-vault encrypt secrets.yml AES-шифрует файл паролем; ansible-vault edit расшифровывает в памяти для правки; запуск плейбука расшифровывает на лету через --ask-vault-pass или --vault-password-file. Per-variable шифрование (ansible-vault encrypt_string) даёт встроить одно зашифрованное значение в plaintext-файл. Multiple Vault ID (--vault-id prod@prompt) — для per-environment паролей.
Когда применять
Всегда Vault-шифруйте файлы с секретами — пароли, API-ключи, сертификаты. Per-environment Vault ID — чтобы dev и prod credentials шифровались отдельно. Сам Vault-пароль — в secrets-менеджере (Bitwarden, 1Password, Yandex Lockbox) или CI-секрете + --vault-password-file. Для больших флотов — интеграция с HashiCorp Vault (community.hashi_vault).
Типичные ошибки
Ловушки Секреты и Vault: коммит файла с Vault-паролем в git ("для удобства"); один Vault-пароль для prod и dev (утечка в dev компрометирует prod); не ротируются Vault-пароли (могут утечь через build-логи годами); encrypt_string inline повсюду вместо одного Vault-файла (каждый секрет требует отдельной перешифровки при ротации ключа).