자습서: Windows VM 시스템 할당 관리 ID를 사용하여 Azure SQL에 액세스

이 자습서에서는 Windows VM(가상 머신)에 대한 시스템 할당 ID를 사용하여 Azure SQL Database에 액세스하는 방법을 보여 줍니다. 관리되는 서비스 ID는 Azure에서 자동으로 관리되며 코드에 자격 증명을 삽입할 필요 없이 Microsoft Entra 인증을 지원하는 서비스에 인증할 수 있습니다. 다음 방법에 대해 설명합니다.

  • VM에 Azure SQL Database에 대한 액세스 권한 부여
  • Microsoft Entra 인증 사용
  • VM의 시스템 할당 ID를 나타내는 데이터베이스에 포함된 사용자를 만듭니다.
  • VM ID를 사용하여 액세스 토큰을 가져온 다음, Azure SQL Database를 쿼리하는 데 사용

필수 조건

Enable

한 번의 클릭으로 시스템 할당 관리 ID를 활성화할 수 있습니다. VM을 만드는 동안 또는 기존 VM의 속성에서 이 기능을 활성화할 수 있습니다.

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

기존 VM에서 시스템 할당 관리 ID를 사용하도록 설정하려면 다음을 수행합니다.

  1. Azure 포털

  2. 시스템 할당 ID가 설정된 가상 머신 만들기

액세스 허가

Azure SQL Databaser의 데이터베이스에 대한 액세스 권한을 VM에 부여하려면 기존 논리 SQL 서버를 사용하거나 서버를 새로 만들면 됩니다. Azure Portal을 사용하여 새 서버 및 데이터베이스를 만들려면 다음 Azure SQL 빠른 시작을 따릅니다. Azure SQL 설명서에서 Azure CLI 및 Azure PowerShell을 사용하는 빠른 시작도 있습니다.

VM에 데이터베이스에 대한 액세스 권한을 부여하는 과정은 다음과 같은 2단계로 진행됩니다.

  1. 서버에 대해 Microsoft Entra 인증을 사용하도록 설정합니다.
  2. VM의 시스템 할당 ID를 나타내는 데이터베이스에 포함된 사용자를 만듭니다.

Microsoft Entra 인증 사용

Microsoft Entra 인증을 구성하려면:

  1. Azure Portal의 왼쪽 탐색 영역에서 SQL Server를 선택합니다.
  2. Microsoft Entra 인증을 사용하도록 설정할 SQL Server를 선택합니다.
  3. 블레이드의 설정 섹션에서 Active Directory 관리자를 클릭합니다.
  4. 명령 모음에서 Set admin을 클릭합니다.
  5. 서버 관리자로 지정할 Microsoft Entra 사용자 계정을 선택하고 선택을 클릭합니다.
  6. 명령 모음에서 저장을 클릭합니다.

포함된 사용자 만들기

이 섹션에서는 VM의 시스템 할당 ID를 나타내는 데이터베이스에 포함된 사용자를 만드는 방법을 보여줍니다. 이 단계에서는 Microsoft SSMS(SQL Server Management Studio)가 필요합니다. 시작하기 전에 Microsoft Entra 통합에 대한 백그라운드 지식을 알아보려면 다음 문서를 검토하는 것이 도움이 될 수 있습니다.

SQL DB에는 고유한 Microsoft Entra ID 표시 이름이 필요합니다. 이를 통해 사용자, 그룹 및 서비스 주체(애플리케이션)와 같은 Microsoft Entra 계정과 관리 ID에 사용되는 VM 이름은 해당 표시 이름과 관련하여 Microsoft Entra ID에서 고유하게 정의되어야 합니다. SQL DB는 해당 사용자의 T-SQL 만들기 중에 Microsoft Entra ID 표시 이름을 확인하고 고유하지 않은 경우 지정된 계정에 대해 고유한 Microsoft Entra ID 표시 이름을 제공하도록 요청하는 명령에 실패합니다.

