Учебник. Подключение к Базе данных SQL из Службы приложений .NET без секретов с помощью управляемого удостоверения

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

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

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

Примечание.

Шаги, описанные в этом руководстве, поддерживаются в следующих версиях:

  • .NET Framework 4.8 и более поздних версий;
  • .NET 6.0 и более поздних версий.

Инструкции по Базе данных Azure для MySQL или Базе данных Azure для PostgreSQL в других языковых платформах (Node.js, Python и Java) см. в руководстве Подключение к базам данных 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.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Необходимые компоненты

Эта статья продолжается с того места, на котором вы остановились при изучении одного из следующих руководств.

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

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

Подготовьте среду к работе с Azure CLI.

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды 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.

  1. Если у клиента Microsoft Entra еще нет пользователя, создайте его, выполнив действия по добавлению или удалению пользователей с помощью идентификатора Microsoft Entra.

  2. Найдите идентификатор объекта пользователя Microsoft Entra, используя az ad user list имя участника-пользователя и замените <его.> Результат сохраняется в переменной.

    $azureaduser=(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query '[].id' --output tsv)
    

    Совет

    Чтобы просмотреть список всех имен субъектов-пользователей в идентификаторе Microsoft Entra ID, выполните команду az ad user list --query '[].userPrincipalName'.

  3. Добавьте этого пользователя Microsoft Entra в качестве администратора Active Directory с помощью az sql server ad-admin create команды в Cloud Shell. В следующей команде замените <server-name> именем сервера (без суффикса .database.windows.net).

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

Дополнительные сведения о добавлении администратора Active Directory см. в статье "Подготовка администратора Microsoft Entra для сервера"

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

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

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

Дополнительные сведения о настройке среды разработки для проверки подлинности Microsoft Entra см . в клиентской библиотеке удостоверений Azure для .NET.

Теперь вы готовы разрабатывать и отлаживать приложение с помощью База данных SQL в качестве серверной части с помощью проверки подлинности Microsoft Entra.

3. Изменение проекта

Примечание.

Microsoft.Azure.Services.AppAuthentication больше не рекомендуется использовать с новым пакетом SDK Azure. Вместо этого предлагается новая клиентская библиотека удостоверений Azure, доступная для .NET, Java, TypeScript и Python, которая должна использоваться для разработки. Сведения о переносе в Azure Identity см. в статье Руководство по переносу AppAuthentication в Azure.Identity.

Действия, описанные в проекте, зависят от того, используете ли вы Entity Framework Core (по умолчанию для ASP.NET Core) или Entity Framework (по умолчанию для ASP.NET).

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

    Install-Package Microsoft.Data.SqlClient -Version 5.1.0
    
  2. В учебнике по ASP.NET Core и Базе данных SQLстрока подключения MyDbConnection в appsettings. json пока не используется. Локальная среда и среда Azure получают строки подключения из соответствующих переменных среды, чтобы секреты подключения не попадали в исходный файл. Но теперь, когда используется проверка подлинности Active Directory, секретов больше нет. В файле appsettings.json замените значение строки подключения MyDbConnection на следующий фрагмент кода:

    "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>; в строка подключения. Если приложение запущено локально, оно пытается получить маркер из Visual Studio, Visual Studio Code или Azure CLI.

    Это все, что необходимо для подключения к Базе данных SQL. При отладке в Visual Studio код использует пользователя Microsoft Entra, настроенного в 2. Настройте среду разработки. Позже вы настроите Базу данных SQL, чтобы разрешить установку подключения с использованием управляемого удостоверения вашего приложения Службы приложений. Класс DefaultAzureCredential кэширует маркер в памяти и извлекает его из идентификатора Microsoft Entra сразу перед истечением срока действия. Для обновления токена не требуется пользовательский код.

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

4. Использование возможности подключения с управляемым удостоверением

Затем настройте приложение службы приложений для подключения к базе данных SQL с назначенным системой управляемым удостоверением.

Примечание.

Хотя инструкции в этом разделе касаются назначенного системой удостоверения, можно так же легко использовать удостоверение, назначенное пользователем. Для этого потребуется изменить az webapp identity assign command, чтобы назначить нужное удостоверение, назначенное пользователем. Затем при создании пользователя SQL вместо имени сайта следует использовать имя ресурса назначенного пользователем удостоверения.

Включение управляемого удостоверения в приложении

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

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

Примечание.

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

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

{
  "additionalProperties": {},
  "principalId": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "type": "SystemAssigned"
}

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

Примечание.

Если вы хотите, вы можете добавить удостоверение в группу Microsoft Entra, а затем предоставить База данных SQL доступ к группе 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. В Cloud Shell войдите в базу данных SQL с помощью команды SQLCMD. Замените имя сервера> именем сервера, <db-name именем базы данных, которое использует приложение, и <aad-user-name>> и <aad-password> учетными данными пользователя Microsoft Entra.<

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. В командной строке SQL нужной базы данных выполните следующие команды, чтобы предоставить приложению требуемые минимальные разрешения. Например,

    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
    

    <identity-name — это имя> управляемого удостоверения в идентификаторе Microsoft Entra. Если удостоверение назначено системой, имя всегда будет совпадать с именем приложения Службы приложений. Для слота развертывания имя его удостоверения, назначенного системой — <app-name>/slots/<slot-name>. Чтобы предоставить разрешения для группы Microsoft Entra, используйте отображаемое имя группы (например, myAzureSQLDBAccessGroup).

  3. Введите EXIT, чтобы вернуться в командную строку Cloud Shell.

    Примечание.

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

    Примечание.

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

Изменение строки подключения

Помните, что те же изменения, которые вы внесли в файл Web.config или appsettings.json, работают с управляемым удостоверением, поэтому единственное, что нужно сделать, — это удалить существующую строку подключения в Службе приложений, которую было создано Visual Studio во время первого развертывая вашего приложения. Используйте следующую команду, но замените <app-name> именем вашего приложения.

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

5. Публикация изменений

Теперь требуется опубликовать изменения в Azure.

  1. Если вы пришли из руководства: создайте приложение ASP.NET в Azure с База данных SQL, опубликуйте изменения в Visual Studio. В обозревателе решений щелкните правой кнопкой мыши проект DotNetAppSqlDb и выберите Опубликовать.

    Публикация в обозревателе решений

  2. На странице публикации выберите команду Опубликовать.

    Внимание

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

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

Приложение Azure после включения Code First Migration

Теперь вы должны иметь возможность редактировать список дел по-прежнему.

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

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

az group delete --name myResourceGroup

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

Следующие шаги

Вы научились выполнять следующие задачи:

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