Задать вопрос
Jeer
@Jeer
уверенный пользователь

Как правильно работать с секретами?

Привет!
У меня есть веб апи проект c# .net. Есть воркфлоу в открытом репозитории гитхаб, где я собираю проект, упаковываю в докер образ и публикую опять-таки в публичный докер хаб.
Так же есть два сервера, просто виртуалки, тестовая и прод.
Не очень понятно, как работать с секретами, например, строки подключений к базам.
Ранее, когда не было воркфлоу ci/cd я настраивал трансформации для appsettings.json, например, при билде с конфигурацией Release, применялись трансформации appsettings.Release.json (для прода аналогично) и я со своего компа из исходного кода публиковал прост сразу в нужной конфигурации на нужный сервер (в студии можно сохранять несколько видов публикаций). Эти файлы типа appsettings.Release.json я добавлял в gitignore и не паблишил их в публичный репозиторий, был спокоен.
Трансформации делал через библиотеку slow cheetah как-то так, посмотрел еще, что есть пользовательские секреты, чуть по другому делается, но смысл тот же
Теперь, с этим ci/cd у меня автоматизированно делается сборка, в секреты гитхаба я засунул логин и пароль от докер хаба, но дальше, во-первых, я больше не могу использовать appsettings.Release.json, так как он не хранится в коде, нужно переходить на env переменные и не очень поняно, мне теперь нужно всё что есть в этом файле засунуть в секреты гитхаба? как-то не очень удобно, учитывая, что нужно держать несколько конфигов и как в этом вообще не запутаться
И во-вторых, готовый образ я размещаю в докер хабе, так же в публичном и в нем все равно не должно быть моих подключений, иначе любой, кто развернет мой образ сможет подключаться к моей базе.
То есть, насколько я понимаю, мне нужно применять какие-то свои файлы именно в момент разворачивания образа и я не очень понимаю, как с этим можно удобно работать (прокидывать все настройки через аргументы как-то выглядит совсем ущербно)
  • Вопрос задан
  • 663 просмотра
Подписаться 6 Средний 6 комментариев
Решения вопроса 1
Прокидывай секреты через переменные среды. Благо по умолчанию IConfiguration умеет работать со слоёными конфигами, где по порядку применяются следующие слои:
1. appsettings.json
2. appsettings.Environment.json
3. переменные среды
4. аргументы командной строки

Соответственно никакие трансформации не нужны - можно спокойно пушить конфиг в репозиторий, заменяя секреты какими-нибудь заглушками (например мы туда кладём строки, которые похожи на тот секрет, который должен быть)

Локально (на машине разработчика) переменные среды можно хранить в .env файлах, либо можно продолжать иметь дополнительные appsettings - это тоже ок.

При разворачивании образа, повторюсь, прокидывай секреты в переменные среды.

Так делают почти все, и все оркестраторы умеют с этим работать и прокидывать в переменные среды контейнера значения из каких-нибудь файлов или даже из хранилища секретов типа vault.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы