Files
pet-project-server/docs/backlog/no-secrets-in-playbook-output.md
T
av 6a46a00f3b backlog: задача no-secrets-in-playbook-output ужата до защиты от дрейфа
- сплошная простановка no_log сделана, инвентарь рендеров заменён на историю
- осталась проверка в lefthook/CI и перенос miniflux_postgres_user и
  miniflux_postgres_database из vault в открытые group_vars
- возврат читаемого диффа отдан серии secrets-file-*, приоритет понижен
  до среднего
2026-09-06 16:11:11 +03:00

3.2 KiB

Никаких секретов в выводе плейбуков: защита от дрейфа

Приоритет: средний

inv pl всегда запускает ansible-playbook --diff, поэтому любая задача template/copy, чей целевой файл содержит переменную vault, печатает значение в терминал. Скроллбек терминала, мультиплексор, лог CI, транскрипт агента — всё это места, куда расшифрованному значению попадать не должно, и куда оно попадает бесплатно.

Сплошная простановка no_log: true сделана (коммит b7b1f49, 2026-07-25): все задачи-рендеры файлов с секретами закрыты, сегодня no_log стоит в четырнадцати плейбуках и в roles/secrets. Осталось то, ради чего задача и заводилась в категории «держится проверкой, а не вниманием»: сейчас правило живёт только во внимании, и следующее приложение заведут по образцу без no_log.

Что осталось

  1. Проверка в lefthook или CI: если шаблон ссылается на переменную, которой нет в открытых group_vars/vars, задача, которая его рендерит, обязана иметь no_log.
  2. Убрать единственное исключение из правила. Compose miniflux сознательно оставлен без no_log — он тянет из vault только miniflux_postgres_user и miniflux_postgres_database, а это имя пользователя и имя базы, не секреты. Чище не заводить исключение в проверке, а перенести обе переменные из vault в group_vars/all/main.yml. Правка в зашифрованном файле, поэтому за пользователем.

Попутно стоит выяснить, почему молчит правило no-log-password в ansible-lint: похоже, оно смотрит на список модулей с параметром password, а не на содержимое шаблонов — тогда на него в этой задаче полагаться нельзя.

Что сюда больше не входит

Возврат читаемого диффа там, где файл смешанный (compose, конфиг authelia) — это вынос секретов в отдельные файлы, и он живёт отдельной серией задач secrets-file-*, по одной на приложение. Матрица возможностей приложений — в справке.

Связано: lefthook.yml, tasks.py (inv pl), roles/secrets (образец), playbook-miniflux.yml, vault-password-storage, narrow-secret-scopes.