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

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

Примечание.

В этом руководстве не содержатся рекомендации по Azure Cosmos DB, которые поддерживают проверку подлинности Microsoft Entra по-разному. Дополнительные сведения см. в документации по Azure Cosmos DB, например использование управляемых удостоверений, назначаемых системой, для доступа к данным Azure Cosmos DB.

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

Освещаются следующие темы:

  • Настройте пользователя Microsoft Entra в качестве администратора для базы данных Azure.
  • Подключитесь к базе данных как пользователь Microsoft Entra.
  • Настройка управляемого удостоверения, назначаемого системой или пользователем, для приложения Службы приложений.
  • Предоставление управляемому удостоверению доступа к базе данных.
  • Подключение к базе данных Azure из кода (.NET Framework 4.8, .NET 6, Node.js, Python, Java) с помощью управляемого удостоверения.
  • Подключитесь к базе данных Azure из среды разработки с помощью пользователя Microsoft Entra.

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

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

  • Создайте приложение в Службе приложений на основе .NET, Node.js, Python или Java.
  • Создайте сервер базы данных с Базой данных SQL Azure, Базой данных Azure для MySQL или Базой данных Azure для PostgreSQL.
  • Вы должны быть знакомы со стандартным шаблоном подключения (с именем пользователя и паролем) и иметь возможность успешно подключиться из приложения Службы приложений к выбранной базе данных.

Подготовьте среду к работе с 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 CLI:

az extension add --name serviceconnector-passwordless --upgrade

Примечание.

Проверьте расширение serviceconnector-passwordless версии 2.0.2 или более поздней.az version Чтобы обновить версию расширения, может потребоваться сначала обновить Azure CLI.

2. Создание подключения без пароля

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

Совет

Портал Azure поможет вам выполнить приведенные ниже команды. В портал Azure перейдите к ресурсу службы приложение Azure, выберите "Соединитель службы" в меню слева и нажмите кнопку "Создать". Заполните форму всеми необходимыми параметрами. Azure автоматически создает команду создания подключения, которую можно скопировать в ИНТЕРФЕЙС командной строки или выполнить в Azure Cloud Shell.

Следующая команда Azure CLI использует --client-type параметр.

  1. При необходимости запустите az webapp connection create sql -h файл, чтобы получить поддерживаемые типы клиентов.

  2. Выберите тип клиента и выполните соответствующую команду. Замените заполнители ниже собственными сведениями.

    az webapp connection create sql \
        --resource-group <group-name> \
        --name <server-name> \
        --target-resource-group <sql-group-name> \
        --server <sql-name> \
        --database <database-name> \
        --user-identity client-id=<client-id> subs-id=<subscription-id> \
        --client-type <client-type>
    

Эта команда Соединителя служб выполняет следующие задачи в фоновом режиме:

  • Включите управляемое удостоверение, назначаемое системой, или назначьте удостоверение пользователя для приложения<server-name>, размещенного службой приложение Azure.
  • Задайте администратору Microsoft Entra текущий пользователь, выполнившего вход.
  • Добавьте пользователя базы данных для управляемого удостоверения, назначаемого системой, или управляемого удостоверения, назначаемого пользователем. Предоставьте этому пользователю все права доступа к базе данных <database-name> . Имя пользователя можно найти в строка подключения в предыдущих выходных данных команды.
  • Задайте конфигурации с именем AZURE_MYSQL_CONNECTIONSTRINGили AZURE_POSTGRESQL_CONNECTIONSTRINGAZURE_SQL_CONNECTIONSTRING ресурсом Azure на основе типа базы данных.
  • Для Служба приложений конфигурации задаются в колонке "Параметры приложения".

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

3. Изменение кода

  1. Установите зависимости.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Получите База данных SQL Azure строка подключения из переменной среды, добавленной соединителем службы.

    using Microsoft.Data.SqlClient;
    
    // AZURE_SQL_CONNECTIONSTRING should be one of the following:
    // For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
    // For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Дополнительные сведения см. в разделе "Использование проверки подлинности управляемого удостоверения Active Directory".

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

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

Этот пример кода используется DefaultAzureCredential для получения используемого маркера для базы данных Azure из идентификатора Microsoft Entra ID, а затем добавляет его в подключение к базе данных. Хотя вы можете настроить DefaultAzureCredential, по умолчанию он уже является универсальным. Он получает маркер от вошедшего пользователя Microsoft Entra или управляемого удостоверения в зависимости от того, выполняете ли он локально в среде разработки или в Служба приложений.

Код готов к запуску в Azure без дальнейших изменений. Однако для локальной отладки кода в среде разработки требуется пользователь Microsoft Entra, выполнившего вход. На этом шаге вы настраиваете среду, выполнив вход с помощью пользователя Microsoft Entra.

  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.

5. Тестирование и публикация

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

  2. Опубликуйте код в Azure с помощью предпочтительного метода публикации. В Службе приложений код использует управляемое удостоверение приложения для подключения к внутренней базе данных.

Часто задаваемые вопросы

Поддерживает ли управляемое удостоверение SQL Server?

Да. Дополнительные сведения см. в разделе:

Возникает ошибка Login failed for user '<token-identified principal>'.

Управляемое удостоверение, для которого вы пытаетесь запросить маркер, не авторизовано для доступа к базе данных Azure.

Я внес изменения в проверку подлинности Службы приложений или связанную регистрацию приложения. Почему я все равно получаю старый маркер?

Серверные службы управляемых удостоверений также поддерживают кэш маркеров, который обновляет маркер целевого ресурса только по истечении срока его действия. Если вы измените конфигурацию после попытки получить маркер в приложении, вы получите новый маркер с обновленными разрешениями только после того, как истечет срок действия кэшированного маркера. Лучшее обходное решение — проверить изменения с помощью нового окна в режиме InPrivate (Edge)/частный (Safari)/инкогнито (Chrome). Таким образом вы точно начнете работу с нового сеанса, прошедшего проверку подлинности.

Разделы справки добавить управляемое удостоверение в группу Microsoft Entra?

Если вы хотите, вы можете добавить удостоверение в группу 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 <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

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

Возникает ошибка SSL connection is required. Please specify SSL options and retry.

Подключение к базе данных Azure требует дополнительных параметров и выходит за рамки этого руководства. Дополнительные сведения см. в одном из следующих разделов:

Настройка подключения TLS в Базе данных Azure для PostgreSQL — один серверНастройка подключения SSL в приложении для безопасного подключения к Базе данных Azure для MySQL

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

Соединитель служб нуждается в сетевом доступе к базе данных для предоставления доступа к удостоверению приложения. При создании защищенного приложения и архитектуры базы данных по умолчанию в портал Azure с помощью шаблона веб-приложения и базы данных архитектура блокирует сетевой доступ к базе данных и разрешает подключения только из виртуальной сети. Это также верно для Azure Cloud Shell. Однако вы можете развернуть Cloud Shell в виртуальной сети, а затем запустить команду Service Connector в этой Cloud Shell.

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

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

  • Настройте пользователя Microsoft Entra в качестве администратора для базы данных Azure.
  • Подключитесь к базе данных как пользователь Microsoft Entra.
  • Настройка управляемого удостоверения, назначаемого системой или пользователем, для приложения Службы приложений.
  • Предоставление управляемому удостоверению доступа к базе данных.
  • Подключение к базе данных Azure из кода (.NET Framework 4.8, .NET 6, Node.js, Python, Java) с помощью управляемого удостоверения.
  • Подключитесь к базе данных Azure из среды разработки с помощью пользователя Microsoft Entra.