Tutorial: Usar uma identidade gerenciada atribuída pelo sistema da VM do Windows para acessar o SQL Azure

Este tutorial mostra como usar uma identidade atribuída ao sistema em uma VM (máquina virtual) do Windows para acessar o Banco de Dados SQL do Azure. As Identidades de Serviço Gerenciadas são gerenciadas automaticamente pelo Azure e permitem a você autenticar os serviços compatíveis com a autenticação do Microsoft Entra sem necessidade de inserir as credenciais em seu código. Você aprenderá como:

  • Permitir acesso à sua VM a um Banco de Dados SQL do Azure
  • Habilitar a autenticação do Microsoft Entra
  • Crie um usuário contido no banco de dados que represente a identidade atribuída do sistema da VM
  • Obter um token de acesso usando a identidade da VM e usá-lo para consultar o Banco de Dados SQL do Azure

Pré-requisitos

Habilitar

Habilitar uma identidade gerenciada atribuída pelo sistema é uma experiência de um clique. Você pode habilitá-la durante a criação de uma VM ou nas propriedades de uma VM existente.

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

Para habilitar a identidade gerenciada atribuída pelo sistema em uma nova VM:

  1. Entre no Portal do Azure

  2. Criar uma máquina virtual com identidade atribuída pelo sistema habilitada

Conceder acesso

Para permitir acesso à VM a um banco de dados no Banco de Dados SQL do Azure, use um servidor SQL lógico existente ou crie um. Para criar um novo servidor e banco de dados usando o portal do Azure, siga este início rápido do Azure SQL. Também há inícios rápidos que usam a CLI do Azure e o Azure PowerShell na documentação do SQL Azure.

Há duas etapas para conceder acesso da VM a um banco de dados:

  1. Habilitar a autenticação do Microsoft Entra para o servidor.
  2. Crie um usuário contido no banco de dados que represente a identidade atribuída do sistema da VM.

Habilitar a autenticação do Microsoft Entra

Para configurar a autenticação do Microsoft Entra:

  1. No portal do Azure, selecione Servidores SQL na navegação à esquerda.
  2. Selecione o SQL Server a ser habilitado para autenticação do Microsoft Entra.
  3. Na seção Configurações da folha, clique em Administrador do Active Directory.
  4. Na barra de comandos, clique em Definir administrador.
  5. Selecione uma conta de usuário do Microsoft Entra para ser um administrador do servidor e clique em Selecionar.
  6. Na barra de comandos, clique em Salvar.

Criar um usuário contido

Esta seção mostra como criar um usuário contido no banco de dados que representa a identidade atribuída do sistema da VM. Para esta etapa, você precisará do SSMS (Microsoft SQL Server Management Studio). Antes de começar, também pode ser útil examinar os seguintes artigos para obter informações sobre a integração do Microsoft Entra:

O BD SQL requer nomes de exibição exclusivos do Microsoft Entra ID. Com isso, contas do Microsoft Entra como usuários, grupos e Entidades de Serviço (aplicativos) e nomes de VM habilitados para identidade gerenciada precisam ser definidos exclusivamente no Microsoft Entra ID com relação aos respectivos nomes de exibição. O BD SQL verifica o nome de exibição do Microsoft Entra durante a criação do T-SQL desses usuários e, se ele não for exclusivo, o comando falhará solicitando para fornecer um nome de exibição do Microsoft Entra exclusivo para uma determinada conta.

Para criar um usuário contido:

  1. Inicie o SQL Server Management Studio.

  2. Na caixa de diálogo Conectar-se ao Servidor, insira o nome do servidor no campo Nome do servidor.

  3. No campo Autenticação, selecione Active Directory – Universal com suporte para MFA.

  4. No campo Nome de usuário, digite o nome da conta do Microsoft Entra que você definir como administrador do servidor, por exemplo, helen@woodgroveonline.com

  5. Clique em Opções.

  6. No campo Conectar-se ao banco de dados, digite o nome do banco de dados não são do sistema que você deseja configurar.

  7. Clique em Conectar. Conclua o processo de conexão.

  8. No Pesquisador de Objetos, expanda a pasta Bancos de Dados.

  9. Clique com o botão direito do mouse no banco de dados de usuário e selecione Nova consulta.

  10. Na janela de consulta, insira a linha a seguir e clique em Executar na barra de ferramentas:

    Observação

    VMName no comando a seguir é o nome da VM para a qual você habilitou o sistema de identidade atribuído na seção de pré-requisitos.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    O comando deve ser concluído com êxito, criando o usuário independente para a identidade atribuída ao sistema da VM.

  11. Desmarque a janela de consulta, insira a linha a seguir e clique em Executar na barra de ferramentas:

    Observação

    VMName no comando a seguir é o nome da VM para a qual você habilitou o sistema de identidade atribuído na seção de pré-requisitos.

    Se você encontrar o erro "Principal VMName tem um nome de exibição duplicado", anexe a instrução CREATE USER com WITH OBJECT_ID='xxx'.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    O comando deve ser concluído com êxito, concedendo ao usuário independente a capacidade de ler todo o banco de dados.

O código em execução na VM agora pode obter um token usando a identidade gerenciada atribuída ao sistema e usar o token para se autenticar no servidor.

Acessar dados

Esta seção mostra como obter um token de acesso usando a identidade gerenciada atribuída pelo sistema da VM e usá-lo para chamar o Azure SQL. O SQL do Azure tem suporte nativo para autenticação do Microsoft Entra, de modo que pode aceitar diretamente os tokens de acesso obtidos usando identidades gerenciadas para recursos do Azure. Esse método não requer o fornecimento de credenciais na cadeia de conexão.

Confira um exemplo de código .NET para abertura de uma conexão com o SQL usando a autenticação de Identidade Gerenciada do Active Directory. O código precisa ser executado na VM para ser capaz de acessar o ponto de extremidade da identidade gerenciada atribuída pelo sistema da VM. É necessário ter o .NET Framework 4.6.2 ou superior ou o .NET Core 3.1 ou superior para usar esse método. Substitua os valores de AZURE-SQL-SERVERNAME e DATABASE adequadamente e adicione uma referência do NuGet à biblioteca 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();

Observação

Você pode usar identidades gerenciadas enquanto trabalha com outras opções de programação usando nossos SDKs.

Como alternativa, uma maneira rápida de testar a configuração de ponta a ponta sem necessidade de escrever e implantar um aplicativo na VM é usando o PowerShell.

  1. No portal, navegue até Máquinas Virtuais e vá para a máquina virtual do Windows e em Visão geral, clique em Conectar.

  2. Insira a credencial de administrador da VM que você adicionou quando criou a VM do Windows.

  3. Agora que você criou uma Conexão de Área de Trabalho Remota com a máquina virtual, abra o PowerShell na sessão remota.

  4. Usando o Invoke-WebRequest do PowerShell, faça uma solicitação para o ponto de extremidade da identidade gerenciada local para obter um token de acesso ao 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"}
    

    Converta a resposta de um objeto JSON para um objeto do PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Extraia o token de acesso da resposta.

    $AccessToken = $content.access_token
    
  5. Abra uma conexão com o servidor. Lembre-se de substituir os valores para AZURE-SQL-SERVERNAME e 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()
    

    Em seguida, crie e envie uma consulta para o servidor. Lembre-se de substituir o valor para 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)
    

Examine o valor de $DataSet.Tables[0] para exibir os resultados da consulta.

Desabilitar

Para desabilitar a identidade atribuída pelo sistema em sua VM, configure o status da identidade atribuída pelo sistema como Desativado.

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

Próximas etapas

Neste tutorial, você aprendeu a usar uma identidade gerenciada atribuída ao sistema para acessar o Banco de Dados SQL do Azure. Para saber mais sobre o Banco de Dados SQL do Azure, confira: