Здесь довольно много вопросов, похожих на мой, но ни один из них, похоже, не помогает решить проблему, отсюда и новый вопрос. Я подключаюсь к хранилищу ключей, которое возвращает строку подключения к базе данных, используя следующий код в приложении .net web api в файле Program.cs.
var kVUri = $"https://{config["azureKeyVault:vault"]}.vault.azure.net/";
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback)
);
configurationBuilder.AddAzureKeyVault(kVUri, keyVaultClient, new DefaultKeyVaultSecretManager());
Приведенный выше код отлично работает локально, поскольку у меня есть доступ к хранилищу ключей, однако при развертывании кода в сборке происходит сбой при выполнении задачи миграции dotnet ef. Это задача командной строки, запуск сценария миграции dotnet ef... Ошибка Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Параметры: Строка подключения: [Строка подключения не указана]
Я удостоверился, что MI включен в службе приложений, есть регистрация приложения в AD, и этой службе предоставлены разрешения на Key Vault, подключение службы, на котором работает конвейер, также имеет разрешения на хранилище.
Когда подключение к хранилищу ключей было выполнено с использованием clientId и секрета, раньше выполнялись миграции EF. Я читал, что мне нужно добавить RunAs=app, но это, кажется, если я вызываю servicetokenprovider с помощью cli, что в данном случае я не делаю, если ему нужно войти в конвейер, не уверен, куда он должен идти.
Некоторая помощь будет высоко оценена.