Oleg Mykolaichenko
● веду DevOps дайджест на DOU
● пишу на Хабре
● тусуюсь в UkrOps community
● строю инфраструктуры и
автоматизацию
● работал в крупнейшей
гемблинговой компани, плавал
в зубодробильном стартапе
● цитирую Джеза Хамбла и
Мартина Фаулера
Цель доклада
● расшарить опыт по выпиливанию паролей из репозов
● дать всю информацию, нужную для успешного внедрения
Hashicorp Vault
● сделать акцент на практическом применении
● рассмотреть крутые практики для модных ребят
● стимулировать имплементацию в Вашей компании и команде
Откуда пришла проблема
● мы искали коллегу
● прособеседовали 50+ DevOps Engineers
● все согласны что хранить секреты в репе это плохо
● никто ничего не делает
● но все примерно знают что делать
Но почему?
● с низким приоритетом
● занимает много времени
● сложно разворачивать
● сложно поддерживать
● шапочка из фольги
В чем проблема #1
В чем проблема #2
В чем проблема #3
Что думает кто-то из интернета
Что пишет Джез Хамбл
Как проблема выглядит в реальной
жизни
Реальная жизнь #1
1. приходит новый сотрудник в компанию
2. ему дают доступ в репозиторий приложения
3. он сразу видит все пароли/токены/сертификаты на все
сервисы для всех инвайроментов
4. это печально
нет ACL
ACL - Access Control List,
который определяет кто
и куда имеет доступ
Реальная жизнь #2
1. сотрудник уходит из компании
2. он знал все пароли/токены/сертификаты
3. эти секреты никто не меняет, т.к. не понятно в каких местах и
что было на них завязано, и что поломается
4. доступы сотрудника не удаляют, потому что на него тоже
навешано очень много интеграций
5. это печально
нет единого места
управления
Реальная жизнь #3
1. приходит сотрудник, и просит дать ему доступ в прод БД, потому что ему
какую-то таску делать
2. кто-то заходит в Excel табличку, ищет пароль, копирует, отправляет его
в Slack
3. это очень печально
нет workflow
и договоренностей
Уточняем у СТО действительно ли это
проблема для бизнеса
Что сказал СТО
Это проблема
Найдите адекватное решение
И уберите пароли из репозиториев
Сбор требований
Что нам нужно
1. Центральное место управления секретами
2. Гибкие ACL для команды/инвайромента/процесса
3. Интеграция с тулзами, которые мы используем
4. Адекватный UI/CLI интерфейс
5. Придумать workflow и договоренности
6. И чтобы это было безопасно
Что нам нужно
1. Центральное место управления секретами
2. Гибкие ACL для команды/инвайромента/процесса
3. Интеграция с тулзами, которые мы используем
4. Адекватный UI/CLI интерфейс
5. Придумать workflow и договоренности
6. И чтобы это было безопасно
Давайте искать
решение!
Ищем решения
TOP3: что не подходит - git-crypt
https://github.com/AGWA/git-crypt
1. нет центрального места
2. нет ACL
3. нет workflow
4. в принципе можно
заинтегрить с тулзами
5. вроде безопасно
TOP3: что не подходит - git-secret
https://github.com/sobolevn/git-sec
ret
1. почти то же, что и git-crypt
2. но есть ACL
TOP3: что не подходит - pass
https://git.zx2c4.com/password-store
1. Unix-way
2. вроде даже интегрируется с
тулзами
3. плагины накручивают ACL
4. даже можно с этим жить
5. но …
Подождите
Ведь везде есть какие-то штуки, которые умеют шифровать!
Например:
1. в Chef - databags
2. в Docker - secrets
3. в Puppet - hierra-gpg
4. в тулзе X - что-то тоже есть
Но …
Проблем будет еще больше!
А как сделать, чтобы проблем было меньше?
Hashicorp Vault
1. self-hosted хранилище для любых секретов
2. 100500 плагинов и модулей на все тулзы и языки
программирования
3. написан на Golang
4. > 7626 звезд на Github
5. > 1000 форков на Github
6. self-driven архитектура
7. JSON API
8. Completely free and open source
Вспоминаем, что нам нужно
1. Центральное место управления секретами - Да
2. Гибкие ACL для команды/инвайромента - Да
3. Workflow и договоренности - Договоримся
4. Интеграция с тулзами, которые мы используем - Есть
5. Адекватный UI/CLI интерфейс - Есть
6. И чтобы это было безопасно - Безопасно
Приходим с решением к СТО
Еще требования от СТО
1. Не должно быть Single Point of Failure
2. Должен быть HA
Что получилось
Что получилось чуть позже
Это сервисы
ходят в Vault за
секретами
Что такое “бэкенд” в Hashicorp Vault
Vault: generic бекенд
- древовидная структура
- key-value внутри Записываем
секрет
Vault: generic бекенд
- древовидная структура
- key-value внутри
Читаем
секрет
Вариант реализации структуры путей
Визуализация структуры:
Вариант реализации структуры путей
$company/$application/$service/$environment/secret
Например:
- macpaw/setapp/mongo/dbe/db_user
- macpaw/setapp/mongo/uat/db_user
- macpaw/setapp/mongo/prod/db_user
Как работать с ACL
Как использовать в Ansible
1. Подключить плагин:
https://github.com/jhaals/ansible-vault
2. Плагин - это абстракция над Vault JSON API
3. Синтаксис для *.yml и *.j2:
{{ lookup('vault', 'macpaw/setapp/dev/mongo/db_user').username }}
Как использовать в Ansible
1. Подключить плагин:
https://github.com/jhaals/ansible-vault
2. Плагин - это абстракция над Vault JSON API
3. Синтаксис для *.yml и *.j2:
{{ lookup('vault', 'macpaw/setapp/dev/mongo/db_user').username }}
Как использовать в Chef
1. Подключить плагин:
https://github.com/hashicorp/vault-ruby
2. Синтаксис для рецептов:
Как использовать в Chef
1. Подключить плагин:
https://github.com/hashicorp/vault-ruby
2. Синтаксис для рецептов:
Как использовать в Terraform
Как использовать в Terraform
Как использовать в приложении
Как использовать в Consul-template
Как дружить с Kubernetes #1
В двух словах не расскажешь
Но дружить можно:
https://github.com/Boostport/kubernetes-vault
И это тема для отдельной презентации
Как дружить с Kubernetes #2
Если очень интересно, то вот она, отдельная презентация:
https://www.slideshare.net/profyclub_ru/kubernetes-hashicorp-vault-avito
Как использовать в экосистеме Hashicorp
Нативно, это же один технологический стек
Давай уже что-то интересное!
Продвинутые практики
Для серьезных ребят
Динамический доступ в AWS
1. Создаем aws backend
2. Добавляем доступы в AWS
3. Генерим динамические креды
Тоже очень круто
- динамический временный доступ в базейки
- динамический ssh доступ (OTP)
Работает по аналогии как и с AWS в первом примере
Что делать дальше
● имплементить у себя Hashicorp Vault
● шифтить его в команде и компании
● пользоваться всемы бенефитами и удобностями
● после доклада написать в резюме “Hashicorp Vault”
● делать вашу IaC еще лучше!
Я Олег
- ukrops.club
- dou.ua/users/oleg-mikolaychenko/articles
- habrahabr.ru/users/mukolaich/posts
- instagram.com/mykolaichenko

