SlideShare a Scribd company logo
Управление секретами в
кластере Kubernetes при
помощи Hashicorp Vault
Сергей Носков
Avito
snoskov@avito.ru
План
1. Управление секретами
2. Hashicorp Vault
3. Vault + Configuration management system
4. Vault + Kubernetes
Секрет
Практически любая конфиденциальная информация
● логин + пароль (например, к БД)
● API-ключ
● ключ сертификата сервера (*.google.com)
● ключ клиентского сертификата (партнёры,
Yandex money, QIWI, ...)
● ключ для подписи мобильных приложений
статистика Infowatch
Конфиденциальностьсекретов в ДЦ
○ внешние угрозы - всё хорошо, всё умеем: firewall, VPN, …
○ внутренние угрозы:
● локально на серверах
● репозиторий с кодом, доступ ограничен
● отдельный репозиторий, доступ ограничен
● много отдельных репозиториев, доступ ограничен
● хранить в репозитории Configuration management system или в
отдельной БД
Проблемы
● внутренние утечки
● шифрование
● аудит
● управление доступом
x10 - x100 при переходе на микросервисы!
Hashicorp Vault
Хранилище секретов для мира микросервисов и не только
● REST, JSON
● стандартные БД в качестве хранилища
● прозрачное шифрование, с безопасным управлением ключами
● принцип минимальных привилегий и политики доступа
● расширяемые API для авторизации и разных видов секретов
● open source (Mozilla Public License 2.0)
Vault
Hashicorp Vault
Hashicorp Vault: wrapping
Способ делегирования прав на чтение секрета
● создать временный токен, не передавать сам секрет
● передать токен
● прочитать секрет по токену
● …
● PROFIT
AppRole auth backend
Role ID = любой (возможно, секретный) ID + настройки(ttl, num_uses)
Secret ID = любой секретный ID
Проблемы
● проблема курицы и яйца
● недостаток инструментов автоматизации
● нет поиска по “файловой системе”
● не очень удобные политики
● нет встроенного GUI, внедрение веб-UI увеличит
риски
Проблема порочного круга
● секрет нельзя отдавать кому попало
● идентификации недостаточно
● аутентификация не подходит:
для получения секрета нужен секрет
Решение: авторизация у доверенного
авторитета
Риски доверенного авторитета
● собственные секреты (для выдачи доступа к секретам)
● передача секрета по сети
● запрос секрета внешним клиентом
● запрос легитимным клиентом не своего секрета
● маскировка под легитимного клиента
Puppet + Hiera
Hiera - встроенное в паппет расширяемое иерархическое key-value
хранилище с доступом к данным на основе фактов.
Например
/hiera/host/www1.example.com/
/hiera/hostgroup/www/
/hiera/ssl-terminator/yes/
Puppet + Hiera + Vault
Доверенный авторитет - puppet master
Секрет-файл
{
“encoding”: “base64”,
“data”: “TE9MIEtFSyBDSEVCVVJFSwo=”,
“filename”: ”some.secret”,
“mode”: ”400”,
“owner”: “root”,
“group”: ”root”,
}
Риски hiera как доверенного авторитета
✓ собственные секреты - локально на сервере*
✓ передача секрета по сети - TLS
✓ запрос секрета внешним клиентом - PKI
✓ запрос легитимным клиентом не своего секрета - Hiera
✓ маскировка под легитимного клиента - PKI
* не в Vault, но принцип минимальных привилегий соблюдается
Kubernetes: секреты
Чуть лучше хранения в репозитории(если включена аутентификация в etcd):
● нет шифрования
● неудобный контроль
● сложные политики
● работают только внутри Kubernetes
● пока что не расширяются
Kubernetes: аннотации
Призваны расширять функционал k8s.
Могут содержать важную для безопасности информацию:
● сетевые политики
● инит-контейнеры
● «Pointers to logging, monitoring, analytics, or audit repositories»
Важно: проверять аннотации перед выкаткой подов
Kubernetes
Доверенный авторитет: Kubernetes API
Существующие решения: Kelsey Hightower’s
Kelsey Hightower’s
+ init container -> volume -> application
+ стратегия: push по запросу
+ авторитет k8s
- политика Vault в аннотации
- нет шифрования по сети
Риски Kelsey Hightower’s
! дополнительный риск: можно указать (почти) любую политику Vault
✕ собственные секреты - через environment
✕ передача секрета по сети - не шифруется
✓ запрос секрета внешним клиентом - k8s API
✓ запрос легитимным клиентом не своего секрета - проверка аннотаций
✓ маскировка под легитимного клиента - проверка аннотаций
Существующие решения: Bootsport’s
Существующие решения: Bootsport’s
+ все «+» от Kelsey Hightower’s
+ approle backend - отделение авторизации от секретов
+ role_id в аннотации
- event watch:
- привилегии на чтение событий
- рассинхронизация
- Raft
- wrapping
- HTTPS = self-signed snakeoil overkill
- доставка только токена
Риски Bootsport’s
✕ собственные секреты - через СonfigMap
✓ маскировка под легитимного клиента - надо знать role_id
✓ запрос легитимным клиентом не своего секрета - надо знать role_id
✓ передача секрета по сети - TLS
✓ запрос секрета внешним клиентом - k8s API
✓ маскировка под легитимного клиента - проверка аннотаций
vault-controller в Avito
vault-controller в Avito
Все плюсы существующих решений, пони, батарейки
+ init container -> volume -> application
+ авторитет k8s + проверка по IP
+ push-стратегия
+ approle backend
+ role_id в аннотации
+ чтение токена с stdin или k8s -секрета
+ шифрование на RSA
+ выкладка файлов вместо токена
Риски Avito vault-controller
✓ собственные секреты - stdin или k8s secrets
✓ маскировка под легитимного клиента - надо знать role_id
✓ запрос легитимным клиентом не своего секрета - надо знать role_id
✓ передача секрета по сети - RSA
✓ запрос секрета внешним клиентом - k8s API
✓ маскировка под легитимного клиента - проверка аннотаций
Нюансы
● vault-controller не должен читать секреты, только выдавать SecretID
● стоит ограничить время жизни(ttl) и количество использований SecretID
● в разных кластерах могут быть одинаковые namespace (dev vs prod)
● в разных namespace могут быть одинаковые поды (monitoring, proxy, ...)
● некоторым подам нужны секреты из разных мест (backup + certificate)
● аннотации можно проверять через Authorization webhook или на CI
Итоги
↓ пора защищаться от внутренних утечек
↓ пора начинать управлять секретами
↓ Hashicorp Vault снижает риски управления секретами
↓ потребуется доверенный авторитет
↓ доверенный авторитет также подвержен угрозам
↓ секреты Kubernetes - не так безопасны, как хотелось бы
↓ аннотации Kubernetes - тонкое место, их надо проверять
Ссылки
● https://infowatch.com/report2016_half
● https://www.vaultproject.io/
● https://github.com/jovandeginste/hiera-router
● https://github.com/jsok/hiera-vault
● https://github.com/kubernetes/kubernetes/issues/10439
● https://github.com/kelseyhightower/vault-controller
● https://github.com/Boostport/kubernetes-vault
Questions?

More Related Content

PDF
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
PDF
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
PPT
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
PPTX
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
PPTX
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
PPTX
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
PDF
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
PDF
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)

What's hot (20)

PDF
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
PPTX
Процесс разработки и тестирования с Docker + gitlab ci
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
PPTX
Docker в работе: взгляд на использование в Badoo через год
PDF
Мой маленький уютный PaaS / Илья Беда (bro.agency)
PDF
Docker networking
PPTX
Евгений Потапов (Сумма Айти)
PDF
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
PDF
Зачем программистам Ansible
PDF
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
PDF
Депрокрастинируем Docker: контейнеры здесь и сейчас
PDF
Проникновение в Docker с примерами
PDF
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
PDF
Архитектура хранения фотографий в Badoo
PDF
Алексей Фомкин, Практическое применение Web Workers
PPTX
Антон Турецкий
PDF
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
PDF
Docker & Puppet: как их скрестить и надо ли вам это?
PDF
Андрей Ситник
PDF
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Пряморукий DNS: делаем правильно / Лев Николаев (Макснет)
Процесс разработки и тестирования с Docker + gitlab ci
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Docker в работе: взгляд на использование в Badoo через год
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Docker networking
Евгений Потапов (Сумма Айти)
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Зачем программистам Ansible
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Депрокрастинируем Docker: контейнеры здесь и сейчас
Проникновение в Docker с примерами
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Архитектура хранения фотографий в Badoo
Алексей Фомкин, Практическое применение Web Workers
Антон Турецкий
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Docker & Puppet: как их скрестить и надо ли вам это?
Андрей Ситник
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Ad

Similar to Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Сергей Носков (Avito) (20)

