Руководство. Использование назначаемого системой управляемого удостоверения на виртуальной машине Windows для доступа к SQL Azure

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

  • Предоставление виртуальной машине доступа к Базе данных SQL Azure
  • Включение проверки подлинности Microsoft Entra
  • Создание в базе данных автономного пользователя, который представляет назначаемое системой удостоверение виртуальной машины
  • Получение маркера доступа с использованием удостоверения виртуальной машины и отправка запроса в Базу данных SQL Azure с его помощью

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

Enable

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

Screenshot shows the System assigned tab for a virtual machine where you can turn on the System assigned status.

Чтобы включить управляемое удостоверение, назначаемое системой, для новой виртуальной машины, сделайте следующее:

  1. Войдите на портал Azure

  2. Создайте виртуальную машину с включенным удостоверением, назначенным системой.

Предоставление доступа

Чтобы предоставить виртуальной машине доступ к Базе данных SQL Azure, можно использовать существующий логический сервер SQL Server или создать новый. Чтобы создать сервер и базу данных с помощью портала Azure, следуйте указаниям в статье Создание базы данных SQL Azure на портале Azure. В документации по SQL Azure также есть краткие руководства, описывающие использование Azure CLI и Azure PowerShell.

Предоставление виртуальной машине доступа к базе данных выполняется в два этапа:

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

Включение проверки подлинности Microsoft Entra

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

  1. На портале Azure выберите SQL servers (Серверы SQL Server) на левой панели навигации.
  2. Выберите SQL Server, который будет включен для проверки подлинности Microsoft Entra.
  3. В разделе колонки Параметры щелкните Администратор Active Directory.
  4. В командной строке щелкните Задать администратора.
  5. Выберите учетную запись пользователя Microsoft Entra, чтобы сделать администратора сервера, и нажмите кнопку " Выбрать".
  6. На панели команд нажмите кнопку Сохранить.

Создание автономного пользователя

В этом разделе показано, как в базе данных создать автономного пользователя, который представляет назначаемое системой удостоверение виртуальной машины. На этом шаге вам потребуется Microsoft SQL Server Management Studio (SSMS). Перед началом работы также может быть полезно ознакомиться со следующими статьями для фона интеграции Microsoft Entra:

Для базы данных SQL требуются уникальные отображаемые имена идентификатора Microsoft Entra. При этом учетные записи Microsoft Entra, такие как пользователи, группы и субъекты-службы (приложения), и имена виртуальных машин, включенные для управляемого удостоверения, должны быть уникальным образом определены в идентификаторе Microsoft Entra относительно их отображаемых имен. База данных SQL проверка отображаемое имя идентификатора Microsoft Entra во время создания таких пользователей T-SQL и, если это не уникально, команда завершается ошибкой, запрашивающей предоставление уникального отображаемого имени идентификатора Microsoft Entra для данной учетной записи.

Чтобы создать автономного пользователя, сделайте следующее:

  1. Запустите SQL Server Management Studio.

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

  3. В поле Authentication (Аутентификация) выберите Active Directory — универсальная с поддержкой MFA.

  4. В поле "Имя пользователя" введите имя учетной записи Microsoft Entra, заданной администратором сервера, например.helen@woodgroveonline.com

  5. Щелкните Параметры.

  6. В поле Подключение к базе данных введите имя несистемной базы данных, которую требуется настроить.

  7. Щелкните Подключить. Завершите процесс входа в систему.

  8. В обозревателе объектов разверните папку Базы данных.

  9. Щелкните правой кнопкой мыши базу данных пользователя и выберите новый запрос.

  10. В окне запроса введите следующую строку и на панели инструментов нажмите кнопку Выполнить.

    Примечание.

    В приведенной ниже команде VMName — это имя виртуальной машины, для которой вы ранее настроили назначаемое системой удостоверение.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

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

  11. Очистите окно запроса, введите следующую строку и на панели инструментов нажмите кнопку Выполнить.

    Примечание.

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

    Если возникла ошибка "Субъект VMName имеет повторяющееся отображаемое имя", добавьте инструкцию CREATE USER с помощью WITH OBJECT_ID='xxx".

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

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

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

Доступ к данным

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

Ниже приведен пример кода .NET для открытия подключения к SQL с помощью проверки подлинности управляемого удостоверения Active Directory. Этот код должен выполняться на виртуальной машине, чтобы обеспечить возможность доступа к конечной точке назначаемого системой управляемого удостоверения виртуальной машины. для использования этого метода требуется платформа .NET Framework версии 4.6.2 или более поздней версии или .NET Core 3.1 или более поздней версии. Замените значения AZURE-SQL-SERVERNAME и DATABASE соответствующим образом и добавьте ссылку NuGet в библиотеку Microsoft.Data.SqlClient.

using Microsoft.Data.SqlClient;

try
{
//
// Open a connection to the server using Active Directory Managed Identity authentication.
//
string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>; Authentication=Active Directory Managed Identity; Encrypt=True";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

Примечание.

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

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

  1. На портале перейдите к разделу Виртуальные машины, выберите свою виртуальную машину Windows и в разделе Обзор щелкните Подключить.

  2. Введите учетные данные администратора виртуальной машины, которые вы добавили при создании виртуальной машины Windows.

  3. Теперь, когда создано подключение к удаленному рабочему столу с виртуальной машиной, откройте PowerShell в удаленном сеансе.

  4. С помощью команды PowerShell Invoke-WebRequest выполните запрос к локальной конечной точке управляемого удостоверения, чтобы получить маркер доступа к SQL Azure.

        $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Преобразуйте ответ из объекта JSON в объект PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Извлеките маркер доступа из ответа.

    $AccessToken = $content.access_token
    
  5. Установите подключение к серверу. Не забудьте заменить значения AZURE-SQL-SERVERNAME и DATABASE.

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>; Encrypt=True;"
    $SqlConnection.AccessToken = $AccessToken
    $SqlConnection.Open()
    

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

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "SELECT * from <TABLE>;"
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    

Проверьте значение $DataSet.Tables[0], чтобы просмотреть результаты запроса.

Disable

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

Screenshot shows the System assigned tab for a virtual machine where you can turn off the System assigned status.

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

Из этого руководства вы узнали, как создать назначаемое системой управляемое удостоверение и получить доступ к Базе данных SQL Azure. См. дополнительные сведения о Базе данных SQL Azure: