Architecture Decision Record

Active theme: Light

← Примеры записей решений

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

Содержание:

Резюме

Проблема

Нам нужно хранить секреты, такие как пароли, закрытые ключи, токены аутентификации и т. д.

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

Некоторые секреты ориентированы на систему. Например, нашему конвейеру непрерывной поставки нужно иметь возможность находить учётные данные нашего облачного хостинга.

Решение

Bitwarden для секретов, ориентированных на пользователя

Vault by HashiCorp для секретов, ориентированных на систему.

Состояние

Решено. Мы открыты для новых альтернатив по мере их появления.

Подробности

Допущения

Для этой цели и в нашем текущем состоянии мы ценим удобство для пользователя, например пригодные для использования мобильные приложения.

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

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

Мы не пытаемся решить задачу для единственного провайдера, например хранить все секреты исключительно в Amazon, Azure или Google.

Мы не хотим импровизированных подходов вроде «запомните это», «запишите на бумажке» или «придумайте свой способ хранения».

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

Ограничения

Сейчас мы хотим чего-то простого, то есть без необходимости писать код, устанавливать серверы, брать на себя серьёзные обязательства или стандартизировать всех.

Позиции

Мы рассмотрели:

  1. Готовые менеджеры паролей, ориентированные на пользователя: LastPass, 1Password, Bitwarden, Dashlane, KeePass, pass, GPG и др.

  2. Готовые менеджеры паролей COTS, ориентированные на систему: AWS KMS, Vault by HashiCorp, EnvKey, Secret Server by Thycotic, Devolutions Password Server, Confidant by 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

Мы откладываем KeyPass, pass, GPG и др., потому что у них дополнительная сложность. Все они выглядят хорошими решениями для технических пользователей. GPG выглядит особенно хорошо для технических пользователей, которым нужны кросс-системные возможности командной строки.

Мы откладываем KMS, потому что он привязывает к единственному провайдеру.

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

Мы налагаем вето на подходы с совместным использованием, такие как общие документы, общие каналы, общие сетевые папки и т. д. Они не обеспечивают нужных нам качеств безопасности.

Мы налагаем вето на низкотехнологичные импровизированные подходы, потому что мы все согласны, что это не долгосрочный путь вперёд.

Следствия

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

Связанное

Связанные решения

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

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

Связанные требования

У секретов будут связанные требования по соответствию, аудиту и приёму/увольнению сотрудников в HR.

Связанные артефакты

Мы ожидаем, что часть секретов мы можем экспортировать в переменные окружения.

Связанные принципы

Легко обратимо.

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

Дёшево попробовать, то есть есть бесплатная пробная версия и никаких обязательств.

Примечания

Заметки по оценке здесь. Все заметки — публичные комментарии на различных досках обсуждений devops.

Vault by 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 есть хорошие инструменты (веб-интерфейс, CLI, мобильное, настольное). Самостоятельно размещаемый, и довольно легко настроить. Довольно хорошая документация, и это инструмент, рекомендованный PrivacyTools.

EnvKey

https://www.envkey.com/ — saas. Очень легко внедрять, интегрировать и управлять.

Функции:

  • Защита ключей API и учётных данных.

  • Синхронизация конфигурации везде.

  • Умное сквозное шифрование управления конфигурацией и секретами.

  • Предотвращение небезопасного обмена и разрастания конфигураций.

  • Интеграция за считаные минуты.

Возможности:

  • Управление конфигурацией и уровнями доступа для всех ваших приложений, сред и команд в одном месте.

  • Настройка любой среды разработки или сервера всего одной переменной окружения.

Плюсы:

  • Хорошая домашняя страница.

  • Чёткое ценностное предложение.

  • Визуально превосходное веб-приложение.

  • Превосходные примеры данных, например Algolia, AWS, Datadog, GitHub, Stripe и т. д.

  • Говорил с основателем 30 минут о компании, UI и т. д. Dane кажется хорошо осведомлённым, честным в отношении плюсов и минусов и жизнеспособным партнёром.

  • Компания, по сути, типичная компания Y Combinator с одним основателем. Привлекла $120 тыс. в 2018-01.

  • Упор на достижение корпоративных функций, особенно переход от облачного размещения EnvKey к локальному или BYOC.

  • Возможный путь вперёд: начать с EnvKey ради простоты использования, затем позже (или параллельно) добавить Vault.

Confidant by 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 из нескольких источников

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

  • современный веб-UI

  • личные хранилища учётных данных и подключений для личных учётных данных/подключений

  • мобильные приложения для iOS/Android

  • журналы аудита для каждой записи, кто/что/когда с необязательным запросом причины доступа

  • настраиваемые шаблоны (хотя нативно поддерживаются сотни типов подключений)

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

  • цена не так уж плоха — до 15 пользователей $500 в год за сервер паролей

Secret Server by Thycotic

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

Функции локальной версии:

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

  • Развёртывайте ПО в вашем локальном центре обработки данных или в собственном экземпляре виртуального частного облака

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

Функции облачной версии:

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

  • Эластичная масштабируемость по мере вашего роста

  • Контроль и избыточность, обеспечиваемые Azure с соглашением об уровне обслуживания (SLA) на 99,9% времени работы

Отзывы пользователей:

  • Мы раньше использовали этот продукт. Его так легко обойти, и правила работают только для умных людей. Ленивые или глупые пользователи легко могут всё испортить в командной области. Цены обсуждаемы, когда разговариваешь с ними.

  • Его можно запустить с помощью SQL express и машины с Win 7.

  • Дёшево.