Architecture Decision Record

Active theme: Light

← Приклади записів рішень

Сховище секретів

Зміст:

Підсумок

Проблема

Нам потрібно зберігати секрети, такі як паролі, приватні ключі, токени автентифікації тощо.

Деякі секрети орієнтовані на користувачів. Наприклад, наш розробник хоче мати змогу за допомогою мобільного телефону знайти пароль до сервісу.

Деякі секрети орієнтовані на системи. Наприклад, нашому конвеєру безперервної доставки потрібно мати змогу знайти облікові дані для нашого хмарного хостингу.

Рішення

Bitwarden — для секретів, орієнтованих на користувачів

Vault від HashiCorp — для секретів, орієнтованих на системи.

Статус

Ухвалено. Ми відкриті до нових альтернатив, коли вони з’являтимуться.

Подробиці

Припущення

Для цієї мети та в нашому поточному стані ми цінуємо зручність для користувачів, як-от придатні до використання мобільні застосунки.

  • Ми хочемо забезпечити швидкий і простий доступ у русі, наприклад для розробника, що виконує чергування з інженерії надійності систем.

  • Ми хочемо мати змогу ділитися деякими секретами між вибраними людьми, наприклад командою.

Ми не намагаємося розв’язувати задачу для одного провайдера, наприклад зберігати всі секрети виключно в Amazon, Azure чи Google.

Ми не хочемо ситуативних підходів, як-от «запам’ятай», «запиши на папірці» чи «вигадай власний спосіб зберігання».

Наша модель безпеки для цієї мети припускає використання поважних постачальників готових комерційних рішень (COTS), таких як SaaS-інструменти керування паролями.

Обмеження

Зараз ми хочемо чогось простого, тобто без потреби писати код, встановлювати сервери, брати на себе серйозні зобов’язання чи стандартизувати всіх.

Позиції

Ми розглянули:

  1. Готові менеджери паролів, орієнтовані на користувачів: LastPass, 1Password, Bitwarden, Dashlane, KeePass, pass, GPG тощо.

  2. Комерційні менеджери паролів (COTS), орієнтовані на системи: AWS KMS, Vault від HashiCorp, EnvKey, Secret Server від Thycotic, Devolutions Password Server, Confidant від Lyft.

  3. Підходи, орієнтовані на спільний доступ: використання спільного документа Google, спільного каналу Slack, спільної мережевої папки тощо.

  4. Низькотехнологічні ситуативні підходи, як-от запам’ятовування, запис на папірці або покладання на кожного користувача придумати власний підхід.

Аргумент

Bitwarden, LastPass, 1Password і Dashlane — усі є готовими комерційними продуктами.

  • Схожі види можливостей для користувачів, команд, організацій тощо.

  • Настільні версії для Windows і Mac та мобільні версії для Android і iOS.

  • Розширення для браузерів Chrome і Firefox для автоматичного заповнення форм тощо.

Bitwarden має дві переваги над іншими:

  • Bitwarden має відкритий код, що означає, що безпеку можуть перевіряти колеги, а також компанію високо цінують розробники, зосереджені на безпеці.

  • Свідчення програмістів описують значну перевагу Bitwarden над іншими.

Типовий хороший приклад огляду: https://jcs.org/2017/11/17/bitwarden

Типовий сайт порівняння з голосуванням: https://stackshare.io/stackups/bitwarden-vs-dashlane

Ми відкладаємо KeePass, pass, GPG тощо, бо вони додають складності. Усі вони виглядають як добрі рішення для технічних користувачів. GPG виглядає особливо добре для технічних користувачів, які хочуть наскрізних міжсистемних можливостей на основі команд.

Ми відкладаємо KMS, бо він прив’язує до одного провайдера.

Ми обираємо Vault для потреб, орієнтованих на системи, бо відгуки вражаюче позитивні, а HashiCorp має відмінний послужний список щодо програмного забезпечення та підтримки найвищої якості.

Ми накладаємо вето на підходи зі спільним доступом, як-от через спільні документи, спільні канали, спільні мережеві папки тощо. Вони не забезпечують якостей безпеки, які ми хочемо.

Ми накладаємо вето на ситуативні низькотехнологічні підходи, бо ми всі згодні, що це не довгостроковий шлях уперед.

Наслідки

Розробникам може знадобитися відстежувати секрети у двох місцях: у Bitwarden для доступу, орієнтованого на користувачів, і у Vault для доступу, орієнтованого на системи.

Пов’язане

Пов’язані рішення

Рішення про те, який сервер CI/CD обрати, має включати підтвердження здатності отримувати доступ до секретів.

Нам потрібно буде вирішити, як керувати секретами — щодо політик, ротацій, організацій тощо.

Пов’язані вимоги

Секрети матимуть пов’язані вимоги щодо відповідності, аудиту та залучення/виведення працівників у кадровому процесі.

Пов’язані артефакти

Ми очікуємо, що можемо експортувати деякі секрети у змінні середовища.

Пов’язані принципи

