Служба приложений Azure с базой данных SQL Azure (управляемое удостоверение)

Я пытаюсь настроить подключение из службы приложений Azure к базе данных Azure SQL с помощью управляемого удостоверения (назначено системой)

Вот настройка: Две службы приложений Azure, одна для приложения и одна для API в одном плане обслуживания. У меня есть SQL-сервер в Azure с двумя azure sql db. В службах приложений включено назначенное системой управляемое удостоверение. У меня есть настройки приложения для нескольких сред как в проекте (приложение, так и API).

appsettings.json, appsettings.development.json, appsettings.acceptance.json, appsettings.production.json

Когда я изучил Kudu после развертывания своего приложения в службе приложений из конвейера yaml, я увидел, что все файлы настроек приложения доступны.

Конфигурация -> параметр приложения в службе приложений Azure не имеет никаких переменных, кроме ключа инструментария анализа приложений, который я добавляю (IaC) в шаблон при подготовке службы приложений в Azure.

Управляемому удостоверению для обеих служб приложений были назначены роли базы данных в обеих базах данных db1 и db2.

CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];

В моем файле настройки приложения json у меня есть две строки подключения для обеих БД.

"connectionStrings": {
  "DB1Context": "Server=myserver.database.windows.net;Authentication=Active Directory Managed Identity;Encrypt=True;Database=db1;",
"DB2Context": "Server=myserver.database.windows.net;Authentication=Active Directory Managed Identity;Encrypt=True;Database=db2;",

Program.cs (чтение строки подключения)

builder.Services.AddHangfire(options =>
{
  options.UseSqlServerStorage(builder.Configuration.GetConnectionString("DB1Context"),
   new SqlServerStorageOptions
   {
   });
});

builder.Services.AddDbContext<DbContext>(options=>
{
 options.UseSqlServer(builder.Configuration.GetCOnnectionString("DB2Context"));
});

Вопросы:

  1. При выполнении dotnet webapp.dll из консоли (в Azure) я получаю следующую ошибку: Необработанное исключение. System.ArgumentException.Keyword не поддерживается: «аутентификация». Примечание. Я использую EFCore, а также добавил пакет Microsoft.Data.SqlClient (последняя версия 5.x.x) в оба проекта.

  2. Если все файлы настроек приложения будут отправлены (как показано в Kudu), какие настройки приложения будут прочитаны? appsettings.json или любая другая среда? Насколько я понимаю, это должен быть appsettings.json.

  3. Я пробовал другие варианты строки подключения с измененным значением аутентификации (по умолчанию, интегрированным и т. д.), но вижу ту же ошибку. Я также попытался добавить строку подключения в Службу приложений Azure -> Конфигурация -> параметр приложения (также в разделе строки подключения), но получаю ту же ошибку. Насколько я понимаю, предпочтение должно быть из раздела «Конфигурация», а затем из файла настроек приложения.

  4. Будет ли лучшим способом обработки параметров приложения для разных сред использовать только файлы appsettings.json и appsettings.development.json в решении и создавать для всех сред при подготовке службы приложений Azure (шаблон IaC), файлы параметров для разных сред могут есть необходимые настройки (извлекаются из хранилища ключей)? Или любой другой способ лучше, проще и безопаснее?

Я не понизил голос, но я полагаю, что кто-то сделал это, потому что вы задали слишком много вопросов в одном. Один относится к соединению, а другой к тому, как определяются настройки. Вы можете разделить это на 2 отдельных вопроса. Тем не менее, какую версию Hangfire вы используете?

Peter Bons 15.04.2023 20:11

Понятно, в следующий раз точно разделю вопросы. Спасибо за объяснение. Версия Hangfire — 1.7.32 (Hangfire.AspNetCore и Hangfire.SqlServer).

Lucky 16.04.2023 10:11

Не могли бы вы составить новый вопрос для № 2 и № 4? Лучше отвечать на них отдельно от #1

Peter Bons 16.04.2023 14:00

Конечно, я сразу же добавлю новый вопрос

Lucky 17.04.2023 06:06

Я опубликовал его как отдельный вопрос: Параметры приложения — Служба приложений Azure (несколько сред) stackoverflow.com/questions/76031818/…

Lucky 17.04.2023 06:56
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
5
97
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Hangfire.SqlServer 1.7.34 по-прежнему использует System.Data.SqlClient вместо Microsoft.Data.SqlClient. Однако вы можете указать ему использовать пространство имен Microsoft.Data:

.UseSqlServerStorage(
        () => new Microsoft.Data.SqlClient.SqlConnection(builder.Configuration.GetConnectionString("DB1Context")));

См. эту проблему и эту, которые относятся к фрагменту кода выше.

Другие вопросы по теме