Олег Миколайченко "Как перестать хранить секреты в git и начать использовать Hashicorp Vault"

  • 2.
    Oleg Mykolaichenko ● ведуDevOps дайджест на DOU ● пишу на Хабре ● тусуюсь в UkrOps community ● строю инфраструктуры и автоматизацию ● работал в крупнейшей гемблинговой компани, плавал в зубодробильном стартапе ● цитирую Джеза Хамбла и Мартина Фаулера
  • 3.
    Цель доклада ● расшаритьопыт по выпиливанию паролей из репозов ● дать всю информацию, нужную для успешного внедрения Hashicorp Vault ● сделать акцент на практическом применении ● рассмотреть крутые практики для модных ребят ● стимулировать имплементацию в Вашей компании и команде
  • 4.
    Откуда пришла проблема ●мы искали коллегу ● прособеседовали 50+ DevOps Engineers ● все согласны что хранить секреты в репе это плохо ● никто ничего не делает ● но все примерно знают что делать
  • 5.
    Но почему? ● снизким приоритетом ● занимает много времени ● сложно разворачивать ● сложно поддерживать ● шапочка из фольги
  • 7.
  • 8.
  • 9.
  • 10.
    Что думает кто-тоиз интернета
  • 11.
  • 12.
    Как проблема выглядитв реальной жизни
  • 13.
    Реальная жизнь #1 1.приходит новый сотрудник в компанию 2. ему дают доступ в репозиторий приложения 3. он сразу видит все пароли/токены/сертификаты на все сервисы для всех инвайроментов 4. это печально нет ACL ACL - Access Control List, который определяет кто и куда имеет доступ
  • 14.
    Реальная жизнь #2 1.сотрудник уходит из компании 2. он знал все пароли/токены/сертификаты 3. эти секреты никто не меняет, т.к. не понятно в каких местах и что было на них завязано, и что поломается 4. доступы сотрудника не удаляют, потому что на него тоже навешано очень много интеграций 5. это печально нет единого места управления
  • 15.
    Реальная жизнь #3 1.приходит сотрудник, и просит дать ему доступ в прод БД, потому что ему какую-то таску делать 2. кто-то заходит в Excel табличку, ищет пароль, копирует, отправляет его в Slack 3. это очень печально нет workflow и договоренностей
  • 16.
    Уточняем у СТОдействительно ли это проблема для бизнеса
  • 17.
    Что сказал СТО Этопроблема Найдите адекватное решение И уберите пароли из репозиториев
  • 18.
  • 19.
    Что нам нужно 1.Центральное место управления секретами 2. Гибкие ACL для команды/инвайромента/процесса 3. Интеграция с тулзами, которые мы используем 4. Адекватный UI/CLI интерфейс 5. Придумать workflow и договоренности 6. И чтобы это было безопасно
  • 20.
    Что нам нужно 1.Центральное место управления секретами 2. Гибкие ACL для команды/инвайромента/процесса 3. Интеграция с тулзами, которые мы используем 4. Адекватный UI/CLI интерфейс 5. Придумать workflow и договоренности 6. И чтобы это было безопасно Давайте искать решение!
  • 21.
  • 22.
    TOP3: что неподходит - git-crypt https://github.com/AGWA/git-crypt 1. нет центрального места 2. нет ACL 3. нет workflow 4. в принципе можно заинтегрить с тулзами 5. вроде безопасно
  • 23.
    TOP3: что неподходит - git-secret https://github.com/sobolevn/git-sec ret 1. почти то же, что и git-crypt 2. но есть ACL
  • 24.
    TOP3: что неподходит - pass https://git.zx2c4.com/password-store 1. Unix-way 2. вроде даже интегрируется с тулзами 3. плагины накручивают ACL 4. даже можно с этим жить 5. но …
  • 25.
    Подождите Ведь везде естькакие-то штуки, которые умеют шифровать! Например: 1. в Chef - databags 2. в Docker - secrets 3. в Puppet - hierra-gpg 4. в тулзе X - что-то тоже есть
  • 26.
    Но … Проблем будетеще больше! А как сделать, чтобы проблем было меньше?
  • 28.
    Hashicorp Vault 1. self-hostedхранилище для любых секретов 2. 100500 плагинов и модулей на все тулзы и языки программирования 3. написан на Golang 4. > 7626 звезд на Github 5. > 1000 форков на Github 6. self-driven архитектура 7. JSON API 8. Completely free and open source
  • 29.
    Вспоминаем, что намнужно 1. Центральное место управления секретами - Да 2. Гибкие ACL для команды/инвайромента - Да 3. Workflow и договоренности - Договоримся 4. Интеграция с тулзами, которые мы используем - Есть 5. Адекватный UI/CLI интерфейс - Есть 6. И чтобы это было безопасно - Безопасно
  • 30.
  • 31.
    Еще требования отСТО 1. Не должно быть Single Point of Failure 2. Должен быть HA
  • 32.
  • 33.
    Что получилось чутьпозже Это сервисы ходят в Vault за секретами
  • 34.
  • 35.
    Vault: generic бекенд -древовидная структура - key-value внутри Записываем секрет
  • 36.
    Vault: generic бекенд -древовидная структура - key-value внутри Читаем секрет
  • 37.
    Вариант реализации структурыпутей Визуализация структуры:
  • 38.
    Вариант реализации структурыпутей $company/$application/$service/$environment/secret Например: - macpaw/setapp/mongo/dbe/db_user - macpaw/setapp/mongo/uat/db_user - macpaw/setapp/mongo/prod/db_user
  • 39.
  • 40.
    Как использовать вAnsible 1. Подключить плагин: https://github.com/jhaals/ansible-vault 2. Плагин - это абстракция над Vault JSON API 3. Синтаксис для *.yml и *.j2: {{ lookup('vault', 'macpaw/setapp/dev/mongo/db_user').username }}
  • 41.
    Как использовать вAnsible 1. Подключить плагин: https://github.com/jhaals/ansible-vault 2. Плагин - это абстракция над Vault JSON API 3. Синтаксис для *.yml и *.j2: {{ lookup('vault', 'macpaw/setapp/dev/mongo/db_user').username }}
  • 42.
    Как использовать вChef 1. Подключить плагин: https://github.com/hashicorp/vault-ruby 2. Синтаксис для рецептов:
  • 43.
    Как использовать вChef 1. Подключить плагин: https://github.com/hashicorp/vault-ruby 2. Синтаксис для рецептов:
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
    Как дружить сKubernetes #1 В двух словах не расскажешь Но дружить можно: https://github.com/Boostport/kubernetes-vault И это тема для отдельной презентации
  • 49.
    Как дружить сKubernetes #2 Если очень интересно, то вот она, отдельная презентация: https://www.slideshare.net/profyclub_ru/kubernetes-hashicorp-vault-avito
  • 50.
    Как использовать вэкосистеме Hashicorp Нативно, это же один технологический стек
  • 51.
    Давай уже что-тоинтересное!
  • 52.
  • 53.
    Динамический доступ вAWS 1. Создаем aws backend 2. Добавляем доступы в AWS 3. Генерим динамические креды
  • 54.
    Тоже очень круто -динамический временный доступ в базейки - динамический ssh доступ (OTP) Работает по аналогии как и с AWS в первом примере
  • 55.
    Что делать дальше ●имплементить у себя Hashicorp Vault ● шифтить его в команде и компании ● пользоваться всемы бенефитами и удобностями ● после доклада написать в резюме “Hashicorp Vault” ● делать вашу IaC еще лучше!
  • 56.
    Я Олег - ukrops.club -dou.ua/users/oleg-mikolaychenko/articles - habrahabr.ru/users/mukolaich/posts - instagram.com/mykolaichenko