Я следовал этому руководству от Microsoft: https://docs.microsoft.com/en-us/azure/container-instances/container-instances-managed-identity
Все это прекрасно работает, но когда я хочу развернуть ASP.NET Core 2.1 внутри контейнера, где в своем коде я пытаюсь прочитатьСекреты KeyVault не работает.Он будет работать без развертывания в контейнере Docker.
Но цель состоит в том, чтобы развернуть проект в контейнере Docker, зарегистрировать его в реестре контейнеров Azure, а затем создать экземпляр контейнера с контейнерами, которые могут читать секреты ключей..
Ошибка, которую я получаю, обычно возникает при попытке прочитать секреты из Keyvaults внутри работающего контейнера Docker ядра .NET:
AzureServiceTokenProviderException: Параметры: Connectionstring: [Нетуказана строка подключения], ресурс: https://vault.azure.net, Полномочия: https://login.windows.net/. Сообщение об исключении: Попробовал следующие 3 метода для получения токена доступа, но ни один из них не сработал.Параметры: Строка соединения: [Строка соединения не указана], Ресурс: https://vault.azure.net, Полномочия: https://login.windows.net/. Сообщение об исключении: Попытка получить токен с использованием идентификатора управляемой службы.Невозможно подключиться к конечной точке MSI.Убедитесь, что вы работаете на ресурсе Azure, для которого настроена MSI.Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://vault.azure.net, Полномочия: https://login.windows.net/. Сообщение об исключении: Попытка получить токен с помощью Visual Studio.Не удалось получить токен доступа.Переменная окружения LOCALAPPDATA не установлена.Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://vault.azure.net, Полномочия: https://login.windows.net/. Сообщение об исключении: Попытка получить токен с помощью Azure CLI.Не удалось получить токен доступа./ bin / bash: az: Нет такого файла или каталога.
Любое руководство для чтения контейнеров Docker из секретов Azure Keyvault?
Исходный код для чтения секретов keyvault:
public static async Task<string> GetSecret(string baseUrl, string keyName)
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
using (var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback)))
{
var secret = await keyVaultClient.GetSecretAsync(baseUrl, keyName).ConfigureAwait(false);
return secret
}
}