Есть ли необходимость использовать инструмент .Net Core Secret Management? - PullRequest
1 голос
/ 07 марта 2019

.Net Core поставляется с инструментом управления секретами для хранения секретов в целях разработки.Если я правильно понял документацию, поэтому шифрование не используется, и все хранится в виде простого текста.

Теперь возникает вопрос: зачем нам использовать этот относительно громоздкий подход, если мы можем просто читать из файлов appsettings.secrets.jsonнапример, с ними гораздо проще работать, просматривать секреты и добавлять их в .gitignore, чтобы они никогда не появлялись в системе контроля версий.

Есть ли какие-либо проблемы с безопасностью, о которых я не задумывался при использовании этого более простого подхода?

PS Я могу думать об опасности только при случайной передаче файла секретов, но это не так просто, если вы не измените весь файл .gitignore

1 Ответ

2 голосов
/ 07 марта 2019

Я думаю, что я должен поместить комментарии в один ответ.

Основная проблема заключается в том, что конфиденциальные данные не должны использовать те же каналы распространения, что и код.Вот почему .gitignore недостаточно.Вы будете использовать тот же канал и зависеть от правильной обработки файла .gitignore, который может изменить любой пользователь.Возможность ошибки всегда будет там.

Приемлемо ли это, зависит от типа секретов.Насколько конфиденциальны эти данные?Если он содержит пароль sa или sys для базы данных разработки, не используйте эту учетную запись.Используйте отдельную учетную запись с ограниченными правами, которая предназначена только для доступа к этой базе данных.Потеря пароля для учетной записи ограниченного разработчика, вероятно, не является большой проблемой.Наверное.

С другой стороны, если он содержит API или ключи учетной записи для вашей облачной среды разработки / размещения, упс.Это может быть промежуточная среда, но кто-то может использовать их для запуска виртуальных машин, создания учетных записей или кражи данных.

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

Это не опция only , простоудобный способ обработки секретов, особенно в распределенной среде или среде разработки OSS.Есть и другие варианты:

  • В корпоративной среде вы можете поместить файл «секретов» в общий файловый ресурс, где только члены команды имеют доступ для чтения и совместно используют местоположение через другого поставщика конфигурации.Например, через переменные среды.Файл может быть защищен через группу безопасности, что означает, что добавить / удалить доступ к нему будет намного проще, чем добавить / удалить доступ к отдельным файлам.Вы можете включить аудит на общей папке, чтобы увидеть, кто также получает доступ к файлу секретов.Это то, что вы не можете сделать с .gitignore

  • Вы можете использовать переменные среды для выбора различных путей для среды (разработка, qa, сервер сборки и т. Д.).

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

  • Вы также можете скопировать некоторые файлы настроек.Вы можете сделать это с помощью etcd в Linux или репликации файлов в Windows.Это один из способов доставки изменений настроек на несколько серверов / контейнеров.

...