Легко скасовувати.

Легко паралелити, тобто легко використовувати різні менеджери паролів.

Дешево спробувати, тобто є безкоштовний пробний період і жодних зобов’язань.

Примітки

Тут нотатки оцінювання. Усі нотатки — це публічні коментарі на різних дошках обговорень DevOps.

Vault від HashiCorp

Vault — саме те, що вам тут потрібно.

Проте не кидайте Vault просто у виробниче середовище, спершу розгорніть його в тестовому середовищі, бо документація HashiCorp може бути досить недостатньою, навіть якщо їхні продукти чудові.

Дуже крута крива навчання, і розгорнути його непросто.

Початкове налаштування трохи болісне. Але воно того варте, а спільнота підтримає його достатньо, щоб ви впоралися.

Жахлива документація, але в мережі багато посібників від людей, які його налаштовували, і якщо зібрати кілька з них разом, у вас вийде робоче налаштування.

Початкове налаштування вимагало повозитися з їхніми helm-чартами (vault і consul). Хоча технічно можна використовувати багато інших бекендів, я дуже-дуже не раджу цього. Бекенд/consul може бути зовсім крихітним, якщо у вас немає купи даних для зберігання.

Обов’язково освойтеся/ознайомтеся з використанням CLI, бо GUI більше схожий на доказ концепції/рекламний портал для їхньої корпоративної редакції.

Те, що не можна просто «заповнити його», — це біль. Наприклад, якщо у вас 5 полів, потрібно вручну додавати кожне поле для кожного елемента. Тобто це не так, що ви наперед визначаєте поля для певної категорії та заповнюєте ці поля для всіх елементів цієї категорії, це більше схоже на «ви щоразу генеруєте все», що (на мою думку) — морока.

Вам також може бути корисно подивитися на goldfish як UI поверх vault. Він дуже полегшує залучення вашої команди. У них також є демо. 1. Налаштуйте consul. 2. Налаштуйте vault, що вказує на consul. 3. Налаштуйте goldfish, що вказує на vault. 3. Налаштуйте якусь cron-задачу для запуску consul snapshot для резервних копій.

LastPass

LastPass Teams. Ми користуємося ним, має власні шаблони, ACL, на мою думку, нічого не бракує.

Я впровадив LastPass у своїй організації і ставлю йому C+/B-. Найбільша проблема останнім часом — брак надійності. За останні 90 днів було кілька годин, коли сховища примусово переходили в офлайн-режим. Це не ідеально для моєї організації, бо ми зберігаємо буквально понад 4000 паролів у понад 20 спільних папках. Як ви можете уявити, за такої кількості паролів принаймні кілька оновлюються чи додаються щодня. У нас є план аварійного відновлення на випадок, якщо проблеми тривають понад годину-дві: скрипт щоночі підписує та шифрує дамп сховища у форматі CSV, який можна імпортувати в keepass.

У LastPass траплялися незадекларовані спади якості обслуговування: вхід «працює», але не підтягує сайти, випадкові функції в панелі адміністратора зламані, і ключі неправильно спільно використовуються для нових спільних папок верхнього рівня. У мене є окремий користувач «key push»/резервного копіювання, який є в кожній групі. Зазвичай вхід від імені цього користувача виправляє будь-які проблеми зі спільним використанням ключів, але не тоді, коли служба деградована, незважаючи на те, що пише сторінка стану...

Для інтеграції це може бути просто, якщо у вас правильні ACL за моделлю найменших привілеїв, напр. якщо користувач має і читання й запис, і лише читання для запису чи папки, він отримує лише дозволи на читання. На жаль, ACL моєї організації не найкращі, тож я зрештою використав JSON API провізування та ~500 рядків python через залежний характер наших сотень ACL, які погано відображаються на модель найменших привілеїв. Зрештою я отримував усі ACL, до яких входив користувач, і робив своєрідний обхід залежностей.

Якщо ваші ACL чи структуру груп уже побудовано з урахуванням структури найменших привілеїв, інструмент синхронізації AD/LDAP для Windows працюватиме добре.

Зверніться до їхнього відділу продажів, і вони можуть надати вам довший корпоративний пробний період. Переконайтеся, що ви повністю розумієте його обмеження, перш ніж натискати на гачок. У нас було чимало болів зростання, але, окрім збоїв чи погіршень на стороні сервера, усе минуло напрочуд гладко.

Bitwarden

Bitwarden має гарні інструменти навколо себе (WebUI, CLI, мобільний, настільний). Розміщується самостійно й досить просто налаштовується. Досить хороша документація та інструмент, рекомендований PrivacyTools.

EnvKey

https://www.envkey.com/ — це SaaS. Дуже легко впровадити, інтегрувати та керувати.

Можливості:

  • Захист ключів API та облікових даних.

  • Синхронізація конфігурації скрізь.

  • Розумне наскрізне зашифроване керування конфігурацією та секретами.

  • Запобігання небезпечному спільному використанню та розповзанню конфігурацій.

  • Інтеграція за лічені хвилини.

Здатності:

  • Керуйте конфігурацією та рівнями доступу для всіх ваших застосунків, середовищ і команд в одному місці.

  • Налаштовуйте будь-яке середовище розробки чи серверне середовище лише за допомогою однієї змінної середовища.

Переваги:

  • Хороша домашня сторінка.

  • Чітка ціннісна пропозиція.

  • Візуально відмінний вебзастосунок.

  • Чудові приклади даних, напр. Algolia, AWS, Datadog, GitHub, Stripe тощо.

  • Розмовляв із засновником 30 хвилин про компанію, UI тощо. Dane звучить добре обізнаним, чесним щодо плюсів/мінусів і життєздатним партнером.

  • Компанія по суті типова компанія Y Combinator з 1 засновником. Залучила $120K у січні 2018 року.

  • Фокус на виході до корпоративних можливостей, особливо на переході з хмарного хостингу EnvKey до локального розгортання або BYOC.

  • Потенційний шлях уперед: почати з EnvKey для простоти використання, а потім (або паралельно) додати Vault.

Confidant від Lyft

https://lyft.github.io/confidant/

Confidant — це служба керування секретами з відкритим кодом, що надає зручне для користувачів зберігання секретів і доступ до них безпечним способом, від розробників у Lyft.

Автентифікація KMS: Confidant розв’язує проблему автентифікації «курка чи яйце», використовуючи AWS KMS та IAM, щоб ролі IAM могли генерувати безпечні токени автентифікації, які Confidant може перевірити. Confidant також керує грантами KMS для ваших ролей IAM, що дозволяє ролям IAM генерувати токени, які можна використовувати для автентифікації між сервісами або для передавання зашифрованих повідомлень між сервісами.

Шифрування версійованих секретів у спокої: Confidant зберігає секрети в режимі лише додавання в DynamoDB, генеруючи унікальний ключ даних KMS для кожної ревізії кожного секрету, використовуючи симетричну автентифіковану криптографію Fernet.

Зручний для користувачів вебінтерфейс для керування секретами: Confidant надає вебінтерфейс на AngularJS, який дозволяє кінцевим користувачам легко керувати секретами, відображенням секретів на сервіси та історією змін.

Devolutions Password Server

https://server.devolutions.net/

Безпечний доступ до привілейованих облікових записів і сеансів, керування ним та його моніторинг.

Всеосяжне, високозахищене сховище паролів, що дозволяє контролювати доступ до ваших привілейованих облікових записів, водночас покращуючи загальну видимість мережі для системних адміністраторів і забезпечуючи безшовний досвід для кінцевих користувачів.

Можливості: централізоване сховище паролів організації, приватне сховище окремого користувача, менеджер паролів, ін’єкція облікових даних, інтеграція з Active Directory, рольовий контроль доступу, двофакторна автентифікація, готовність до корпоративного використання, обмеження за IP, можливості керування, автоматичний генератор паролів, доступ із мобільного застосунку, історія паролів, звіти про доступ, сповіщення електронною поштою.

  • підтримує шифрування даних

  • підтримує кілька схем автентифікації, зокрема LDAP, O365 і локальних користувачів, З підтримкою MFA з кількох джерел

  • кілька репозиторіїв/сховищ із детальним контролем доступу для кількох команд

  • сучасний вебінтерфейс

  • приватні сховища облікових даних і з’єднань для особистих облікових даних/з’єднань

  • мобільні застосунки для iOS/Android

  • журнали аудиту для кожного запису: хто/що/коли з необов’язковим запитом, навіщо вони отримують доступ

  • настроювані шаблони (хоча вони нативно підтримують сотні типів з’єднань)

  • купа інших можливостей і товстий клієнт для Windows/Mac (Remote Desktop Manager), з яким можна синхронізуватися і який значно розширює можливості... з’єднання в один клік

  • ціна не така вже погана — до 15 користувачів коштує $500 на рік за сервер паролів

Secret Server від Thycotic

https://thycotic.com/products/secret-server/

Можливості локальної версії:

  • Повний контроль над вашими наскрізними системами безпеки та інфраструктурою

  • Розгортання програмного забезпечення у вашому локальному центрі обробки даних або у власному екземплярі віртуальної приватної хмари

  • Виконання юридичних і регуляторних зобов’язань, які вимагають, щоб усі дані та системи перебували локально

Можливості хмарної версії:

  • Модель «програмне забезпечення як послуга» дозволяє зареєструватися й почати працювати негайно

  • Еластична масштабованість у міру вашого зростання

  • Контроль і резервування від Azure з SLA на 99,9 % безвідмовної роботи

Відгуки користувачів:

  • Ми раніше користувалися цим продуктом. Його було так легко обійти, а правила працюють тільки для розумних людей. Ледачі чи нерозумні користувачі можуть легко все зіпсувати в командній зоні. Ціни можна обговорювати, коли розмовляєте з ними.

  • Його можна запустити за допомогою SQL express і машини з Win 7.

  • Дешево.