Учебник. Подключение к Базе данных SQL из Службы приложений .NET без секретов с помощью управляемого удостоверения
Статья
Служба приложений — это служба веб-размещения с самостоятельной установкой исправлений и высоким уровнем масштабируемости в Azure. Она также предоставляет управляемое удостоверение для вашего приложения, которое является готовым решением для защиты доступа к Базе данных SQL Azure и другим службам Azure. Управляемые удостоверения в службе приложений делают ваше приложение более безопасным, устраняя из него секреты, такие как учетные данные в строках подключения. В этом руководстве вы добавите управляемое удостоверение в пример веб-приложения, созданного в одном из следующих руководств:
Предоставление управляемому удостоверению доступа к Базе данных SQL
Настройка Entity Framework для использования проверки подлинности Microsoft Entra с База данных SQL
Подключение к База данных SQL из Visual Studio с помощью проверки подлинности Microsoft Entra
Примечание
Проверка подлинности Microsoft Entra отличается от встроенной проверка подлинности Windows в локальная служба Active Directory (AD DS). AD DS и Идентификатор Microsoft Entra используют совершенно разные протоколы проверки подлинности. Дополнительные сведения см . в документации по доменным службам Microsoft Entra.
Если вы еще не ознакомились с этими руководствами, сначала изучите одно из них. Кроме того, вы можете адаптировать шаги для своего собственного приложения .NET с Базой данных SQL.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
1. Предоставление пользователю Microsoft Entra доступа к базе данных
Во-первых, включите проверку подлинности Microsoft Entra для База данных SQL, назначив пользователя Microsoft Entra в качестве администратора сервера. Этот пользователь отличается от учетной записи Майкрософт, которую вы использовали для регистрации на подписку Azure. Он должен быть пользователем, который вы создали, импортировали, синхронизировали или пригласили в идентификатор Microsoft Entra. Дополнительные сведения о разрешенных пользователях Microsoft Entra см. в разделе о функциях и ограничениях Microsoft Entra в База данных SQL.
Найдите идентификатор объекта пользователя Microsoft Entra, используя az ad user list имя участника-пользователя и замените <его.> Результат сохраняется в переменной.
Azure CLI
$azureaduser=(az ad user list --filter"userPrincipalName eq '<user-principal-name>'"--query'[].id'--output tsv)
Совет
Чтобы просмотреть список всех имен субъектов-пользователей в идентификаторе Microsoft Entra ID, выполните команду az ad user list --query '[].userPrincipalName'.
Добавьте этого пользователя Microsoft Entra в качестве администратора Active Directory с помощью az sql server ad-admin create команды в Cloud Shell. В следующей команде замените <server-name> именем сервера (без суффикса .database.windows.net).
Azure CLI
az sql server ad-admin create --resource-group myResourceGroup --server-name<server-name>--display-name ADMIN --object-id$azureaduser
Visual Studio для Windows интегрирован с проверкой подлинности Microsoft Entra. Чтобы включить разработку и отладку в Visual Studio, добавьте пользователя Microsoft Entra в Visual Studio, выбрав пункт "Параметры учетной записи файла>" в меню, а затем нажмите кнопку "Войти" или "Добавить".
Чтобы задать пользователя Microsoft Entra для проверки подлинности службы Azure, выберите "Параметры инструментов>" в меню, а затем выберите пункт "Учетная запись проверки подлинности>службы Azure". Выберите добавленного пользователя Microsoft Entra и нажмите кнопку "ОК".
Visual Studio для Mac не интегрирована с проверкой подлинности Microsoft Entra. Однако клиентская библиотека удостоверений Azure, которая будет использоваться позже, может использовать маркеры из Azure CLI. Чтобы включить разработку и отладку в Visual Studio, необходимо установить Azure CLI на локальном компьютере.
Войдите в Azure CLI с помощью следующей команды с помощью пользователя Microsoft Entra:
Azure CLI
az login --allow-no-subscriptions
Visual Studio Code интегрирован с проверкой подлинности Microsoft Entra через расширение Azure. Установите расширение Azure Tools в Visual Studio Code.
В Visual Studio Code на панели действий щелкните значок Azure.
В обозревателе Службы приложений выберите Войти в Azure... и следуйте инструкциям.
Клиентская библиотека удостоверений Azure, которая будет использоваться позже, может использовать маркеры из Azure CLI. Чтобы включить разработку на основе командной строки, установите Azure CLI на локальном компьютере.
Войдите в Azure с помощью следующей команды с помощью пользователя Microsoft Entra:
Azure CLI
az login --allow-no-subscriptions
Клиентская библиотека удостоверений Azure, которая будет использоваться позже, может использовать маркеры из Azure PowerShell. Чтобы включить разработку на основе командной строки, установите Azure PowerShell на локальном компьютере.
Войдите в Azure CLI с помощью следующего командлета с помощью пользователя Microsoft Entra:
Теперь вы готовы разрабатывать и отлаживать приложение с помощью База данных SQL в качестве серверной части с помощью проверки подлинности Microsoft Entra.
3. Изменение проекта
Примечание
Microsoft.Azure.Services.AppAuthentication больше не рекомендуется использовать с новым пакетом SDK Azure.
Вместо этого предлагается новая клиентская библиотека удостоверений Azure, доступная для .NET, Java, TypeScript и Python, которая должна использоваться для разработки.
Сведения о переносе в Azure Identity см. в статье Руководство по переносу AppAuthentication в Azure.Identity.
В учебнике по ASP.NET Core и Базе данных SQLстрока подключения MyDbConnection в appsettings. json пока не используется. Локальная среда и среда Azure получают строки подключения из соответствующих переменных среды, чтобы секреты подключения не попадали в исходный файл. Но теперь, когда используется проверка подлинности Active Directory, секретов больше нет. В файле appsettings.json замените значение строки подключения MyDbConnection на следующий фрагмент кода:
Тип проверки подлинности Active Directory по умолчанию можно использовать как на локальном компьютере, так и в Службе приложений Azure. Драйвер пытается получить маркер из идентификатора Microsoft Entra с помощью различных средств. Если приложение развернуто, он получает маркер из управляемого удостоверения, назначаемого системой. Он также может пройти проверку подлинности с помощью управляемого удостоверения, назначаемого пользователем, если вы включаете: User Id=<client-id-of-user-assigned-managed-identity>; в строка подключения. Если приложение запущено локально, оно пытается получить маркер из Visual Studio, Visual Studio Code или Azure CLI.
Это все, что необходимо для подключения к Базе данных SQL. При отладке в Visual Studio код использует пользователя Microsoft Entra, настроенного в 2. Настройте среду разработки. Позже вы настроите Базу данных SQL, чтобы разрешить установку подключения с использованием управляемого удостоверения вашего приложения Службы приложений. Класс DefaultAzureCredential кэширует маркер в памяти и извлекает его из идентификатора Microsoft Entra сразу перед истечением срока действия. Для обновления токена не требуется пользовательский код.
Введите Ctrl+F5, чтобы снова запустить приложение. То же приложение CRUD в браузере теперь подключается к База данных SQL Azure напрямую с помощью проверки подлинности Microsoft Entra. Эта настройка позволяет запускать перенос базы данных из Visual Studio.
В Visual Studio откройте консоль диспетчера пакетов, добавьте пакет NuGet Azure.Identity и обновите Entity Framework:
Функция кэширования маркеров для управляемого удостоверения доступна начиная с Azure.Identity версии 1.8.0. Чтобы сократить использование сетевого порта, рассмотрите возможность обновления Azure.Identity до этой версии или более поздней версии.
В объекте DbContext (в Models/MyDbContext.cs) добавьте в конструктор по умолчанию следующий код.
C#
Azure.Identity.DefaultAzureCredential credential;
var managedIdentityClientId = ConfigurationManager.AppSettings["ManagedIdentityClientId"];
if(managedIdentityClientId != null ) {
//User-assigned managed identity Client ID is passed in via ManagedIdentityClientIdvar defaultCredentialOptions = new DefaultAzureCredentialOptions { ManagedIdentityClientId = managedIdentityClientId };
credential = new Azure.Identity.DefaultAzureCredential(defaultCredentialOptions);
}
else {
//System-assigned managed identity or logged-in identity of Visual Studio, Visual Studio Code, Azure CLI or Azure PowerShell
credential = new Azure.Identity.DefaultAzureCredential();
}
var conn = (System.Data.SqlClient.SqlConnection)Database.Connection;
var token = credential.GetToken(new Azure.Core.TokenRequestContext(new[] { "https://database.windows.net/.default" }));
conn.AccessToken = token.Token;
Этот код использует Azure.Identity.DefaultAzureCredential для получения используемого маркера для База данных SQL из идентификатора Microsoft Entra, а затем добавляет его в подключение к базе данных. Хотя вы можете настроить DefaultAzureCredential, по умолчанию он уже универсальный. При запуске в Служба приложений используется управляемое удостоверение, назначаемое системой, по умолчанию. Если вы предпочитаете использовать управляемое удостоверение, назначаемое пользователем, добавьте новый параметр приложения с именем ManagedIdentityClientId и введите Client Id GUID из управляемого удостоверения, назначаемого пользователем, в value поле. При локальном запуске он может получить маркер с помощью удостоверения Visual Studio, Visual Studio Code, Azure CLI и Azure PowerShell.
В Web.config найдите строку подключения с именем MyDbConnection и замените ее значение connectionString на "server=tcp:<server-name>.database.windows.net;database=<db-name>;". Замените <server-name> и <db-name> на имя вашего сервера и имя базы данных. Эта строка подключения используется конструктором по умолчанию в Models/MyDbContext.cs.
Это все, что необходимо для подключения к Базе данных SQL. При отладке в Visual Studio код использует пользователя Microsoft Entra, настроенного в 2. Настройте среду разработки. Позже вы настроите Базу данных SQL, чтобы разрешить установку подключения с использованием управляемого удостоверения вашего приложения Службы приложений.
Введите Ctrl+F5, чтобы снова запустить приложение. То же приложение CRUD в браузере теперь подключается к База данных SQL Azure напрямую с помощью проверки подлинности Microsoft Entra. Эта настройка позволяет запускать перенос базы данных из Visual Studio.
4. Использование возможности подключения с управляемым удостоверением
Затем настройте приложение службы приложений для подключения к базе данных SQL с назначенным системой управляемым удостоверением.
Чтобы включить управляемое удостоверение для приложения Azure, используйте команду az webapp identity assign в Cloud Shell. В следующей команде замените <app-name>.
Azure CLI
az webapp identity assign --resource-group myResourceGroup --name<app-name>
Примечание
Чтобы включить управляемое удостоверение для слота развертывания, добавьте --slot <slot-name> и используйте имя слота в <slot-name>.
Если вы хотите, вы можете добавить удостоверение в группу Microsoft Entra, а затем предоставить База данных SQL доступ к группе Microsoft Entra вместо удостоверения. Например, следующие команды добавляют управляемое удостоверение из предыдущего шага в новую группу с именем myAzureSQLDBAccessGroup:
Azure CLI
$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name<app-name>--query principalId --output tsv)
az ad group member add --group$groupid--member-id$msiobjectidaz ad group member list -g$groupid
В Cloud Shell войдите в базу данных SQL с помощью команды SQLCMD. Замените имя сервера> именем сервера, <db-name именем базы данных, которое использует приложение, и <aad-user-name>> и <aad-password> учетными данными пользователя Microsoft Entra.<
<identity-name — это имя> управляемого удостоверения в идентификаторе Microsoft Entra. Если удостоверение назначено системой, имя всегда будет совпадать с именем приложения Службы приложений. Для слота развертывания имя его удостоверения, назначенного системой — <app-name>/slots/<slot-name>. Чтобы предоставить разрешения для группы Microsoft Entra, используйте отображаемое имя группы (например, myAzureSQLDBAccessGroup).
Введите EXIT, чтобы вернуться в командную строку Cloud Shell.
Примечание
Серверные службы управляемых удостоверений также поддерживают кэш маркеров, который обновляет маркер целевого ресурса только по истечении срока его действия. Если вы допустите ошибку при настройке разрешений Базы данных SQL и попытаетесь изменить разрешения после попытки получить маркер в приложении, вы получите новый маркер с обновленными разрешениями только после того, как истечет срок действия кэшированного маркера.
Примечание
Идентификаторы и управляемые удостоверения Microsoft Entra не поддерживаются для локального SQL Server.
Изменение строки подключения
Помните, что те же изменения, которые вы внесли в файл Web.config или appsettings.json, работают с управляемым удостоверением, поэтому единственное, что нужно сделать, — это удалить существующую строку подключения в Службе приложений, которую было создано Visual Studio во время первого развертывая вашего приложения. Используйте следующую команду, но замените <app-name> именем вашего приложения.
Azure CLI
az webapp config connection-string delete --resource-group myResourceGroup --name<app-name>--setting-names MyDbConnection
На странице публикации выберите команду Опубликовать.
Важно!
Убедитесь, что имя службы приложений не соответствует ни одной из существующих регистраций приложений. Это приведет к конфликтам идентификаторов участников.
git commit -am "configure managed identity"
git push azure main
Когда на новой веб-странице отображается список дел, ваше приложение подключается к базе данных с управляемым удостоверением.
Теперь вы должны иметь возможность редактировать список дел по-прежнему.
Очистка ресурсов
На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду в Cloud Shell:
Azure CLI
az group delete --name myResourceGroup
Ее выполнение может занять до минуты.
Следующие шаги
Вы научились выполнять следующие задачи:
Включение управляемых удостоверений
Предоставление управляемому удостоверению доступа к Базе данных SQL
Настройка Entity Framework для использования проверки подлинности Microsoft Entra с База данных SQL
Подключение к База данных SQL из Visual Studio с помощью проверки подлинности Microsoft Entra
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
В этом модуле вы узнаете, как переместить службы резервного копирования для приложения .NET, размещенного в Azure, из контейнеров в собственные службы Azure.
Продемонстрировать функции идентификатора Microsoft Entra для модернизации решений удостоверений, реализации гибридных решений и реализации управления удостоверениями.