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


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

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, создайте учетную запись free перед началом работы.

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

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

Подготовьте среду для Azure CLI.

1. Установка расширения без пароля соединителя службы

Установите новейшее расширение без необходимости пароля для Service Connector в Azure CLI.

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

Примечание.

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

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

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

Совет

Портал Azure поможет вам выполнить следующие команды. На портале Azure перейдите к ресурсу Служба приложений Azure выберите Service Connector в меню слева и выберите Create. Заполните форму всеми необходимыми параметрами. 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 из переменной среды, добавленной Service Connector.

    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 управляемого удостоверением.

Дополнительные сведения см. в разделе Homepage для клиентского программирования на 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, выбрав File>Account Settings в меню, и выберите Sign in или Add.

  2. Чтобы задать пользователя Microsoft Entra для аутентификации службы Azure, выберите Tools>Options в меню, затем выберите Аутентификация службы Azure> и Выбор учетной записи. Выберите добавленного Microsoft Entra пользователя и выберите OK.

Дополнительные сведения о настройке среды разработки для проверки подлинности 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, а затем предоставить доступ к этой группе вместо удостоверения. Например, следующие команды добавляют управляемое удостоверение из предыдущего шага в новую группу с именем 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 требует дополнительных параметров и выходит за рамки этого руководства. Дополнительные сведения см. в одном из следующих разделов:

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

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

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

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

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