Identidades gerenciadas no Microsoft Entra para SQL do Azure

Aplica-se a:Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

O Microsoft Entra ID (anteriormente Azure Active Directory) dá suporte a dois tipos de identidades gerenciadas: identidade gerenciada atribuída pelo sistema (SMI) e identidade gerenciada atribuída pelo usuário (UMI). Para obter mais informações, confira Tipos de identidade gerenciada.

Uma SMI é atribuída automaticamente à Instância Gerenciada de SQL do Azure quando ela é criada. Ao usar a autenticação do Microsoft Entra com o Banco de Dados SQL do Azure, você deve atribuir uma SMI quando as entidades de serviço do Azure forem usadas para criar usuários do Microsoft Entra no Banco de Dados SQL.

Anteriormente, apenas uma SMI poderia ser atribuída à identidade da Instância Gerenciada de SQL do Azure ou do servidor do Banco de Dados SQL. Agora uma UMI pode ser atribuída à Instância Gerenciada de SQL ou ao Banco de Dados SQL como a identidade do servidor ou da instância.

Além do uso de uma UMI e uma SMI como a identidade do servidor ou da instância, você pode usá-las para acessar o banco de dados usando a opção Authentication=Active Directory Managed Identity da cadeia de conexão do SQL. Você precisa criar um usuário SQL com base na identidade gerenciada no banco de dados de destino usando a instrução CREATE USER. Para obter mais informações, consulte Usar a autenticação do Microsoft Entra com SqlClient.

Para recuperar a SMI ou as UMIs atuais da instância gerenciada de SQL do Azure ou do Banco de Dados SQL do Azure, confira Obter ou definir uma identidade gerenciada para um servidor lógico ou uma instância gerenciada mais adiante neste artigo.

Benefícios do uso de identidades gerenciadas atribuídas pelo usuário

Há vários benefícios com o uso de uma UMI como identidade do servidor:

  • Os usuários têm a flexibilidade de criar e manter as próprias UMIs para um locatário. Você pode usar UMIs como identidades de servidor no SQL do Azure. Uma UMI é gerenciada pelo usuário, enquanto que uma SMI é definida exclusivamente por servidor e atribuída pelo sistema.

  • No passado, você precisava da função de Leitores de Diretório do Microsoft Entra ID ao usar uma SMI como identidade do servidor ou da instância. Com a introdução do acesso ao Microsoft Entra ID por meio do Microsoft Graph, os usuários com a preocupação em dar permissões de alto nível, como a função de Leitores de Diretório para a SMI ou a UMI, podem, alternativamente, dar permissões de nível inferior para que a identidade do servidor ou da instância possa acessar o Microsoft Graph.

    Para obter mais informações sobre como fornecer permissões de Leitores de Diretório e a respectiva função, confira Função de Leitores de Diretório no Microsoft Entra ID para o SQL do Azure.

  • Os usuários podem escolher uma UMI específica para ser a identidade do servidor ou da instância em todos os bancos de dados ou instâncias gerenciadas no locatário. Ou eles podem ter várias UMIs atribuídas a diferentes servidores ou instâncias.

    UMIs podem ser usadas em servidores diferentes para representar recursos diferentes. Por exemplo, uma UMI pode oferecer TDE (Transparent Data Encryption) em um servidor e outra UMI pode oferecer autenticação do Microsoft Entra em outro servidor.

  • Você precisa de uma UMI para criar um servidor lógico no Azure configurado com TDE com CMKs (chaves gerenciadas pelo cliente). Para obter mais informações, consulte Criptografia de dados transparente gerenciada pelo cliente usando identidade gerenciada atribuída pelo usuário.

  • As UMIs são independentes de servidores lógicos ou instâncias gerenciadas. Quando um servidor lógico ou uma instância é excluída, a SMI também é excluída. As UMIs não são excluídos com o servidor.

Observação

Você deve habilitar a identidade da instância (SMI ou UMI) para permitir o suporte à autenticação do Microsoft Entra na Instância Gerenciada de SQL. No Banco de Dados SQL, habilitar a identidade do servidor é opcional e será necessária somente se uma entidade de serviço do Microsoft Entra (aplicativo do AMicrosoft EntraD) supervisionar a criação e o gerenciamento de usuários, grupos ou aplicativos do Microsoft Entra no servidor. Para obter mais informações, consulte Entidade de serviço do Microsoft Entra com SQL do Azure.

Criar uma identidade gerenciada atribuída ao usuário

Para obter informações sobre como criar uma UMI, confira Gerenciar identidades gerenciadas atribuídas pelo usuário.

Permissões

Depois que a UMI é criada, algumas permissões são necessárias para permitir que a UMI leia no Microsoft Graph como identidade do servidor. Conceda as permissões a seguir ou conceda à UMI a função de Leitores de Diretório.

Essas permissões devem ser concedidas antes de provisionar uma instância gerenciada ou um servidor lógico. Depois que você conceder as permissões à UMI, elas são habilitadas para todos os servidores ou instâncias criadas com a UMI atribuída como uma identidade do servidor.

Importante

Somente um Administrador global ou Administrador com função com privilégios pode conceder essas permissões.

  • User.Read.All: permite acesso às informações de usuário do Microsoft Entra.
  • GroupMember.Read.All: permite acesso às informações de grupo do Microsoft Entra.
  • Application.Read.ALL: permite o acesso às informações da entidade de serviço do Microsoft Entra (aplicativos).

Conceder permissões

O script de exemplo do PowerShell a seguir concede as permissões necessárias para uma entidade gerenciada. Esta amostra atribui permissões à identidade gerenciada atribuída pelo usuário umiservertest.

Para executar o script, você deve entrar como um usuário com uma função Administrador Global ou Administrador de Funções Com Privilégios.

O script concede permissões User.Read.All, GroupMember.Read.All e Application.Read.ALL a uma identidade gerenciada para acessar o Microsoft Graph.

# 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
}

Verificar permissões da identidade gerenciada atribuída pelo usuário

Para verificar permissões de uma UMI, acesse o portal do Azure. No recurso Microsoft Entra ID, acesse Aplicativos empresariais. Selecione Todos os Aplicativos em Tipo de aplicativo e procure a UMI que foi criada.

Screenshot of enterprise application settings in the Azure portal.

Selecione a UMI e acesse as configurações de Permissões em Segurança.

Screenshot of user-assigned managed identity permissions.

Obter ou definir uma identidade gerenciada para um servidor lógico ou uma instância gerenciada

Para criar um servidor usando uma UMI, confira o seguinte guia: Criar um servidor lógico de SQL do Azure usando uma identidade gerenciada atribuída pelo usuário.

Obter a SMI do servidor lógico do Banco de Dados SQL do Azure

O portal do Azure exibe a ID da SMI (identidade gerenciada atribuída pelo sistema) no menu Propriedades do servidor lógico do Banco de Dados SQL do Azure.

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

  • Para recuperar as UMI(s) da Instância Gerenciada de SQL do Azure ou do Banco de Dados SQL do Azure, use os seguintes exemplos do PowerShell ou da CLI do Azure.
  • Para recuperar a SMI da Instância Gerenciada de SQL do Azure, use os seguintes exemplos do PowerShell ou da CLI do Azure.

Definir uma identidade gerenciada no portal do Azure

Para definir a identidade gerenciada pelo usuário para o servidor lógico do Banco de Dados SQL do Azure ou a Instância Gerenciada de SQL do Azure no portal do Azure:

  1. Acesse o recurso SQL Server ou Instância gerenciada do SQL.
  2. Em Segurança, selecione a configuração Identidade.
  3. Em Identidade gerenciada atribuída pelo usuário, selecione Adicionar.
  4. Selecione uma assinatura e, para Identidade primária, selecione uma identidade gerenciada para a assinatura. Em seguida, escolha o botão Selecionar.

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

Criar ou definir uma identidade gerenciada usando a CLI do Azure

A CLI do Azure 2.26.0 (ou posterior) é necessária para executar esses comandos com uma UMI.

Identidade gerenciada do Banco de Dados SQL do Azure usando a CLI do Azure

  • Para provisionar um novo servidor com uma identidade gerenciada atribuída pelo usuário, use o comando az sql server create.

  • Para obter as identidades gerenciadas de um servidor lógico, use o comando az sql server show.

    • Por exemplo, para recuperar as identidades gerenciadas atribuídas pelo usuário de um servidor lógico, procure a principalId para cada um deles:

      az sql server show --resource-group "resourcegroupnamehere" --name "sql-logical-server-name-here" --query identity.userAssignedIdentities
      
    • Para recuperar a identidade gerenciada atribuída pelo sistema de um servidor lógico do Banco de Dados SQL do Azure:

      az sql server show --resource-group "resourcegroupnamehere" --name "sql-logical-server-name-here" --query identity.principalId
      
  • Para atualizar a configuração do servidor da UMI, use o comando az sql server update.

Identidade gerenciada da Instância Gerenciada de SQL do Azure usando a CLI do Azure

  • Para provisionar uma nova instância gerenciada com uma UMI, use o comando az sql mi create.

  • Para obter as entidades gerenciadas atribuídas pelo sistema e atribuídas pelo usuário de instâncias gerenciadas, use o comando az sql mi show.

    • Por exemplo, para recuperar as UMIs em uma instância gerenciada, procure a principalId de cada uma delas:

      az sql mi show --resource-group "resourcegroupnamehere" --name "sql-mi-name-here" --query identity.userAssignedIdentities
      
    • Para recuperar a SMI de uma instância gerenciada:

      az sql mi show --resource-group "resourcegroupnamehere" --name "sql-mi-name-here" --query identity.principalId
      
  • Para atualizar a configuração da instância gerenciada da UMI, use o comando az sql mi update.

Criar ou definir uma identidade gerenciada usando o PowerShell

O módulo Az.Sql 3.4 ou superior é necessário ao usar o PowerShell com uma UMI. É recomendável usar a versão mais recente do PowerShell ou o Azure Cloud Shell no portal do Azure.

Identidade gerenciada do Banco de Dados SQL do Azure usando o PowerShell

  • Para provisionar um novo servidor com uma UMI, use o comando New-AzSqlServer.

  • Para obter as identidades gerenciadas de um servidor lógico, use o comando Get-AzSqlServer.

    • Por exemplo, para recuperar as UMIs de um servidor lógico, procure a principalId para cada um deles:

      $MI = get-azsqlserver -resourcegroupname "resourcegroupnamehere" -name "sql-logical-server-name-here"
      $MI.Identity.UserAssignedIdentities | ConvertTo-Json 
      
    • Para recuperar a SMI de um servidor lógico do Banco de Dados SQL do Azure:

      $MI = get-azsqlserver -resourcegroupname "resourcegroupnamehere" -name "sql-logical-server-name-here"
      $MI.Identity.principalId
      
  • Para atualizar a configuração do servidor da UMI, use o comando Set-AzSqlServer.

Identidade gerenciada da Instância Gerenciada de SQL do Azure usando PowerShell

  • Para provisionar uma nova instância gerenciada com uma UMI, use o comando New-AzSqlInstance.

  • Para obter as identidades gerenciadas de uma instância gerenciada, use o comando Get-AzSqlInstance.

    • Por exemplo, para recuperar as UMIs de uma instância gerenciada, procure a principalId de cada uma delas:

      $MI = get-azsqlinstance -resourcegroupname "resourcegroupnamehere" -name "sql-mi-name-here"
      $MI.Identity.UserAssignedIdentities | ConvertTo-Json 
      
    • Para recuperar a SMI de uma instância gerenciada:

      $MI = get-azsqlinstance -resourcegroupname "resourcegroupnamehere" -name "sql-mi-name-here"
      $MI.Identity.principalId
      
  • Para atualizar a configuração da instância gerenciada da UMI, use o comando Set-AzSqlInstance.

Criar ou definir uma identidade gerenciada usando a API REST

Para atualizar as configurações da UMI para o servidor, você também dispõe do script de provisionamento da API REST usado em Criar um servidor lógico usando uma identidade gerenciada atribuída pelo usuário ou Criar uma instância gerenciada usando uma identidade gerenciada atribuída pelo usuário. Execute novamente o comando de provisionamento no guia com a propriedade de identidade gerenciada atribuída pelo usuário atualizada que você deseja atualizar.

Criar ou definir uma identidade gerenciada usando um modelo do ARM

Para atualizar as configurações da UMI para o servidor, você também dispõe do modelo do ARM (Azure Resource Manager) usado em Criar um servidor lógico usando uma identidade gerenciada atribuída pelo usuário ou Criar uma instância gerenciada usando uma identidade gerenciada atribuída pelo usuário. Execute novamente o comando de provisionamento no guia com a propriedade de identidade gerenciada atribuída pelo usuário atualizada que você deseja atualizar.

Observação

Não é possível alterar a senha ou o administrador do servidor, nem alterar o administrador do Microsoft Entra executando novamente o comando de provisionamento do modelo do ARM.

Limitações e problemas conhecidos

  • Após criar uma instância gerenciada, a página de administração do Microsoft Entra para sua instância gerenciada no portal do Azure mostra um aviso: Managed Instance needs permissions to access Microsoft Entra ID. Click here to grant "Read" permissions to your Managed Instance. Se você concedeu ao UMI as permissões apropriadas discutidas anteriormente neste artigo, você pode ignorar este aviso.
  • Se você usar uma SMI ou uma UMI como a identidade do servidor ou da instância, excluir a identidade impossibilitará o servidor ou a instância de acessar o Microsoft Graph. A autenticação do Microsoft Entra e outras funções falharão. Para restaurar a funcionalidade do Microsoft Entra, atribua uma nova SMI ou UMI ao servidor, com as permissões apropriadas.
  • Para conceder permissões para acessar o Microsoft Graph por meio de uma SMI ou uma UMI, você precisa usar o PowerShell. Você não pode conceder essas permissões usando o portal do Azure.