Какие аспекты безопасности учитывать при доработке Ansible плейбука
Что проверяют
Понимаете ли вы, где в плейбуке утекают секреты и откуда берутся лишние права: в репозитории, в логах, на целевых хостах. Следом обычно спрашивают, как вы передаёте пароль от Vault в CI и как не показать секрет при запуске с --diff или -vvv.
Как отвечать
Пройдите по точкам риска:
- секреты: Ansible Vault (
ansible-vault encryptдля файлов,encrypt_stringдля отдельных значений, vault ID для разных сред) или внешнее хранилище через lookup, например коллекцияcommunity.hashi_vault. Пароль от Vault приходит из секретов CI через--vault-password-file, а не лежит в репозитории; no_log: true: на задачах с паролями и токенами, иначе значения попадут в вывод и в логи CI или AWX;- повышение прав:
becomeтолько там, где он нужен, а не на весь плейбук, и по возможности без безусловного sudo для пользователя Ansible; - SSH: вход по ключу, проверка ключей хостов включена.
host_key_checking = Falseвansible.cfgоткрывает дорогу подмене хоста; - модули вместо
shellиcommand: они идемпотентны и не склеивают строку команды. Если без шелла никак, переменные экранируют фильтромquote; - файлы: явные
ownerиmode: "0600"для конфигов с секретами,validate: visudo -cf %sдля sudoers, чтобы кривой файл не отрезал доступ; - TLS: никаких
validate_certs: falseвuriиget_url; - зависимости: версии ролей и коллекций закреплены в
requirements.yml, сторонние роли прочитаны до использования; - проверки:
ansible-lintв CI (правилаrisky-file-permissions,no-log-password), прогон с--check --diffна стенде.
Разграничение доступа по ролям делают в AWX или Ansible Automation Platform: кто какие шаблоны запускает и к каким учётным данным допущен.
Где спотыкаются
Шифруют файлы через Vault, а пароль коммитят рядом или держат открытым текстом в переменной пайплайна.
Запускают --diff на задачах template с секретами. Diff покажет содержимое файла, и оно уйдёт в лог сборки; такие задачи помечают diff: false или no_log.
Говорят про «RBAC в Ansible» как про функцию самого ядра. В ansible-core ролевой модели нет, она живёт в AWX и платформе автоматизации.