Поделиться через


Инструкция. Использование управляемого удостоверения для подключения веб-приложения Azure к базе данных Azure SQL без секретов

Служба приложений Azure предоставляет в Azure высоко масштабируемую службу веб-хостинга, автоматически устанавливающую исправления. Служба приложений также предоставляет управляемое удостоверение для приложения, которое является готовым решением для защиты доступа к SQL Azure и другим службам Azure. Управляемые идентичности в Службе приложений делают ваше приложение более безопасным, устраняя секреты, такие как учетные данные в строках подключения.

В этом руководстве показано, как добавить управляемое удостоверение в пример приложения .NET с базой данных SQL Azure. После завершения приложение может безопасно подключиться к базе данных SQL Azure без необходимости использовать имя пользователя и пароль.

Схема архитектуры для учебного сценария.

Изучив это руководство, вы:

  • Включите управляемые удостоверения.
  • Предоставьте базе данных SQL Azure доступ к управляемому удостоверению.
  • Настройте Entity Framework для использования аутентификации Microsoft Entra с SQL-базой данных.
  • Подключитесь к базе данных SQL из Visual Studio с помощью проверки подлинности Microsoft Entra.

Рекомендации по использованию Базы данных Azure для MySQL или Базы данных Azure для PostgreSQL в Node.js, Python и Java фреймворках см. в разделе "Руководство: подключение к базам данных Azure из службы приложений без секретов с помощью управляемого удостоверения".

Примечание.

  • Идентификатор Microsoft Entra и управляемые удостоверения не поддерживаются для локального SQL Server.

  • Проверка подлинности Microsoft Entra отличается от встроенной проверки подлинности Windows в локальных доменных службах Active Directory (AD). AD DS и Идентификатор Microsoft Entra используют совершенно разные протоколы проверки подлинности. Для получения дополнительной информации см. документацию по доменным службам Microsoft Entra.

Предварительные условия

Предоставление администратору базы данных доступа к пользователю Microsoft Entra

Включите проверку подлинности Microsoft Entra в базу данных SQL Azure, назначив пользователя Microsoft Entra в качестве администратора сервера SQL Azure. Администратор Microsoft Entra должен быть пользователем, созданным, импортированным, синхронизированным или приглашенным в идентификатор Microsoft Entra. Этот пользователь может не совпадать с пользователем учетной записи Майкрософт для вашей подписки Azure.

Выполните следующие команды в среде Bash Azure Cloud Shell или после входа в Azure CLI локально.

  1. Используйте az ad user list с параметром display-name, filter или upn, чтобы получить идентификатор объекта для пользователя Microsoft Entra ID, которого вы хотите сделать администратором. Выполните az ad user list отдельно, чтобы отобразить сведения для всех пользователей в каталоге Microsoft Entra.

    Например, следующая команда отображает информацию для пользователя с ИД Microsoft Entra с display-name именем Firstname Lastname.

    az ad user list --display-name "Firstname Lastname"
    

    Ниже приведен пример выходных данных:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Добавьте пользователя Microsoft Entra ID как администратора на сервере SQL Azure с помощью параметра az sql server ad-admin create. В следующей команде замените <server-name> на имя вашего сервера без суффикса .database.windows.net, а <entra-id> на значение id из выходных данных предыдущей команды az ad user list.

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    

Настройте подключение управляемой идентификации для приложения

Эти шаги настраивают приложение на подключение к базе данных SQL Azure с использованием управляемого удостоверения, назначенного системой. Сведения об использовании назначаемого пользователем удостоверения см. в статье "Подключение к базам данных Azure из службы приложений без секретов с помощью управляемого удостоверения".

Активировать управляемое удостоверение для приложения

Чтобы включить управляемое удостоверение для приложения Azure, используйте команду az webapp identity assign, заменив на <app-name> ваше имя приложения. Имя назначаемого системой удостоверения всегда совпадает с именем приложения.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Пример результата:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Чтобы включить управляемое удостоверение для слота развертывания, добавьте --slot <slot-name> в предыдущую команду и используйте имя слота в <slot-name>. Имя назначаемого системой удостоверения для слота <app-name>/slots/<slot-name> развертывания.

Вы также можете добавить удостоверение личности в группу Microsoft Entra, а затем предоставить доступ к базе данных SQL группе Microsoft Entra вместо удостоверения личности. Чтобы предоставить разрешения для группы Microsoft Entra, используйте отображаемое имя группы. Следующие команды добавляют пример управляемого удостоверения в новую группу с именем myAzureSQLDBAccessGroup.

$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 $msiobjectid
az ad group member list -g $groupid

Предоставление разрешений управляемому удостоверению

