-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Хранилище секретов для бедных #93
Comments
@egorikas , @Sergey-Buyanov , @ilabutin, @rafaelldi |
Из какого места приложение в продакшене будет брать приватные ключи? Их по идее тоже надо бы в KeyVault хранить. И их будет несколько как ты сам заметил. Или ты про клиентское UI приложение? |
Разговор пока только про сервер.
Приватный ключ есть только у хостинга Azure. В переменных окружения. Она должна его любезно сообщить запускаемому приложению.
Чтобы не усложнять систему на этом этапе, лучше ограничиться одним ключом. |
А может нам просто ажуровское хранилище секретов заюзать? |
Вот я тоже предлагаю в KeyVault. Мы сейчас им пользуемся в рабочем проекте - никаких проблем нет. Могу заняться. Для начала могу развернуть у себя в Azure сервер и настроить keyvault + сделать powershell для его настройки. Дальше "просто" применим этот powershell к production аккаунту. |
У нас денег нет. И стабильной Ажуры тоже нет. Когда придёт день "Ж", Докер с контейнером можно будет быстро развернуть на любом бесплатном хостинге. С KeyVault будут проблемы. Мы не можем себе позволить подобный vendor-lock. Так же, как и нормальную БД (привет #91). А в чём проблема с шифрованием файла? |
Проблем с шифрованием файлов нет, но это чуть сложнее. Тогда да, сделаем на сертификатах. Дополнительные вопросы:
|
Мне кажется делать отдельный тул, для настроек - как-то оверинжиниринг на данный момент |
Да, тоже думаю что это должен быть отдельный тул, дабы не переусложнять. Я бы сделал просто скрипт на PowerShell, чтобы не вставало вопросов с компиляцией, распространением и прочим. Например:
|
Тогда у меня получается такой список задач здесь:
Мы хостим "один сервер-одно сообщество"? Т.е. один инстанс сервера только с одним сообществом работает или сразу со многими должен уметь (нужно ли одновременно от всех сообществ из ConfigurationProvider настройки отдавать?)? |
Я бы не называл это "Сертификатом", ибо сие намекает на X.509. Который сложный, бажный и сильно (для нас) избыточный. Мне кажется корректнее говорить об асимметричном шифровании или криптосистеме с открытым ключом.
Скорее всего это можно сделать одним скриптом с параметрами, чтобы не плодить файлов. Ещё было бы очень полезно иметь команду, которая создаст типичный пример В остальном выглядит правдоподобно 👍
Нет, наш Server должен быть полностью Multitenancy. Т.е. должен уметь обслуживать все Сообщества одним инстансом. При этом настройки для доступа к социальным сетям могут быть не у всех сообществ (кто-то руками анонсы предпочитает делать). Также в настройках могут быть не все соц. сети (Твиттером пользуются не все сообщества). Т.е. возможность (доступность) какой-то интеграции должна определяться наличием "привязки" сообщества к соответствующей соц. сети (в нашем случае - в наличии соответствующих секретов). |
Да, можно попробовать project, но у меня нет прав создавать проекты и вешать к ним issues. Либо дай права, либо тебе придётся всё это делать. |
Все права у @egorikas . Я тут такой же комментатор, как и все :) |
@AnatolyKulakov ой, я только увидел |
@ilabutin выдал права |
В новой концепции, "serverless", получается единственным безопасным местом является машина пользователя. Вот такой рецепт усреднённый. |
Проблема
Для нужд различных сервисов интеграции необходимо предоставить наборы контекстных настроек. В этих настройках могут храниться как секретные данные (API-ключи для доступа к социальным сетям) так и просто конфигурационные значения (адрес репозитория с Аудитом). Для простоты можно считать что все данные секретные.
Если необходимо просто настроить приложение без всякой секретности, то скорее всего следует предпочесть просто файл настроек приложения.
К хранилищу настроек предъявляются следующие требования:
Стандартное решение
По хорошему, мы конечно должны воспользоваться для этих целей Azure Key Vault'ом или подобным сервисом. Но нам не хочется заводить новый сервис и тратить ресурсы на его поддержку. Кажется что можно обойтись более простыми и понятными инструментами.
Бесплатное решение
Нам может помочь шифрование. Файл с настройками шифреутся публичным ключом и выкладывается в общедоступное место (например в репозиторий GitHub или Gist). Приватный ключ есть только у хостинга Azure. Она должна его любезно сообщить запускаемому приложению. Приложение на старте скачивает файл настроек с известного места, расшифровывает его, используя приватный ключ, и загружает настройки. Подобный метод используется в билд системах (например AppVeyor, TravisCI).
Настройки для каждого из сообществ будут контролироваться разными людьми (лидерами конкретного сообщества). Настройки самого приложения могут редактироваться администратором системы. По-хорошему для разных людей нужны разные ключи шифрования. Но чтобы не усложнять систему на этом этапе, можно ограничиться одним ключом. Для удобства редактирования и возможности разграничения прав доступа в будущем, стоит всё-таки разделить настройки по отдельным файлам. Как минимум отдельный файл для каждого сообщества.
Весь этот процесс должен быть скрыт от основной логики приложения за инфраструктурным слоем. И для сервисов данные могут поставляться в привычном виде стандартных Confiuration'ов. Этого можно добиться например с помощью самописного Configuration Provider'а.
The text was updated successfully, but these errors were encountered: