Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Хранение секретов в Vault

Хранение секретов в Vault

Evgenii Terechkov

October 30, 2018
Tweet

More Decks by Evgenii Terechkov

Other Decks in Technology

Transcript

  1. slurm.io 3 План • Секреты • Эволюция управления секретами •

    Vault на практике, история • Плюсы и минусы применения Vault
  2. slurm.io 4 Секреты Всё, что вы не хотели бы "светить":

    • логин + пароль (к БД, сервису, …) • API-токен • ключ сертификата TLS (*.yandex.ru) • ключ клиентского сертификата (партнёры, финансовые сервисы, …) • GPG-ключи подписи приложений/коммитов
  3. slurm.io 5 Надо управлять • Традиционно, защищаемся от "внешних" угроз

    • Основные утечки идут изнутри: – на серверах – в репозиториях – в SCM Астрологи объявили эпоху микросервисов, количество секретов умножается в 10-100 раз!
  4. slurm.io 7 Статический провиженинг Дедики/коло в ДЦ или даже свой

    ДЦ/серверная. Голый метал, возможно вручную созданные VM. Закупаем сервера А-брендов для надёжности, эксплуатируем до EOL. Есть бюджет закупок, если не потратить, теряешь. Если что-то ломается, бежим чинить ASAP! Секреты любовно разложены руками тут и там, так и управляются. Замечаешь, что новые фичи делать долго. А простои непозволительно длинные. Задумываешься о контейнерах...
  5. slurm.io 8 Запекаем секреты Контейнеризуем нагрузки и … … правильно,

    зашиваем секреты прямо в образы! Проблемы: • github/dockerhub/… не приспособлены хранить секреты • Сложно обновить секреты. Надо ВСЁ передеплоить. • Протухающие секреты молча протухают • Надо запастись кувалдой/прессом для умерших SSD
  6. slurm.io 9 Переменные окружения Тогда поместим секреты в переменные окружения.

    Но это не решает текущих проблем. Новые проблемы: • Переменные доступны всем процессам • Переменные общие со слинкованными контейнерами • Переменные наследуются дочерними процессами, в т.ч. неподконтрольными • Среда попадает в дампы/трейсы/логи • Секреты по прежнему хранятся на дисках открытым текстом
  7. slurm.io 10 Монтирование секретов Монтируем секреты в контейнер, пусть приложение

    читает. Проблемы: • Одна машина с секретами это точка отказа (NFS/CIFS/...) • Секреты всё ещё хранятся открытым текстом, но уже на многих машинах (cephfs/etcd/...) K8S сейчас здесь
  8. slurm.io 11 Хранилища секретов Будем хранить секреты в хранилище, доступном

    по сети, с HA, репликацией и шифрованием. Плюсы: • Просто обновить секреты • Секреты имеют TTL • Есть аудит доступа • Открытый текст только в памяти (TLS/mTLS) • Можно генерировать секреты по запросу, на один раз, с нужными правами Проблемы: Надо уметь API хранилища Сложно (kubespray здесь не смог) Например, чтобы получить секреты, нужен секрет (курица-яйцо) Аналогично, чтобы создать сертификаты для k8s с хранилищем в нём же, они уже должны у него быть Vault здесь
  9. slurm.io 12 Что дальше? • Интеграция хранилища секретов с оркестратором

    (Kubernetes KMS, beta в k8s 1.12)? • Может быть, обратно в статический провиженинг? :-)
  10. slurm.io 14 Hashicorp Vault Хранилище секретов для микросервисов и не

    только • Open Source (MPL2), Golang • Различные БД для хранения • REST/JSON • Прозрачное шифрование, безопасное управление ключами • Принцип минимальных привилегий • Всё через API (даже CLI) • В идеале, эксплуатируется командой, где каждый не имеет полной власти
  11. slurm.io 16 Первый подход: колхоз-конструктор • 3 сервера в двух

    ДЦ • docker-compose/consul/registrator • 3 vault-а с HA, бакэнд хранения - consul, без TLS наружу • Ручная сборка образов и самопальная оркестрация, самодельный балансер, регистри тут же в контейнере • Особенность: нет нужды писать секреты в конфиги • Приложения лезут за секретами на КАЖДЫЙ запрос • CI, в образ которого запечён рутовый токен, генерирует новый токен сроком 30 дней на каждый собираемый билд и запекает его в образ приложения (передавая переменной окружения) Проблемы: АД. Отладка глючащего консула. Нет связи между ДЦ - таймауты от vault и лежат 100% приложений (split brain, да). Приходилось ждать, пока клиент через ssh не распечатает vault. Бэкапов vault нет. Докеровский регистри перестаёт принимать новые образы, 30 дней кончаются. Торопимся уйти на k8s...
  12. slurm.io 17 Второй подход: k8s • Переносим приложения в k8s

    (кластер на IaaS) • Один контейнер vault с данными на PV (RBD) • Выдаём токены по serviceaccount-ам k8s, привязывая политики (курица-яйцо) • Мониторим через HTTP API (ingress+LetsEncrypt) Проблемы: • Смерть ноды с vault-ом - все ждут клиента/админа для распечатывания (кэширования нет) • Иногда долго резолвится DNS-имя vault, идут ошибки приложений • Бэкапов vault-а нет - читать RBD PV может только сам под, сайдкара для этого не видно • Теперь CI нужен токен serviceaccount-а чтобы деплоить helm- чарты, приходится руками копировать в секреты каждого проекта
  13. slurm.io 20 Третий подход: k8s + HA bank-vaults • etcd-operator:

    3 etcd и оператор для них, данные наливаются в emptyDir. • Ставим рядом ещё один vault: 3 реплики с etcd-бакэндом • Конфигурирование ролей/политик из YAML-манифеста (бэкапит VCS) • Автоматическое распечатывание (ключи/токен в секрете k8s) • Берём токен из секрета k8s и бэкапим секреты на cephfs в виде JSON • Дописали кэширование секретов согласно TTL Проблемы: • Пришлось допилить для поддержки HTTP, как рулить сертификатами для TLS не очень понятно • helm-чарт гладко не обновляется. Предлагают оператор. • Надо как-то мигрировать с предыдущего подхода • ??? (мы здесь)
  14. slurm.io 22 Наш опыт на сегодня • Pro – Централизованное

    управление секретами – Просто работает – WebUI • Contra: – Сложность – Безопасность неудобна, удобство небезопасно (распечатывание) – Надо учить приложения vault API (vault-agent спешит на помощь) – Просто работает, если не обновлять – WebUI – Не интегрированы секреты CI
  15. slurm.io 23 Ссылки • https://infowatch.com/report2017 • Vault: https://www.vaultproject.io/ • bank-vaults:

    https://banzaicloud.com/bank-vaults/ • Keywhiz: http://square.github.io/keywhiz/ • Sneaker: https://github.com/codahale/sneaker • https://kubernetes.io/docs/tasks/administer-cluster/kms-provid er/