#asp.net-core #azure-service-fabric #azure-keyvault #azure-managed-identity
#asp.net-ядро #azure-service-fabric #azure-keyvault #azure-managed-identity
Вопрос:
Я хочу получить доступ к хранилищу ключей из моего приложения Service Fabric через Managed Service Identity (MSI). Я включил MSI в масштабе виртуальной машины, установленном на портале Azure, и предоставил ему доступ к моему ресурсу хранилища ключей. В облаке это работает как волшебство. Однако у меня возникли проблемы с моей локальной средой разработки.
Насколько я понимаю, я могу предоставить себе доступ к хранилищу ключей и запустить az login в Azure CLI. Увы, это не работает при запуске приложения в локальном кластере Service Fabric. Я использую .net core 2.1 в service fabric и получаю указанное ниже исключение.
Azure.Идентификация.Исключение AuthenticationFailedException: DefaultAzureCredential не удалось получить токен из включенных учетных данных.
- Аутентификация по умолчанию в среде недоступна. Переменные среды настроены не полностью.
- Недоступна аутентификация ManagedIdentityCredential. Конечная точка управляемой идентификации не найдена.
- Ошибка аутентификации SharedTokenCacheCredential: проверка сохраняемости не удалась. Проверьте внутреннее исключение для получения подробной информации
- Невозможно получить доступ к поставщику токенов Visual Studio на C:UsersDefaultAppDataLocal .IdentityServiceAzureServiceAuthtokenprovider.json
- Ошибка аутентификации VisualStudioCodeCredential: указанный сеанс входа в систему не существует. Возможно, оно уже было завершено.
Ответ №1:
Службы, вероятно, работают под встроенной учетной записью NetworkService, которая не может получить доступ к CLI для получения учетных данных, поскольку она была запущена в вашем сеансе пользователя.
Попробуйте создать переменные среды на уровне компьютера для доступа к хранилищу:
- Создайте участника службы с паролем. Выполните приведенные здесь действия, чтобы создать участника-службу и предоставить ему разрешения на хранилище ключей.
- Задайте переменной среды с именем AzureServicesAuthConnectionString значение RunAs=App;AppID=AppID;TenantId=TenantId;AppKey=Secret. Вам необходимо заменить AppID, TenantId и Secret на фактические значения с шага # 1.
- Запустите приложение в вашей локальной среде разработки. Изменение кода не требуется. AzureServiceTokenProvider будет использовать эту переменную среды и использовать участника службы для аутентификации в Azure AD.
Не забудьте перезапустить, чтобы переменные среды добавлялись ко всем процессам.
Ответ №2:
Как показано в документе DefaultAzureCredential
, среда и управляемая идентификация представляют собой развернутую проверку подлинности службы. Azure CLI необходимо войти в систему с вашей учетной записью Azure с помощью az login
команды.
Итак, среда и управляемая идентификация подходят для вас. Например, при использовании среды сначала необходимо установить переменные среды, см. Здесь. Затем вы могли бы создать секретный клиент, используя значение по умолчанию.
// Create a secret client using the DefaultAzureCredential
var client = new SecretClient(new Uri("https://myvault.azure.vaults.net/"), new DefaultAzureCredential());
Ответ №3:
Я смог заставить это работать с разработкой локальной service fabric, открыв Services.msc на моем локальном компьютере разработки и настроив «Службу узла Service Fabric» для запуска от имени моей учетной записи локального пользователя, а не локальной службы по умолчанию.
Только тогда DefaultAzureCredential
будет работать для получения логина Az CLI.
Комментарии:
1. Я попробовал это, и это сработало, однако fabric:/ System / EventStoreService начал показывать ошибку, поэтому я предполагаю, что это официально не поддерживается.