Как мне переместить конфиденциальную информацию ниже в «Инструмент менеджера секретов»?
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlServer("Server=Test; column encryption setting=enabled;Database=Test;user id=User1;password='Password1';Trust Server Certificate=true");
Я знаю, что могу щелкнуть правой кнопкой мыши имя решения и выбрать «Управление секретами пользователя», после чего будет создан секретный файл Json, но что я вставляю в этот файл?
И когда я перемещаю это приложение на рабочий сервер, я также копирую и вставляю secret.json
?
Заранее спасибо.
Вам нужно сделать небольшой шаг назад и рассмотреть инструменты, которые ASP.NET Core/.NET предоставляет для работы с конфигурацией.
Из DbContext Lifetime, Configuration and Initialization doc вы можете увидеть, что одним из распространенных шаблонов является использование внедрения зависимостей и настройка строки подключения при запуске приложения. Для этого потребуется добавить конструктор в контекст (и изменить/удалить OnConfiguring
перегрузку — документы):
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
И:
builder.Services.AddDbContext<ApplicationDbContext>(
options => options.UseSqlServer("ConnectionStringHere")); // or AddDbContextFactory
Следующий шаг — прочитать строку подключения из настроек:
builder.Services.AddDbContext<ApplicationDbContext>(
options => options.UseSqlServer(builder.Configuration.GetConnectionString("ConnStringName"))); // or AddDbContextFactory
Для этого потребуется прочитать строку подключения из конфигурации, например, из appsetting.json:
{
"ConnectionStrings": {
"ConnStringName": "ACTUAL_CONNECTION_STRING"
},
}
Также вы можете переместить строку подключения к любому из поддерживаемых поставщиков конфигурации , например - Secret Manager (обратите внимание, это только для среды разработки, для других сред лучше использовать либо переменные среды, либо защищенные хранилища ключей) .
На рабочем сервере вам необходимо создать ключ конфигурации с тем же именем, что и строка производственного подключения.
Установите для переменной ASPNETCORE_ENVIRONMENT значение «Производство».
Когда среда «ASPNETCORE_ENVIRONMENT» находится в «Производстве», источник secrets.json игнорируется. Вы можете проверить это в Источники конфигурации приложений по умолчанию
Согласно документации ASP.NET Core
WebApplication.CreateBuilder инициализирует новый экземпляр класса WebApplicationBuilder с предварительно настроенными значениями по умолчанию. Инициализированный WebApplicationBuilder (построитель) предоставляет конфигурацию по умолчанию для приложения в следующем порядке, от самого высокого до самого низкого приоритета:
При запуске производственных приложений в AWS, GCP или Azure мы храним все секреты в соответствующем диспетчере секретов облачного провайдера (например, AWS Secrets Manager) и используем сценарии при создании среды выполнения для внедрения этих секретов в переменные среды.
Обратите внимание, что под диспетчером секретов я не подразумеваю .NET Secret Manager, который просто хранит секреты в файле на машине разработки.
.NET может считывать конфигурацию из среды, включая строки подключения.
При таком подходе только доверенные сотрудники DevOps имеют возможность просматривать строку подключения. Его никогда нет в файле и уж точно никогда в системе управления версиями.
Лучшее, что вы можете сделать для строки подключения на рабочем сервере, — это настроить проверку подлинности Windows.
Server=MyServerName;Database=MyDbName;Trusted_Connection=SSPI;Encrypt=false;TrustServerCertificate=true
. Как видите - нет password
или user
С этой настройкой, если злоумышленник не знает пароль к учетной записи, под которой работает ваш пул, это достаточно безопасно.
Если вы настаиваете на использовании Sql-аутентификации, вам необходимо сохранить свои учетные данные в диспетчере секретов безопасности (даже если они созданы самостоятельно), а затем получить их и создать строку подключения во время выполнения.
Вы можете использовать переменные среды, которые автоматически добавляются в ваш
Configuration
. Поэтому, когда вы будете развертывать свое приложение на рабочем сервере, просто укажите строку подключения в переменных env.