Microsoft Entra for Azure SQL의 관리 ID

적용 대상:Azure SQL DatabaseAzure SQL Managed Instance

Microsoft Entra ID(이전의 Azure Active Directory)는 SMI(시스템 할당 관리 ID)와 UMI(사용자 할당 관리 ID) 두 가지 유형의 관리 ID를 지원합니다. 자세한 내용은 관리 ID 유형을 참조하세요.

SMI는 생성될 때 Azure SQL Managed Instance에 자동으로 할당됩니다. Azure SQL Database에서 Microsoft Entra 인증을 사용하는 경우 Azure 서비스 주체를 사용하여 SQL Database에서 Microsoft Entra 사용자를 만들 때 SMI를 할당해야 합니다.

이전에는 SMI만 Azure SQL Managed Instance 또는 SQL Database 서버 ID에 할당할 수 있었습니다. 이제 SQL Managed Instance 또는 SQL Database에 인스턴스 또는 서버 ID로 UMI를 할당할 수 있습니다.

UMI 및 SMI는 서버 또는 인스턴스 ID로 사용하는 것 외에도 SQL 연결 문자열 옵션 Authentication=Active Directory Managed Identity를 통해 데이터베이스에 액세스하는 데 사용할 수 있습니다. CREATE USER 문을 사용하여 대상 데이터베이스의 관리 ID에서 SQL 사용자를 만들어야 합니다. 자세한 내용은 SqlClient를 통한 Microsoft Entra 인증을 참조하세요.

Azure SQL Managed Instance 또는 Azure SQL Database에 대한 현재 UMI 또는 SMI를 검색하려면 이 문서의 뒷부분에 있는 논리 서버 또는 관리되는 인스턴스에 대한 관리 ID 가져오기 또는 설정을 참조하세요.

사용자 할당 관리 ID 사용의 이점

UMI를 서버 ID로 사용하면 몇 가지 이점이 있습니다.

  • 사용자는 테넌트에 대한 고유한 UMI를 유연하게 만들고 유지 관리할 수 있습니다. UMI를 Azure SQL에 대한 서버 ID로 사용할 수 있습니다. UMI는 사용자가 관리하지만 SMI는 서버당 고유하게 정의되고 시스템에서 할당됩니다.

  • 과거에는 SMI를 서버 또는 인스턴스 ID로 사용할 때 Microsoft Entra ID 디렉터리 읽기 권한자 역할이 필요했습니다. Microsoft Graph를 통한 Microsoft Entra ID에 액세스가 도입됨에 따라 디렉터리 읽기 권한자 역할과 같은 높은 권한을 SMI 또는 UMI에 부여하는 것이 우려되는 경우, 사용자는 서버 또는 인스턴스 ID가 Microsoft Graph에 액세스할 수 있도록 낮은 권한을 대신 부여할 수 있습니다.

    디렉터리 읽기 권한자 권한 및 기능에 대한 자세한 내용은 Azure SQL용 Microsoft Entra ID의 디렉터리 읽기 권한자 역할을 참조하세요.

  • 사용자는 테넌트에서 모든 데이터베이스 또는 관리되는 인스턴스의 서버 또는 인스턴스 ID로 특정 UMI를 선택할 수 있습니다. 또는 여러 UMI를 여러 서버 또는 인스턴스에 할당할 수 있습니다.

    UMI는 여러 서버에서 다양한 기능을 나타내는 데 사용할 수 있습니다. 예를 들어 하나의 UMI는 한 서버에서 TDE(투명한 데이터 암호화)를 제공하고, 또 다른 UMI는 다른 서버에서 Microsoft Entra ID 인증을 제공할 수도 있습니다.

  • CMK(고객 관리형 키)를 사용하여 TDE로 구성된 Azure의 논리 서버를 만들려면 UMI가 필요합니다. 자세한 내용은 사용자 할당 관리 ID를 사용한 고객 관리 투명 데이터 암호화를 참조하세요.

  • UMI는 논리 서버 또는 관리되는 인스턴스와 독립적입니다. 논리 서버 또는 인스턴스가 삭제되면 SMI도 삭제됩니다. UMI는 서버와 함께 삭제되지 않습니다.

참고 항목