Предоставьте удостоверению минимальные разрешения, необходимые приложению.

  1. Откройте командную строку PowerShell и войдите в базу данных SQL с помощью следующей команды SQLCMD. Замените <server-name> на имя вашего сервера, <db-name> на имя вашей базы данных, а <admin-user> на userPrincipalName имя пользователя администратора из выходных данных предыдущей команды az ad user list.

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Следуйте подсказкам, чтобы войти.

  2. В командной строке SQL выполните следующие команды, чтобы предоставить приложению минимальные разрешения, необходимые для базы данных. Замените <identity-name> именем управляемого удостоверения в Microsoft Entra ID, которое совпадает с именем приложения.

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

Примечание.

Серверные службы управляемых удостоверений поддерживают кэш маркеров , который обновляет маркер целевого ресурса только после истечения срока действия. Если вы пытаетесь изменить разрешения базы данных SQL после первого получения маркера с приложением, вы не получите новый маркер с обновленными разрешениями до истечения срока действия кэшированного маркера.

Удаление исходной строки подключения

Внесенные изменения в web.config или appsettings.json применяются к управляемой учетной записи. Вы можете удалить исходную строку подключения, используемую при первом развертывании приложения. Чтобы удалить строку подключения, выполните следующую команду Azure CLI, заменив <app-name> имя приложения и <connection-string-name> имя строки подключения.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names <connection-string-name>

Настройка среды разработки

Настройте выбранную среду разработки и войдите в Azure. Для получения дополнительной информации о настройке вашей среды разработки для проверки подлинности Microsoft Entra см. клиентскую библиотеку Azure Identity для .NET.

Visual Studio для Windows интегрирован с проверкой подлинности Microsoft Entra.

  1. Чтобы включить разработку и отладку в Visual Studio, добавьте пользователя Microsoft Entra в Visual Studio, выбравпункт "Параметры учетной записифайла>" в верхнем меню, а затем нажмите кнопку "Войти" или "Добавить".
  2. Чтобы задать пользователя Microsoft Entra для проверки подлинности службы Azure, выберите Сервис>Параметры в верхнем меню, а затем выберите Проверка подлинности службы Azure>Выбор учетной записи. Выберите добавленного пользователя Microsoft Entra и нажмите кнопку "ОК".

Изменение проекта и публикация приложения

Веб-приложение, поддерживаемое базой данных SQL Azure, использует контекст базы данных для подключения к базе данных. Чтобы использовать аутентификацию Microsoft Entra для работы с приложением, необходимо обновить контекст базы данных таким образом, чтобы он ссылался на поставщика Entity Framework для SQL Server, который зависит от актуального поставщика Microsoft.Data.SqlClient ADO.NET.

Поставщик Entity Framework заменяет встроенный поставщик SQL Server System.Data.SqlClient и включает поддержку методов аутентификации Microsoft Entra ID. Дополнительные сведения см. в статье Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] локально используется для контекста базы данных с помощью Microsoft.Data.SqlClient, но поскольку System.Data.SqlClient жестко задан как поставщик в Службе приложений Azure, необходимо расширить MicrosoftSqlDbConfiguration, чтобы перенаправить ссылки с System.Data.SqlClient на Microsoft.Data.SqlClient. Действия различаются в зависимости от того, есть ли у вас приложение на ASP.NET или ASP.NET Core.

Приложение ASP.NET Core использует Entity Framework Core по умолчанию.

  1. В консоли диспетчера пакетов Visual Studio добавьте пакет NuGet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. В appsettings.jsonзамените значение строки подключения следующим кодом, заменив <server-name имя сервера и <database-name> имя базы данных.

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Примечание.

    Проверку подлинности Active Directory по умолчанию можно использовать как на локальном компьютере, так и в службе приложений Azure. Драйвер может получить маркер из идентификатора Microsoft Entra по-разному.

    Если приложение развернуто, драйвер получает маркер из управляемого удостоверения, назначаемого системой. Драйвер также может пройти проверку подлинности с помощью управляемого удостоверения, назначаемого пользователем, если вы включаете User Id=<client-id-of-user-assigned-managed-identity>; в строку подключения.

    Класс DefaultAzureCredential кэширует маркер в памяти и извлекает его из идентификатора Microsoft Entra до истечения срока действия. Для обновления токена не требуется пользовательский код.

    Теперь у вас есть все необходимое для подключения к базе данных SQL Azure при отладке в Visual Studio. Код использует пользователя Microsoft Entra, настроенного при настройке среды разработки.

  3. Запустите приложение. Приложение CRUD в браузере подключается к базе данных SQL Azure напрямую с помощью проверки подлинности Microsoft Entra. Эта настройка позволяет запускать перенос базы данных из Visual Studio.

  4. Опубликуйте изменения с помощью следующих команд Git:

    git commit -am "configure managed identity"
    git push azure main
    

Тестирование приложения

Когда на новой веб-странице отображается список дел, ваше приложение подключается к базе данных с помощью управляемой идентификации.

Снимок экрана: приложение Azure после первой миграции кода.

Теперь можно изменить список to-do.

Очистка ресурсов

На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду в Cloud Shell:

az group delete --name myResourceGroup

Ее выполнение может занять до минуты.