PPT
Информационная безопасность и web-приложения
PDF
Стажировка 2016-08-04 01 Денис Нелюбин. Шифрование и безопасность
PDF
инфраструктура открытых ключей (Pki)
PDF
#MBLTdev: Знакомство с codesign (e-Legion)
PPTX
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
PDF
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
PPTX
Криптография
PPT
Dv w2k-sec-concepts
PDF
Как превратить приложение в платформу
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
11 лекция, петр волков
PDF
Эффективное управление ПО под *nix
PDF
Kubernetes security best practice
PPT
Решения ООО "Автор" - надежность и конфиденциальность
PPTX
Service mesh для микросервисов
PDF
SafeNet Authentication Manager - Двухфакторная аутентификация
PPTX
разработка безопасного кода
PDF
"Пиринговый веб на JavaScript"
PPTX
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
PDF
Безопасность беспроводных ЛВС: как взломали вашу сеть и как вы могли этого из...
Информационная безопасность и web-приложения
Стажировка 2016-08-04 01 Денис Нелюбин. Шифрование и безопасность
инфраструктура открытых ключей (Pki)
#MBLTdev: Знакомство с codesign (e-Legion)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Криптография
Dv w2k-sec-concepts
Как превратить приложение в платформу
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
11 лекция, петр волков
Эффективное управление ПО под *nix
Kubernetes security best practice
Решения ООО "Автор" - надежность и конфиденциальность
Service mesh для микросервисов
SafeNet Authentication Manager - Двухфакторная аутентификация
разработка безопасного кода
"Пиринговый веб на JavaScript"
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
Безопасность беспроводных ЛВС: как взломали вашу сеть и как вы могли этого из...
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Управление секретами в кластере Kubernetes при помощи Hashicorp Vault / Сергей Носков (Avito)

  • 1. Управление секретами в кластере Kubernetes при помощи Hashicorp Vault Сергей Носков Avito snoskov@avito.ru
  • 2. План 1. Управление секретами 2. Hashicorp Vault 3. Vault + Configuration management system 4. Vault + Kubernetes
  • 3. Секрет Практически любая конфиденциальная информация ● логин + пароль (например, к БД) ● API-ключ ● ключ сертификата сервера (*.google.com) ● ключ клиентского сертификата (партнёры, Yandex money, QIWI, ...) ● ключ для подписи мобильных приложений статистика Infowatch
  • 4. Конфиденциальностьсекретов в ДЦ ○ внешние угрозы - всё хорошо, всё умеем: firewall, VPN, … ○ внутренние угрозы: ● локально на серверах ● репозиторий с кодом, доступ ограничен ● отдельный репозиторий, доступ ограничен ● много отдельных репозиториев, доступ ограничен ● хранить в репозитории Configuration management system или в отдельной БД
  • 5. Проблемы ● внутренние утечки ● шифрование ● аудит ● управление доступом x10 - x100 при переходе на микросервисы!
  • 6. Hashicorp Vault Хранилище секретов для мира микросервисов и не только ● REST, JSON ● стандартные БД в качестве хранилища ● прозрачное шифрование, с безопасным управлением ключами ● принцип минимальных привилегий и политики доступа ● расширяемые API для авторизации и разных видов секретов ● open source (Mozilla Public License 2.0)
  • 9. Hashicorp Vault: wrapping Способ делегирования прав на чтение секрета ● создать временный токен, не передавать сам секрет ● передать токен ● прочитать секрет по токену ● … ● PROFIT
  • 10. AppRole auth backend Role ID = любой (возможно, секретный) ID + настройки(ttl, num_uses) Secret ID = любой секретный ID
  • 11. Проблемы ● проблема курицы и яйца ● недостаток инструментов автоматизации ● нет поиска по “файловой системе” ● не очень удобные политики ● нет встроенного GUI, внедрение веб-UI увеличит риски
  • 12. Проблема порочного круга ● секрет нельзя отдавать кому попало ● идентификации недостаточно ● аутентификация не подходит: для получения секрета нужен секрет Решение: авторизация у доверенного авторитета
  • 13. Риски доверенного авторитета ● собственные секреты (для выдачи доступа к секретам) ● передача секрета по сети ● запрос секрета внешним клиентом ● запрос легитимным клиентом не своего секрета ● маскировка под легитимного клиента
  • 14. Puppet + Hiera Hiera - встроенное в паппет расширяемое иерархическое key-value хранилище с доступом к данным на основе фактов. Например /hiera/host/www1.example.com/ /hiera/hostgroup/www/ /hiera/ssl-terminator/yes/
  • 15. Puppet + Hiera + Vault Доверенный авторитет - puppet master
  • 16. Секрет-файл { “encoding”: “base64”, “data”: “TE9MIEtFSyBDSEVCVVJFSwo=”, “filename”: ”some.secret”, “mode”: ”400”, “owner”: “root”, “group”: ”root”, }
  • 17. Риски hiera как доверенного авторитета ✓ собственные секреты - локально на сервере* ✓ передача секрета по сети - TLS ✓ запрос секрета внешним клиентом - PKI ✓ запрос легитимным клиентом не своего секрета - Hiera ✓ маскировка под легитимного клиента - PKI * не в Vault, но принцип минимальных привилегий соблюдается
  • 18. Kubernetes: секреты Чуть лучше хранения в репозитории(если включена аутентификация в etcd): ● нет шифрования ● неудобный контроль ● сложные политики ● работают только внутри Kubernetes ● пока что не расширяются
  • 19. Kubernetes: аннотации Призваны расширять функционал k8s. Могут содержать важную для безопасности информацию: ● сетевые политики ● инит-контейнеры ● «Pointers to logging, monitoring, analytics, or audit repositories» Важно: проверять аннотации перед выкаткой подов
  • 22. Kelsey Hightower’s + init container -> volume -> application + стратегия: push по запросу + авторитет k8s - политика Vault в аннотации - нет шифрования по сети
  • 23. Риски Kelsey Hightower’s ! дополнительный риск: можно указать (почти) любую политику Vault ✕ собственные секреты - через environment ✕ передача секрета по сети - не шифруется ✓ запрос секрета внешним клиентом - k8s API ✓ запрос легитимным клиентом не своего секрета - проверка аннотаций ✓ маскировка под легитимного клиента - проверка аннотаций
  • 25. Существующие решения: Bootsport’s + все «+» от Kelsey Hightower’s + approle backend - отделение авторизации от секретов + role_id в аннотации - event watch: - привилегии на чтение событий - рассинхронизация - Raft - wrapping - HTTPS = self-signed snakeoil overkill - доставка только токена
  • 26. Риски Bootsport’s ✕ собственные секреты - через СonfigMap ✓ маскировка под легитимного клиента - надо знать role_id ✓ запрос легитимным клиентом не своего секрета - надо знать role_id ✓ передача секрета по сети - TLS ✓ запрос секрета внешним клиентом - k8s API ✓ маскировка под легитимного клиента - проверка аннотаций
  • 28. vault-controller в Avito Все плюсы существующих решений, пони, батарейки + init container -> volume -> application + авторитет k8s + проверка по IP + push-стратегия + approle backend + role_id в аннотации + чтение токена с stdin или k8s -секрета + шифрование на RSA + выкладка файлов вместо токена
  • 29. Риски Avito vault-controller ✓ собственные секреты - stdin или k8s secrets ✓ маскировка под легитимного клиента - надо знать role_id ✓ запрос легитимным клиентом не своего секрета - надо знать role_id ✓ передача секрета по сети - RSA ✓ запрос секрета внешним клиентом - k8s API ✓ маскировка под легитимного клиента - проверка аннотаций
  • 30. Нюансы ● vault-controller не должен читать секреты, только выдавать SecretID ● стоит ограничить время жизни(ttl) и количество использований SecretID ● в разных кластерах могут быть одинаковые namespace (dev vs prod) ● в разных namespace могут быть одинаковые поды (monitoring, proxy, ...) ● некоторым подам нужны секреты из разных мест (backup + certificate) ● аннотации можно проверять через Authorization webhook или на CI
  • 31. Итоги ↓ пора защищаться от внутренних утечек ↓ пора начинать управлять секретами ↓ Hashicorp Vault снижает риски управления секретами ↓ потребуется доверенный авторитет ↓ доверенный авторитет также подвержен угрозам ↓ секреты Kubernetes - не так безопасны, как хотелось бы ↓ аннотации Kubernetes - тонкое место, их надо проверять
  • 32. Ссылки ● https://infowatch.com/report2016_half ● https://www.vaultproject.io/ ● https://github.com/jovandeginste/hiera-router ● https://github.com/jsok/hiera-vault ● https://github.com/kubernetes/kubernetes/issues/10439 ● https://github.com/kelseyhightower/vault-controller ● https://github.com/Boostport/kubernetes-vault