- сплошная простановка no_log сделана, инвентарь рендеров заменён на историю - осталась проверка в lefthook/CI и перенос miniflux_postgres_user и miniflux_postgres_database из vault в открытые group_vars - возврат читаемого диффа отдан серии secrets-file-*, приоритет понижен до среднего
43 lines
3.2 KiB
Markdown
43 lines
3.2 KiB
Markdown
# Никаких секретов в выводе плейбуков: защита от дрейфа
|
|
|
|
**Приоритет:** средний
|
|
|
|
`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-*`, по одной на приложение. Матрица возможностей приложений —
|
|
в [справке](../drafts/secrets-file-support.md).
|
|
|
|
Связано: lefthook.yml, tasks.py (`inv pl`), roles/secrets (образец),
|
|
playbook-miniflux.yml, [vault-password-storage](vault-password-storage.md),
|
|
[narrow-secret-scopes](narrow-secret-scopes.md).
|