Проверка подлинности размещенных в Azure приложений .NET в ресурсах Azure с помощью управляемого удостоверения, назначаемого системой
Статья
Рекомендуемый подход к проверке подлинности размещенного в Azure приложения в других ресурсах Azure — использовать управляемое удостоверение. Этот подход поддерживается для большинства служб Azure, включая приложения, размещенные в службе приложений Azure, приложениях контейнеров Azure и виртуальных машинах Azure. Узнайте больше о различных методах и подходах аутентификации на странице обзор методов аутентификации. В следующих разделах вы узнаете:
Основные понятия управляемой идентификации
Как создать управляемую удостоверенность, назначаемую системой, для вашего приложения
Назначение ролей управляемому удостоверению, назначаемого системой
Как выполнить аутентификацию с использованием управляемого удостоверения, назначенного системой, в коде вашего приложения.
Основные концепции управляемой идентичности
Управляемое удостоверение позволяет приложению безопасно подключаться к другим ресурсам Azure без использования секретных ключей или других секретов приложения. В Azure отслеживается идентичность и ресурсы, к которым разрешено подключаться. Azure использует эти сведения для автоматического получения маркеров Microsoft Entra для приложения, чтобы разрешить ему подключаться к другим ресурсам Azure.
Существует два типа управляемых удостоверений, которые следует учитывать при настройке размещенного приложения:
Управляемые системой идентификаторы включаются непосредственно на ресурсе Azure и активируются в рамках его жизненного цикла. При удалении ресурса Azure автоматически удаляет удостоверение вместо вас. Системные идентификаторы обеспечивают простой подход к использованию управляемых удостоверений.
управляемые удостоверения, назначенные пользователем, создаются как автономные ресурсы Azure и обеспечивают большую гибкость и возможности. Они идеально подходят для решений, связанных с несколькими ресурсами Azure, которые должны совместно использовать одинаковые удостоверения и разрешения. Например, если нескольким виртуальным машинам требуется доступ к одному набору ресурсов Azure, управляемое удостоверение, назначаемое пользователем, обеспечивает повторное использование и оптимизированное управление.
Совет
Дополнительные сведения о выборе и управлении управляемыми удостоверениями, назначаемыми системой, и управляемыми удостоверениями, назначенными пользователем, см. в статье "Рекомендации по использованию управляемых удостоверений".
В следующих разделах описаны шаги для включения и использования системного управляемого удостоверения для приложения, размещенного в Azure. Если вам нужно использовать управляемое удостоверение, назначаемое пользователем, ознакомьтесь с управляемыми удостоверениями, назначаемыми пользователем, статье.
Включение управляемого системного удостоверения на ресурсе размещения Azure
Чтобы начать использовать системное управляемое удостоверение с вашим приложением, включите удостоверение на ресурсе Azure, который размещает ваше приложение, например, в Службе приложений Azure, приложении контейнера Azure или виртуальной машине Azure.
Вы можете включить управляемое удостоверение, назначаемое системой для ресурса Azure, с помощью портала Azure или Azure CLI.
На портале Azure перейдите к ресурсу, в котором размещен код приложения, например службе приложений Azure или экземпляру приложения контейнера Azure.
На странице обзора ресурса разверните Настройки и выберите Идентификация в навигации.
На странице Identity переключите ползунок состояния на On.
Выберите Сохранить, чтобы применить изменения.
Команды Azure CLI можно выполнять в Azure Cloud Shell или на рабочей станции, где установлен Azure CLI.
Команды Azure CLI, используемые для включения управляемого удостоверения для ресурса Azure, имеют форму az <command-group> identity --resource-group <resource-group-name> --name <resource-name>. Ниже приведены определенные команды для популярных служб Azure.
Служба приложений Azure:
Azure CLI
az webapp identity assign \
--resource-group<resource-group-name> \
--name<web-app-name>
Виртуальная машина Azure:
Azure CLI
az vm identity assign \
--resource-group<resource-group-name> \
--name<virtual-machine-name>
Значение principalId является уникальным идентификатором управляемой идентичности. Сохраните копию этих выходных данных, так как эти значения потребуются на следующем шаге.
Назначьте роли для управляемого удостоверения
Затем найдите, какие роли требуются приложению, и назначьте эти роли управляемому удостоверению. Роли можно назначить управляемому удостоверению на следующих уровнях:
Ресурс: назначенные роли применяются только к этому конкретному ресурсу.
Группа ресурсов: назначенные роли применяются ко всем ресурсам, содержащимся в данной группе.
Подписка: Назначенные роли применяются ко всем ресурсам, входящим в состав подписки.
В следующем примере показано, как назначать роли в области группы ресурсов, так как многие приложения управляют всеми связанными ресурсами Azure с помощью одной группы ресурсов.
Перейдите на страницу обзора группы ресурсов, содержащей приложение с управляемым удостоверением, назначенным системой.
Выберите в области навигации слева Управление доступом (IAM).
На странице управления доступом (IAM) выберите + Добавить в верхнем меню, а затем выберите Назначение роли, чтобы перейти на страницу Назначение роли.
На странице Добавление назначения ролей представлен вкладочный, многошаговый рабочий процесс для назначения ролей идентичностям. На вкладке начальной роли используйте поле поиска вверху, чтобы найти роль, которую вы хотите назначить удостоверению.
Выберите роль из результатов и нажмите кнопку Далее, чтобы перейти на вкладку Участники.
Для параметра Назначить доступ к выберите Управляемое удостоверение.
Для параметра "Члены" выберите + "Выбор участников", чтобы открыть панель "Выбор управляемых удостоверений".
На панели Выбор управляемых удостоверений используйте подписку и раскрывающийся список управляемых удостоверений, чтобы отфильтровать результаты поиска для удостоверений. Используйте поле поиска Select, чтобы найти системную идентичность, которую вы включили для ресурса Azure, где размещено ваше приложение.
Определите личность и выберите Выбрать в нижней части панели, чтобы продолжить.
Выберите Рецензирование и назначьте в нижней части страницы.
На вкладке "Окончательное Обзор + Назначение" выберите "Обзор + Назначение", чтобы завершить рабочий процесс.
az role assignment create \
--assignee"{managedIdentityId}" \
--role"{roleName}" \
--scope"{scope}"
Чтобы получить имена ролей, которым может быть назначен субъект-служба, используйте команду az role definition list:
Azure CLI
az role definition list \
--query"sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Например, чтобы разрешить управляемому удостоверению идентификатор 99999999-9999-9999-9999-999999999999 чтение, запись и удаление доступа к контейнерам BLOB-объектов службы хранилища Azure и данным для всех учетных записей хранения в msdocs-dotnet-sdk-sdk-example группы ресурсов, назначьте субъекту-службе приложения роль участника данных хранилища BLOB-объектов с помощью следующей команды:
Azure CLI
az role assignment create \
--assignee99999999-9999-9999-9999-999999999999 \
--role"Storage Blob Data Contributor" \
--scope"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/msdocs-dotnet-sdk-auth-example"
Сведения о назначении разрешений на уровне ресурса или подписки с помощью Azure CLI см. в статье Назначение ролей Azure с помощьюAzure CLI.
Выполнение аутентификации в службах Azure из вашего приложения
Библиотека удостоверений Azure предоставляет различные учетные данные— реализации TokenCredential адаптированы для поддержки различных сценариев и потоков проверки подлинности Microsoft Entra. Так как управляемое удостоверение недоступно при локальном выполнении, следующие действия демонстрируют, какие учетные данные следует использовать в каком сценарии:
Локальная среда разработки: Во время только локальной разработкииспользуйте класс под названием DefaultAzureCredential для заданной заранее цепочки учетных данных.
DefaultAzureCredential обнаруживает учетные данные пользователя из локального инструмента или интегрированной среды разработки, например Azure CLI или Visual Studio. Она также обеспечивает гибкость и удобство повторных попыток, время ожидания ответов и поддержку нескольких вариантов проверки подлинности. См. статью о том, как выполнять аутентификацию для служб Azure во время локальной разработки, чтобы узнать больше.
приложения, размещенные в Azure,. Когда ваше приложение работает в Azure, используйте ManagedIdentityCredential для безопасного обнаружения управляемого удостоверения, настроенного для вашего приложения. Указание этого точного типа учетных данных предотвращает неожиданное получение других доступных учетных данных.
Щелкните проект правой кнопкой мыши в окне обозревателя решений Visual Studio и выберите Управление пакетами NuGet. Найдите Azure.Identityи установите соответствующий пакет. Повторите этот процесс для пакета Microsoft.Extensions.Azure.
Специализированные классы клиентов из различных клиентских библиотек Azure SDK используются для доступа к службам Azure. Эти классы и собственные пользовательские службы должны быть зарегистрированы для внедрения зависимостей, чтобы их можно было использовать во всем приложении. В Program.csвыполните следующие действия, чтобы настроить клиентский класс для внедрения зависимостей и проверки подлинности на основе токенов:
Включите пространства имен Azure.Identity и Microsoft.Extensions.Azure с помощью директив using.
Зарегистрируйте клиент службы Azure с помощью соответствующего метода расширения с префиксом Add.
передайте соответствующий экземпляр TokenCredential методу UseCredential:
Используйте DefaultAzureCredential при локальном запуске приложения.
Используйте ManagedIdentityCredential при запуске приложения в Azure.
C#
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
TokenCredential credential = null;
if (builder.Environment.IsProduction())
{
// Managed identity token credential discovered when running in Azure environments
credential = new ManagedIdentityCredential();
}
else
{
// Running locally on dev machine - DO NOT use in production or outside of local dev
credential = new DefaultAzureCredential();
}
clientBuilder.UseCredential(credential);
});
Альтернативой методу UseCredential является предоставление учетных данных клиенту службы напрямую:
C#
TokenCredential credential = null;
if (builder.Environment.IsProduction() || builder.Environment.IsStaging())
{
// Managed identity token credential discovered when running in Azure environments
credential = new ManagedIdentityCredential();
}
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 обнаруживает конфигурации управляемых удостоверений для автоматической проверки подлинности в других службах.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
Продемонстрировать функции идентификатора Microsoft Entra для модернизации решений удостоверений, реализации гибридных решений и реализации управления удостоверениями.
Узнайте, как выполнить проверку подлинности приложения в службах Azure при использовании пакета SDK Azure для .NET во время локальной разработки с помощью учетных записей разработчиков.
В этой статье описывается проверка подлинности приложения в службах Azure при использовании пакета SDK Azure для .NET в локальных размещенных приложениях.