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


Руководство: Подключение к базам данных Azure из приложения App Service без секретов с использованием управляемой идентичности

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

Примечание.

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

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

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

  • Настройте пользователя Microsoft Entra в качестве администратора для базы данных Azure.
  • Подключитесь к базе данных как пользователь Microsoft Entra.
  • Настройте системно назначенное или назначенное пользователем управляемое удостоверение для приложения службы Azure App Service.
  • Предоставление управляемому удостоверению доступа к базе данных.
  • Подключитесь к базе данных 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_CONNECTIONSTRING или AZURE_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

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

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

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

Чему вы научились:

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