포함된 사용자를 만들려면 다음을 수행합니다.

  1. SQL Server Management Studio를 시작합니다.

  2. 서버에 연결 대화 상자의 서버 이름 필드에 서버 이름을 입력합니다.

  3. 인증 필드에서 Active Directory - MFA 지원을 통한 유니버설 인증을 선택합니다.

  4. 사용자 이름 필드에 서버 관리자로 설정한 Microsoft Entra 계정의 이름을 입력합니다(예: helen@woodgroveonline.com).

  5. 옵션을 클릭합니다.

  6. 연결할 데이터베이스 필드에 구성하려면 비시스템 데이터베이스의 이름을 입력합니다.

  7. 연결을 클릭합니다. 로그인 프로세스를 완료합니다.

  8. 개체 탐색기에서 데이터베이스 폴더를 확장합니다.

  9. 사용자 데이터베이스를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다.

  10. 쿼리 창에서 다음 줄을 입력하고 도구 모음에서 실행을 클릭합니다.

    참고 항목

    다음 명령의 VMName은 필수 구성 요소 섹션에서 시스템 할당 ID를 사용하도록 설정한 VM의 이름입니다.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    이 명령은 성공적으로 완료되고 VM의 시스템 할당 ID에 대해 포함된 사용자가 만들어집니다.

  11. 쿼리 창을 지우고 다음 줄을 입력한 후 도구 모음에서 실행을 클릭합니다.

    참고 항목

    다음 명령의 VMName은 필수 구성 요소 섹션에서 시스템 할당 ID를 사용하도록 설정한 VM의 이름입니다.

    "VMName 주체에 중복된 표시 이름이 있습니다"라는 오류가 발생하는 경우 WITH OBJECT_ID='xxx'를 사용하여 CREATE USER 문을 추가합니다.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    명령이 성공적으로 완료되고 포함된 사용자에게 전체 데이터베이스를 읽을 수 있는 기능이 부여됩니다.

이제 VM에서 실행되는 코드는 해당 시스템 할당 관리 ID를 사용하여 토큰을 가져오고 해당 토큰을 사용하여 서버 인증을 받을 수 있습니다.

데이터 액세스

이 섹션에서는 VM의 시스템 할당 관리 ID를 사용하여 액세스 토큰을 가져오고 이를 사용하여 Azure SQL을 호출하는 방법을 보여줍니다. Azure SQL은 기본적으로 Microsoft Entra 인증을 지원하므로 Azure 리소스에 대한 관리 ID를 사용하여 가져오는 액세스 토큰을 직접 수락할 수 있습니다. 이 메서드는 연결 문자열에 자격 증명을 제공할 필요가 없습니다.

다음은 Active Directory 관리 ID 인증을 사용하여 SQL에 대한 연결을 여는 .NET 코드 예제입니다. VM의 시스템 할당 관리 ID의 엔드포인트에 액세스하기 위해서는 코드가 VM에서 실행되어야 합니다. 이 메서드를 사용하려면 .NET Framework 4.6.2 이상 또는 .NET Core 3.1 이상이 필요합니다. 그에 따라 AZURE-SQL-SERVERNAME 및 DATABASE의 값을 바꾸고 Microsoft.Data.SqlClient 라이브러리에 NuGet 참조를 추가합니다.

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를 사용하여 다른 프로그래밍 옵션으로 작업하는 동안 관리 ID를 사용할 수 있습니다.

또는 VM에서 앱을 작성 및 배포하지 않고도 PowerShell을 사용하여 엔드투엔드 설정을 빠르게 테스트할 수도 있습니다.

  1. Portal에서 Virtual Machines -> Windows Virtual Machines로 이동한 다음 개요에서 연결을 클릭합니다.

  2. Windows VM을 만들 때 추가한 VM 관리자 자격 증명을 입력합니다.

  3. 이제 가상 머신에 대한 원격 데스크톱 연결을 만들었으므로 원격 세션에서 PowerShell을 엽니다.

  4. PowerShell의 Invoke-WebRequest를 사용하여 로컬 관리 ID의 엔드포인트에 대한 요청을 수행해 Azure SQL용 액세스 토큰을 가져옵니다.

        $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] 값을 확인하여 쿼리의 결과를 검토합니다.

사용 안 함

VM에서 시스템이 할당 ID를 사용하지 않도록 설정하려면 시스템 할당 ID의 상태를 해제로 설정합니다.

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

다음 단계

이 자습서에서는 시스템 할당 관리 ID를 사용하여 Azure SQL Database에 액세스하는 방법을 알아보았습니다. Azure SQL Database에 대한 자세한 정보는 다음을 참조하세요.