Пометка variable как sensitive скрывает значение в части вывода Terraform, но не превращает его в зашифрованный секрет. Значение может остаться в tfvars, state, CI-логе или истории Git.
Считайте уже опубликованный секрет скомпрометированным: сначала ограничьте доступ и ротируйте его, затем удаляйте из репозитория и переносите выдачу в secret manager.
Что сделать в первую очередь
- Определите все секреты и места, куда они могли попасть.
- Отзовите или ротируйте действующие токены и пароли.
- Ограничьте доступ к state и журналам CI.
- Сохраните минимальный аудит действий без копирования значений.
Почему возникает проблема
Terraform управляет инфраструктурой, но его state должен знать многие итоговые значения и не является хранилищем секретов по умолчанию.
- Файл terraform.tfvars добавлен в Git.
- Секрет передаётся аргументом командной строки.
- CI печатает environment и plan.
- Remote state хранится без шифрования и ограничения ролей.
- Провайдер возвращает секрет в state.
Пошаговая диагностика
- Проверьте Git history и артефакты CI.
- Проверьте state локально и в backend, не публикуя его.
- Составьте список пользователей и сервисов с доступом.
- Найдите output без sensitive.
- Проверьте резервные копии state.
Как исправить
Цель — не только убрать секрет из кода, но и сократить его присутствие в state и журналах.
- Храните секрет в Vault или облачном secret manager.
- Передавайте Terraform ссылку или идентификатор секрета, где это возможно.
- Используйте защищённые переменные CI без вывода в лог.
- Зашифруйте remote state и включите блокировку и версионирование.
- Очистите историю репозитория после ротации, согласовав последствия.
Как проверить результат
- Новый секрет отсутствует в Git и обычных логах.
- Старое значение больше не действует.
- Доступ к state есть только у нужной роли.
- Plan не раскрывает чувствительные значения.
Как не допустить повторения
- Добавьте secret scanning до push.
- Проверяйте Terraform-модули на чувствительные outputs.
- Разделяйте роли CI и человека.
- Регулярно ротируйте краткоживущие credentials.
Чего не стоит делать
- Не ограничивайтесь sensitive=true.
- Не удаляйте строку из последнего commit, оставляя историю.
- Не отправляйте state в тикет или чат.
Что подготовить для диагностики
- Список затронутых репозиториев и state.
- Типы секретов без их значений.
- Схема CI и backend Terraform.
- Перечень систем, где нужна ротация.
Частые вопросы
Sensitive шифрует значение?
Нет. Он в основном скрывает отображение; state всё равно может содержать значение.
Можно ли полностью исключить секреты из state?
Не всегда, это зависит от провайдера. Но можно минимизировать их число и строго защитить backend.
Когда стоит обратиться за помощью
Если секрет уже попал в Git, CI и state, нужен согласованный план ротации, чтобы не остановить рабочую инфраструктуру.
Итог
Безопасность Terraform начинается с ротации и контроля state, а не с маскировки вывода. Я могу помочь перенести секреты, закрыть доступ и настроить проверку утечек в CI.