Проверка подлинности размещенных в Azure приложений .NET в ресурсах Azure с помощью управляемого удостоверения, назначаемого пользователем
Рекомендуемый подход к проверке подлинности размещенного в Azure приложения в других ресурсах Azure — использовать управляемое удостоверение. Этот подход поддерживается для большинства служб Azure, включая приложения, размещенные в службе приложений Azure, приложениях контейнеров Azure и виртуальных машинах Azure. Узнайте больше о различных техниках и подходах к аутентификации на странице обзор аутентификации. В следующих разделах вы узнаете:
- Основные концепции управляемой идентичности
- Как создать управляемое удостоверение, назначаемое пользователем для вашего приложения
- Назначение ролей управляемому удостоверению, назначенному пользователем
- Как выполнить проверку подлинности с использованием управляемого удостоверения, назначенного пользователем, из кода приложения
Основные концепции управляемой идентичности
Управляемое удостоверение позволяет приложению безопасно подключаться к другим ресурсам Azure без использования секретных ключей или других секретов приложения. В Azure отслеживаются идентификация и ресурсы, к которым он может подключаться. Azure использует эти сведения для автоматического получения маркеров Microsoft Entra для приложения, чтобы разрешить ему подключаться к другим ресурсам Azure.
Существуют два типа управляемых удостоверений, которые следует учитывать при настройке хостингового приложения:
- Назначаемые системой управляемые идентификаторы включаются прямо на ресурсе Azure и привязаны к его жизненному циклу. При удалении ресурса Azure автоматически удаляет удостоверение за вас. Назначаемые системой удостоверения обеспечивают минимальный подход к использованию управляемых удостоверений.
- Назначенные пользователем управляемые удостоверения создаются как автономные ресурсы Azure и обеспечивают большую гибкость и возможности. Они идеально подходят для решений, связанных с несколькими ресурсами Azure, которые должны совместно использовать одинаковые удостоверения и разрешения. Например, если нескольким виртуальным машинам требуется доступ к одному набору ресурсов Azure, управляемое удостоверение, назначаемое пользователем, обеспечивает повторное использование и оптимизированное управление.
Совет
Узнайте больше о выборе и управлении управляемыми удостоверениями, назначаемыми системой, и удостоверениями, назначаемыми пользователем, в статье , содержащей рекомендации по лучшим практикам работы с управляемыми удостоверениями.
В следующих разделах описаны шаги по включению и использованию назначаемой пользователем управляемой идентичности для приложения, размещенного в Azure. Если вам нужно использовать управляемое удостоверение, назначаемое пользователем, перейдите к статье о системно назначаемых управляемых удостоверениях для получения дополнительной информации.
Создание управляемого удостоверения, назначаемого пользователем
Назначаемые пользователем управляемые удостоверения создаются как автономные ресурсы в подписке Azure с помощью портала Azure или Azure CLI. Команды Azure CLI можно выполнять в Azure Cloud Shell или на рабочей станции с установленным Azure CLI.
На портале Azure введите управляемые удостоверения в главной строке поиска и выберите соответствующий результат в разделе Services.
На странице управляемых удостоверений выберите + Создать.
На странице Создание управляемого удостоверения, назначаемого пользователем, выберите подписку, группу ресурсов и регион для управляемого удостоверения, назначаемого пользователем, а затем укажите имя.
Выберите Проверить и создать для проверки входных данных.
Выберите Создать, чтобы создать управляемое удостоверение, назначаемое пользователем.
После создания идентичности выберите Перейти к ресурсу.
На странице обзора нового удостоверения скопируйте значение идентификатора клиента, чтобы использовать его позже при настройке кода приложения.
Назначьте управляемое удостоверение вашему приложению
Управляемое удостоверение, назначаемое пользователем, может быть связано с одним или несколькими ресурсами Azure. Все ресурсы, использующие это удостоверение, получают разрешения, обусловленные ролями удостоверения.
На портале Azure перейдите к ресурсу, в котором размещен код приложения, например службе приложений Azure или экземпляру приложения контейнеров Azure.
На странице Обзор ресурса разверните Настройки и выберите Идентификация в панели навигации.
На странице удостоверения перейдите на вкладку пользователя, назначенного.
Выберите + Добавить, чтобы открыть панель для добавления управляемого удостоверения с назначением пользователя.
На панели Добавление управляемого удостоверения, назначаемого пользователем, используйте раскрывающийся список подписки , чтобы отфильтровать результаты поиска для ваших удостоверений. Используйте поле поиска управляемой идентичности, назначенной пользователем, для поиска управляемой идентичности, назначенной пользователем, которую вы включили для ресурса Azure, на котором размещено ваше приложение.
Выберите учетную запись и нажмите Добавить внизу панели, чтобы продолжить.
Назначьте роли управляемому удостоверению
Затем определите, какие роли нужны вашему приложению, и назначьте эти роли для управляемого удостоверения. Роли можно назначить управляемым идентичностям на следующих уровнях:
- Ресурс: назначенные роли применяются только к этому конкретному ресурсу.
- Группа ресурсов : назначенные роли применяются ко всем ресурсам, содержащимся в этой группе ресурсов.
- подписка: Назначенные обязанности распространяются на все ресурсы, содержащиеся в подписке.
В следующем примере показано, как назначать роли в области группы ресурсов, так как многие приложения управляют всеми связанными ресурсами Azure с помощью одной группы ресурсов.
Перейдите на страницу обзора группы ресурсов, содержащей приложение с управляемым удостоверением, назначенным пользователем.
Выберите Управление доступом (IAM) на панели навигации слева.
На странице управления доступом (IAM) выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли, чтобы перейти на страницу Назначение роли.
На странице Добавление назначения ролей представлен рабочий процесс с вкладками, состоящий из нескольких этапов, для назначения ролей идентичностям. На начальной вкладке роли используйте поле поиска вверху, чтобы найти роль, которую вы хотите назначить личности.
Выберите роль из результатов и выберите Далее, чтобы перейти на вкладку Участники.
Для параметра Назначить доступ к выберите Управляемое удостоверение.
Для параметра опции "Учётные записи" выберите + Выберите пользователей, чтобы открыть панель Выбор управляемых идентичностей.
На панели Выбор управляемых удостоверений используйте раскрывающиеся списки Подписка и Управляемое удостоверение, чтобы отфильтровать результаты поиска для ваших удостоверений. Используйте поле поиска Select, чтобы найти назначаемое пользователем управляемое удостоверение, которое вы включили для ресурса Azure, на котором размещено приложение.
Выберите аккаунт и нажмите Выбрать в нижней части панели, чтобы продолжить.
Выберите Рецензирование и назначьте в нижней части страницы.
На вкладке "Окончательная проверка и назначение " выберите "Проверка и назначение" для завершения рабочего процесса.
Удостоверяйте подлинность в службах Azure из вашего приложения
Библиотека удостоверений Azure предоставляет различные учетные данные— реализации TokenCredential
адаптированы для поддержки различных сценариев и потоков проверки подлинности Microsoft Entra. Так как управляемое удостоверение недоступно при локальном выполнении, следующие шаги демонстрируют, какие учетные данные следует использовать в каком сценарии.
-
локальная среда разработки: во время локальной разработки толькоиспользуйте класс с именем DefaultAzureCredential для предварительно настроенной цепочки учетных данных.
DefaultAzureCredential
обнаруживает учетные данные пользователя из локального инструмента или интегрированной среды разработки, например Azure CLI или Visual Studio. Она также обеспечивает гибкость и удобство повторных попыток, время ожидания ответов и поддержку нескольких вариантов проверки подлинности. Посетите статью "Аутентификация в службах Azure во время локальной разработки", чтобы узнать больше. - приложения, размещенные в Azure,. Когда ваше приложение работает в Azure, используйте ManagedIdentityCredential для безопасного обнаружения управляемого удостоверения, настроенного для вашего приложения. Указание этого точного типа учетных данных предотвращает неожиданное получение других доступных учетных данных.
Реализация кода
Добавьте пакет Azure.Identity. В проекте ASP.NET Core также установите пакет Microsoft.Extensions.Azure:
В выбранном терминале перейдите к каталогу проекта приложения и выполните следующие команды:
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
К службам Azure обращаются с использованием специальных клиентских классов из различных библиотек клиентов Azure SDK. Эти классы и собственные пользовательские службы должны быть зарегистрированы для внедрения зависимостей, чтобы их можно было использовать во всем приложении. В Program.cs
выполните следующие действия, чтобы настроить клиентский класс для инъекции зависимостей и аутентификации на основе токенов.
- Включите пространства имен
Azure.Identity
иMicrosoft.Extensions.Azure
с помощью директивusing
. - Зарегистрируйте клиент службы Azure, используя соответствующий метод расширения с префиксом
Add
. - Передайте соответствующий экземпляр
TokenCredential
методуUseCredential
:- Использование
DefaultAzureCredential
при локальном запуске приложения - Используйте
ManagedIdentityCredential
при запуске приложения в Azure и настройте идентификатор клиента, идентификатор ресурса или идентификатор объекта.
- Использование
- идентификатор клиента
- идентификатор ресурса
- ID объекта
Идентификатор клиента используется для идентификации управляемого удостоверения при настройке приложений или служб, которые должны проходить проверку подлинности с помощью этого удостоверения.
Получите идентификатор клиента, назначенный управляемому удостоверению, назначаемого пользователем, с помощью следующей команды:
az identity show \ --resource-group <resource-group-name> \ --name <identity-name> \ --query 'clientId'
Настройте
ManagedIdentityCredential
с идентификатором клиента:builder.Services.AddAzureClients(clientBuilder => { clientBuilder.AddBlobServiceClient( new Uri("https://<account-name>.blob.core.windows.net")); TokenCredential credential = null; if (builder.Environment.IsProduction() || builder.Environment.IsStaging()) { // Managed identity token credential discovered when running in Azure environments credential = new ManagedIdentityCredential( ManagedIdentityId.FromUserAssignedClientId("<client-id>")); } else { // Running locally on dev machine - DO NOT use in production or outside of local dev credential = new DefaultAzureCredential(); } clientBuilder.UseCredential(credential); });
Альтернативой методу
UseCredential
является предоставление учетных данных клиенту службы напрямую:TokenCredential credential = null; if (builder.Environment.IsProduction() || builder.Environment.IsStaging()) { // Managed identity token credential discovered when running in Azure environments credential = new ManagedIdentityCredential( ManagedIdentityId.FromUserAssignedClientId("<client-id>")); } else { // Running locally on dev machine - DO NOT use in production or outside of local dev credential = new DefaultAzureCredential(); } builder.Services.AddSingleton<BlobServiceClient>(_ => new BlobServiceClient( new Uri("https://<account-name>.blob.core.windows.net"), credential));
Предыдущий код ведет себя по-разному в зависимости от среды, в которой она выполняется:
- На вашей локальной рабочей станции разработки
DefaultAzureCredential
ищет в переменных среды учетные данные службы приложения или использует локально установленные инструменты разработчика, такие как Visual Studio, для получения набора учетных данных разработчика. - При развертывании в Azure
ManagedIdentityCredential
обнаруживает конфигурации управляемых удостоверений для автоматической аутентификации с другими службами.