Учебник. Подключение к Базе данных 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 для использования аутентификации Azure AD с базой данных SQL
  • Подключитесь к базе данных SQL из Visual Studio с использованием аутентификации Azure AD

Примечание

Аутентификация Azure AD отличается от интегрированной аутентификации Windows в локальном экземпляре Active Directory (AD DS). Доменные службы Active Directory и Azure AD используют разные протоколы аутентификации. Дополнительные сведения см. на странице Документация по доменным службам Azure AD.

Если у вас еще нет подписки 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. Предоставление пользователю Azure AD доступа к базе данных

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

  1. Если в вашем клиенте Azure AD отсутствует пользователь, создайте его, выполнив действия, описанные в статье Add or delete users using Azure Active Directory (Добавление или удаление пользователей с помощью Azure Active Directory).

  2. Найдите идентификатор объекта пользователя Azure AD с помощью az ad user list и замените <user-principal-name>. Результат сохраняется в переменной.

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

    Совет

    Чтобы просмотреть список всех имен участников-пользователей в Azure AD, запустите az ad user list --query '[].userPrincipalName'.

  3. Добавьте этого пользователя Azure AD в качестве администратора 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 см. раздел Подготовка администратора Azure Active Directory для сервера

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

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

  2. Чтобы настроить пользователя Azure AD для службы аутентификации Azure, выберите в меню Инструменты>Параметры, а затем выберите Служба аутентификация Azure>Выбор учетной записи. Выберите добавленного пользователя Azure AD и нажмите ОК.

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

Теперь вы готовы разрабатывать и отлаживать свое приложение с базой данных SQL в качестве серверной части, используя аутентификацию Azure AD.

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

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

  3. Введите Ctrl+F5, чтобы снова запустить приложение. То же приложение CRUD в вашем браузере теперь подключается к базе данных SQL Azure напрямую, используя аутентификацию Azure AD. Эта настройка позволяет запускать перенос базы данных из 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"
}

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

Примечание

При необходимости можно добавить удостоверение в группу Azure AD, а затем предоставить доступ к Базе данных SQL группе Azure AD, а не удостоверению. Например, следующие команды добавляют управляемое удостоверение из предыдущего шага в новую группу с именем 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. Замените <server-name> именем вашего сервера, <db-name> — именем базы данных, которую использует ваше приложение, а <aad-user-name> и <aad-password> — учетными данными вашего пользователя Azure AD.

    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> — имя управляемого удостоверения в Azure AD. Если удостоверение назначено системой, имя всегда будет совпадать с именем приложения Службы приложений. Для слота развертывания имя его удостоверения, назначенного системой — <app-name>/slots/<slot-name>. Чтобы предоставить разрешения для группы Azure AD, используйте отображаемое имя группы (например, myAzureSQLDBAccessGroup).

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

    Примечание

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

    Примечание

    Локальный сервер SQL Server не поддерживает Azure Active Directory и управляемые удостоверения.

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

Помните, что те же изменения, которые вы внесли в файл 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 для использования аутентификации Azure AD с базой данных SQL
  • Подключитесь к базе данных SQL из Visual Studio с использованием аутентификации Azure AD