SQL Managed Instance에서 Microsoft Entra ID 인증 지원을 허용하려면 인스턴스 ID(SMI 또는 UMI)를 사용하도록 설정해야 합니다. SQL Database의 경우 서버 ID를 사용하도록 설정하는 것은 선택 사항이며 Microsoft Entra ID 서비스 주체(Microsoft Entra ID 애플리케이션)가 서버에서 Microsoft Entra 사용자, 그룹 또는 애플리케이션을 만들고 관리하는 작업을 감독하는 경우에만 필요합니다. 자세한 내용은 Azure SQL와 Microsoft Entra 서버 보안 주체를 참조하세요.

사용자 할당 관리 ID 만들기

UMI를 만드는 방법에 대한 자세한 내용은 사용자가 할당한 관리 ID 관리를 참조하세요.

사용 권한

UMI가 만들어지면 UMI가 Microsoft Graph에서 서버 ID로 읽을 수 있도록 하려면 몇 가지 권한이 필요합니다. 다음 권한을 부여하거나 UMI에 디렉터리 읽기 권한자 역할을 부여합니다.

이 권한은 논리 서버 또는 관리되는 인스턴스를 프로비저닝하기 전에 부여해야 합니다. UMI에 사용 권한이 부여되면 서버 ID로 할당된 UMI를 통해 생성된 모든 서버 또는 인스턴스에 대해 사용하도록 설정됩니다.

중요

전역 관리자 또는 권한 있는 역할 관리자만 이러한 권한을 부여할 수 있습니다.

  • User.Read.All: Microsoft Entra 사용자 정보에 대한 액세스를 허용합니다.
  • User.Read.All: Microsoft Entra 그룹 정보에 대한 액세스를 허용합니다.
  • Application.Read.ALL: Microsoft Entra 서비스 주체(애플리케이션) 정보에 대한 액세스를 허용합니다.

권한 부여

다음 샘플 PowerShell 스크립트는 관리 ID에 필요한 권한을 부여합니다. 이 샘플에서는 사용자 할당 관리 ID umiservertest에 권한을 할당합니다.

스크립트를 실행하려면 전역 관리자 또는 권한 있는 역할 관리자 역할이 있는 사용자로 로그인해야 합니다.

스크립트는 관리 ID에 Microsoft Graph에 액세스할 수 있는 User.Read.All, GroupMember.Read.AllApplication.Read.ALL 권한을 부여합니다.

# Script to assign permissions to an existing UMI 
# The following required Microsoft Graph permissions will be assigned: 
#   User.Read.All
#   GroupMember.Read.All
#   Application.Read.All

Import-Module Microsoft.Graph.Authentication
Import-Module Microsoft.Graph.Applications

$tenantId = "<tenantId>"        # Your tenant ID
$MSIName = "<managedIdentity>"; # Name of your managed identity

# Log in as a user with the "Global Administrator" or "Privileged Role Administrator" role
Connect-MgGraph -TenantId $tenantId -Scopes "AppRoleAssignment.ReadWrite.All,Application.Read.All"

# Search for Microsoft Graph
$MSGraphSP = Get-MgServicePrincipal -Filter "DisplayName eq 'Microsoft Graph'";
$MSGraphSP

# Sample Output

# DisplayName     Id                                   AppId                                SignInAudience      ServicePrincipalType
# -----------     --                                   -----                                --------------      --------------------
# Microsoft Graph 47d73278-e43c-4cc2-a606-c500b66883ef 00000003-0000-0000-c000-000000000000 AzureADMultipleOrgs Application

$MSI = Get-MgServicePrincipal -Filter "DisplayName eq '$MSIName'" 
if($MSI.Count -gt 1)
{ 
Write-Output "More than 1 principal found with that name, please find your principal and copy its object ID. Replace the above line with the syntax $MSI = Get-MgServicePrincipal -ServicePrincipalId <your_object_id>"
Exit
}

# Get required permissions
$Permissions = @(
  "User.Read.All"
  "GroupMember.Read.All"
  "Application.Read.All"
)

# Find app permissions within Microsoft Graph application
$MSGraphAppRoles = $MSGraphSP.AppRoles | Where-Object {($_.Value -in $Permissions)}

# Assign the managed identity app roles for each permission
foreach($AppRole in $MSGraphAppRoles)
{
    $AppRoleAssignment = @{
	    principalId = $MSI.Id
	    resourceId = $MSGraphSP.Id
	    appRoleId = $AppRole.Id
    }

    New-MgServicePrincipalAppRoleAssignment `
    -ServicePrincipalId $AppRoleAssignment.PrincipalId `
    -BodyParameter $AppRoleAssignment -Verbose
}

사용자가 할당한 관리 ID에 대한 권한 확인

UMI에 대한 사용 권한을 확인하려면 Azure Portal로 이동합니다. Microsoft Entra ID 리소스에서 Enterprise 애플리케이션으로 이동합니다. 애플리케이션 유형에 대해 모든 애플리케이션을 선택하고 생성된 UMI를 검색합니다.

Screenshot of enterprise application settings in the Azure portal.

UMI를 선택하고 보안 아래의 권한 설정으로 이동합니다.

Screenshot of user-assigned managed identity permissions.

논리 서버 또는 관리되는 인스턴스에 대한 관리 ID 가져오기 또는 설정

UMI를 사용하여 서버를 만들려면 사용자가 할당한 관리 ID를 사용하여 Azure SQL 논리 서버 만들기 가이드를 참조하세요.

Azure SQL Database 논리 서버에 대한 SMI 가져오기

Azure Portal에서는 Azure SQL Database 논리 서버의 속성 메뉴에 시스템이 할당한 관리 ID(SMI)를 표시합니다.

Screenshot of the Azure portal page for an Azure SQL Database logical server. In the Properties menu, the System Assigned Managed Identity is highlighted.

  • Azure SQL Managed Instance 또는 Azure SQL Database에 대한 UMI를 검색하려면 다음 PowerShell 또는 Azure CLI 예제를 사용합니다.
  • Azure SQL Managed Instance에 대한 SMI를 검색하려면 다음 PowerShell 또는 Azure CLI 예제를 사용합니다.

Azure Portal에서 관리 ID 설정

Azure Portal에서 Azure SQL Database 논리 서버 또는 Azure SQL Managed Instance에 대한 사용자 관리 ID를 설정하려면:

  1. SQL 서버 또는 SQL 관리형 인스턴스 리소스로 이동합니다.
  2. 보안 아래에서 ID 설정을 선택합니다.
  3. 사용자 할당 관리 ID 아래에서 추가를 선택합니다.
  4. 구독을 선택한 다음, 기본 ID에 대해 구독의 UMI를 선택합니다. 그런 다음 선택 버튼을 선택합니다.

Azure portal screenshot of selecting a user-assigned managed identity when configuring an existing server identity.

Azure CLI를 사용하여 관리 ID 만들기 또는 설정

UMI를 통해 이러한 명령을 실행하려면 Azure CLI 2.26.0 이상이 필요합니다.

Azure CLI를 사용하는 Azure SQL Database 관리 ID

  • 사용자 할당 ID를 통해 새 서버를 프로비저닝하려면 az sql server create 명령을 사용합니다.

  • 논리 서버에 대한 관리 ID를 가져오려면 az sql server show 명령을 사용합니다.

    • 예를 들어 논리 서버의 사용자 할당 ID를 검색하려면 각각의 principalId(을)를 찾습니다.

      az sql server show --resource-group "resourcegroupnamehere" --name "sql-logical-server-name-here" --query identity.userAssignedIdentities
      
    • Azure SQL Database 논리 서버의 시스템 할당 관리 ID를 검색하려면 다음을 수행합니다.

      az sql server show --resource-group "resourcegroupnamehere" --name "sql-logical-server-name-here" --query identity.principalId
      
  • UMI 서버 설정을 업데이트하려면 az sql server update 명령을 사용합니다.

Azure CLI를 통한 Azure SQL Managed Instance 관리 ID 연결

  • UMI를 통해 새 관리형 인스턴스를 프로비저닝하려면 az sql mi create 명령을 사용합니다.

  • 관리형 인스턴스의 시스템 할당 관리 ID와 사용자 할당 관리 ID를 가져오려면 az sql mi show 명령을 사용합니다.

    • 예를 들어 관리되는 인스턴스에 대한 UMI를 검색하려면 각각의 principalId를 찾습니다.

      az sql mi show --resource-group "resourcegroupnamehere" --name "sql-mi-name-here" --query identity.userAssignedIdentities
      
    • 관리되는 인스턴스의 SMI를 검색하려면:

      az sql mi show --resource-group "resourcegroupnamehere" --name "sql-mi-name-here" --query identity.principalId
      
  • UMI의 관리되는 인스턴스 설정을 업데이트하려면 az sql mi update 명령을 사용합니다.

PowerShell을 사용하여 관리 ID 만들기 또는 설정

UMI와 함께 PowerShell을 사용하는 경우 Az.Sql 모듈 3.4 이상이 필요합니다. 최신 버전의 PowerShell을 사용하는 것이 좋습니다. 또는 Azure Portal의 Azure Cloud Shell을 사용합니다.

