Sensitive-данные в манифестах
Что нужно знать перед уроком
- M4.06 — Секреты в шаблонах — нужно понимание werf_secret_file и общей модели секретов Werf/Nelm
Что нужно знать перед уроком
M4 урок 6 — как секреты попадают в шаблоны. Этот урок закрывает отдельный, но смежный вопрос: как скрыть содержимое чувствительных полей из вывода nelm release plan/werf plan, независимо от того, откуда эти данные взялись.
Теория
werf.io/sensitive: "true" — маркировка всего ресурса
| |
По умолчанию Nelm/Werf показывают diff (изменения между текущим состоянием кластера и новым рендером) для всех ресурсов при plan, кроме Secret — для Secret diff скрыт всегда, автоматически, без необходимости в явной аннотации. Аннотация werf.io/sensitive: "true" расширяет это поведение на любой другой тип ресурса (ConfigMap, CustomResource с чувствительными полями и т.д.), полностью скрывая diff для него в выводе plan.
Актуальный статус аннотации: в актуальной документации Nelm werf.io/sensitive помечена как deprecated в пользу werf.io/sensitive-paths — аннотация продолжает работать (полное скрытие diff всего ресурса), но для нового кода официально рекомендуется сразу использовать sensitive-paths, даже если нужно скрыть весь ресурс целиком (достаточно перечислить путь $ или все чувствительные поля явно).
werf.io/sensitive-paths — точечная маркировка отдельных полей
| |
В отличие от sensitive (скрывающей diff всего ресурса), sensitive-paths принимает список JSONPath-выражений, скрывающих diff только для конкретных полей, оставляя остальную часть diff видимой — что полезно, например, для Deployment, где значения env могут содержать чувствительные данные, но остальная конфигурация (образ, реплики, ресурсы) должна оставаться видимой для полноценного code review изменений в CI.
Важное уточнение по приоритету: sensitive-paths переопределяет (override) поведение sensitive — то есть можно, например, установить sensitive: "true" для всего ресурса, но при этом явно не указывать конкретное поле в sensitive-paths, тем самым сделав это единственное поле видимым, даже когда весь остальной ресурс скрыт (или наоборот — оставить ресурс полностью открытым, но замаскировать только пару чувствительных путей).
Зачем это нужно при уже зашифрованных secret-values.yaml
Может показаться, что если значения и так зашифрованы в git через secret-values.yaml (M4 урок 2), скрывать diff не нужно — но это отдельная задача: secret-values.yaml защищает данные в git-репозитории, а sensitive/sensitive-paths защищает их в выводе CI/CD (логи GitLab CI job, куда werf plan/nelm release plan печатает итоговый diff перед применением) — расшифрованное значение пароля, оказавшееся в открытом виде в логе CI, доступном всей команде разработки, это утечка данных независимо от того, насколько хорошо оно было зашифровано в самом репозитории.
Частые ошибки и подводные камни
- Полагать, что шифрование
secret-values.yamlавтоматически скрывает diff в CI. Это два разных, независимых механизма защиты — шифрование в git не защищает от вывода расшифрованного значения в лог CI приplan. - Не знать, что
Secretуже скрыт по умолчанию. Добавлениеwerf.io/sensitive: "true"к ресурсу типаSecretизбыточно — эта защита уже встроена по умолчанию для всех ресурсов этогоkind. - Использовать
sensitiveвместоsensitive-pathsтам, где нужен частичный обзор diff. Полное скрытие всего ресурса лишает code review возможности увидеть изменения в НЕчувствительных полях того же ресурса (например, изменениеreplicasв том жеDeployment, где также меняется чувствительныйenv). - Продолжать писать новые манифесты с
werf.io/sensitive, не зная о его статусе deprecated. Аннотация по-прежнему работает, но актуальная документация Nelm рекомендуетsensitive-pathsкак единственный способ маркировки чувствительных данных для нового кода.
Практика в кластере
| |
Сравните вывод plan до и после добавления аннотации — убедитесь, что значения env скрыты, а остальной diff (например, изменение image) по-прежнему виден.
Практика разработки
Добавьте werf.io/sensitive-paths к Deployment пакета Umami для полей, содержащих переменные окружения с секретами БД (DATABASE_URL), сохранив видимость остального diff для полноценного code review в GitLab CI merge request.
Шпаргалка команд урока
Sensitive-аннотации — 📋 nelm .
Вопросы для самопроверки
Это единственное исключение из общего правила показа diff по умолчанию.
Точечный контроль позволяет сохранить видимость остального diff для code review.
Источник: Werf — документация — Mark Resource Fields as Sensitive
Важное разграничение зон ответственности двух разных механизмов защиты данных.
Источник: Рекомендуемая литература
Явно указано в документации werf — sensitive-paths override поведение sensitive.
Источник: Werf — документация — Reference > Deploy Annotations
Рекомендуемая литература
Официальная документация
Статьи и блоги
- Вышла werf 2.0: новый движок развёртывания Nelm — Flant на Habr.
- Представляем werf 1.0 stable: GitOps и Helm — Flant на Habr.
- GitLab + K8s + Werf — Habr.
Книги
- Matt Butcher, Matt Farina, Josh Dolitsky. Learning Helm. 2019. ISBN 978-1492036781.
Связанные материалы
- Предыдущий урок: M7.05 — Log-аннотации.
- Следующий урок: M7.07 — Шаблонные функции целиком.
✓ Урок пройден — все вопросы самопроверки отвечены верно