PowerShell을 사용하여 Azure SQL Database 배포하기

  • UMI를 통해 새 서버를 프로비저닝하려면 New-AzSqlServer 명령을 사용합니다.

  • 논리 서버에 대한 관리 ID를 가져오려면 Get-AzSqlServer 명령을 사용합니다.

    • 예를 들어 논리 서버의 UMI를 검색하려면 각각의 principalId를 찾습니다.

      $MI = Get-AzSqlServer -ResourceGroupName "resourcegroupnamehere" -Name "sql-logical-server-name-here"
      $MI.Identity.UserAssignedIdentities | ConvertTo-Json 
      
    • Azure SQL Database 논리 서버의 SMI를 검색하려면:

      $MI = Get-AzSqlServer -ResourceGroupName "resourcegroupnamehere" -Name "sql-logical-server-name-here"
      $MI.Identity.principalId
      
  • UMI의 서버 설정을 업데이트하려면 Set-AzSqlServer 명령을 사용합니다.

관리 ID를 사용하여 Azure SQL Managed Instance 연결하기

  • UMI를 통해 새 관리되는 인스턴스를 프로비저닝하려면 New-AzSqlInstance 명령을 사용합니다.

  • 관리되는 인스턴스에 대한 관리 ID를 가져오려면 Get-AzSqlInstance 명령을 사용합니다.

    • 예를 들어 관리되는 인스턴스의 UMI를 검색하려면 각각의 principalId를 찾습니다.

      $MI = Get-AzSqlInstance -ResourceGroupName "resourcegroupnamehere" -Name "sql-mi-name-here"
      $MI.Identity.UserAssignedIdentities | ConvertTo-Json 
      
    • 관리되는 인스턴스의 SMI를 검색하려면:

      $MI = Get-AzSqlInstance -ResourceGroupName "resourcegroupnamehere" -Name "sql-mi-name-here"
      $MI.Identity.principalId
      
  • UMI의 관리되는 인스턴스 설정을 업데이트하려면 Set-AzSqlInstance 명령을 사용합니다.

REST API를 사용하여 관리 ID 만들기 또는 설정

서버에 대한 UMI 설정을 업데이트하려면 사용자가 할당한 관리 ID를 사용하여 논리 서버 만들기 또는 사용자가 할당한 관리 ID를 사용하여 관리되는 인스턴스 만들기에 사용되는 REST API 프로비저닝 스크립트를 사용할 수도 있습니다. 업데이트하려는 업데이트된 사용자 할당 관리 ID 속성을 사용하여 가이드에서 프로비전 명령을 다시 실행합니다.

ARM 템플릿을 사용하여 관리 ID 만들기 또는 설정

서버에 대한 UMI 설정을 업데이트하려면 사용자가 할당한 관리 ID를 사용하여 논리 서버 만들기 또는 사용자가 할당한 관리 ID를 사용하여 관리되는 인스턴스 만들기에 사용되는 ARM 템플릿(Azure Resource Manager 템플릿)을 사용할 수도 있습니다. 업데이트하려는 업데이트된 사용자 할당 관리 ID 속성을 사용하여 가이드에서 프로비전 명령을 다시 실행합니다.

참고 항목

ARM 템플릿에 대한 프로비저닝 명령을 다시 실행하여 서버 관리자 또는 암호를 변경하거나 Microsoft Entra 관리자를 변경할 수는 없습니다.

제한 사항 및 알려진 문제

  • 관리형 인스턴스를 만들면 Azure Portal의 Microsoft Entra 관리자 창에 경고가 표시됩니다. Managed Instance needs permissions to access Microsoft Entra ID. Click here to grant "Read" permissions to your Managed Instance. UMI에 이 문서의 앞부분에서 설명한 적절한 권한을 부여한 경우 이 경고를 무시하세요.
  • SMI 또는 UMI를 서버 또는 인스턴스 ID로 사용하는 경우 ID를 삭제하면 서버 또는 인스턴스가 Microsoft Graph에 액세스할 수 없게 됩니다. Microsoft Entra 인증 및 기타 함수가 실패합니다. Microsoft Entra 기능을 복원하려면 적절한 권한이 있는 새 SMI 또는 UMI를 서버에 할당합니다.
  • SMI 또는 UMI를 통해 Microsoft Graph에 액세스할 수 있는 권한을 부여하려면 PowerShell을 사용해야 합니다. 이 권한은 Azure Portal을 사용하여 부여할 수 없습니다.