Share via


Tutorial: Utilizar uma identidade gerida atribuída pelo sistema numa VM do Windows para aceder ao SQL do Azure

Este tutorial mostra como usar uma identidade atribuída ao sistema para uma máquina virtual (VM) do Windows para acessar o Banco de Dados SQL do Azure. As Identidades de Serviço Gerenciado são gerenciadas automaticamente pelo Azure e permitem que você se autentique em serviços que oferecem suporte à autenticação do Microsoft Entra, sem a necessidade de inserir credenciais em seu código. Sabe como:

  • Conceda à sua VM acesso ao Banco de Dados SQL do Azure
  • Habilitar a autenticação do Microsoft Entra
  • Criar um utilizador contido na base de dados que representa a identidade atribuída pelo 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

Ativar

Habilitar uma identidade gerenciada atribuída ao sistema é uma experiência de um clique. Você pode habilitá-lo 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 uma identidade gerenciada atribuída ao sistema em uma nova VM:

  1. Inicie sessão no portal do Azure

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

Conceder acesso

Para conceder à sua VM acesso a um banco de dados no Banco de Dados SQL do Azure, você pode usar um servidor SQL lógico existente ou criar um novo. Para criar um novo servidor e base de dados com o portal do Azure, siga este início rápido do SQL do Azure. Também existem inícios rápidos que utilizam a CLI do Azure e o Azure PowerShell na documentação do SQL do Azure.

Existem dois passos para conceder acesso da sua VM a uma base de dados:

  1. Habilite a autenticação do Microsoft Entra para o servidor.
  2. Criar um utilizador contido na base de dados que representa a identidade atribuída pelo sistema da VM.

Habilitar a autenticação do Microsoft Entra

Para configurar a autenticação do Microsoft Entra:

  1. No portal do Azure, selecione SQL Servers no painel de navegação esquerdo.
  2. Selecione o servidor SQL a ser habilitado para autenticação do Microsoft Entra.
  3. Na secção Definições do painel, 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 se tornar um administrador do servidor e clique em Selecionar.
  6. Na barra de comandos, clique em Guardar.

Criar usuário contido

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

O SQL DB requer nomes de exibição exclusivos do Microsoft Entra ID. Com isso, as contas do Microsoft Entra, como usuários, grupos e Entidades de Serviço (aplicativos), e os nomes de VM habilitados para identidade gerenciada devem ser definidos exclusivamente na ID do Microsoft Entra em relação aos seus nomes para exibição. O SQL DB verifica o nome de exibição do Microsoft Entra ID durante a criação do T-SQL desses usuários e, se ele não for exclusivo, o comando falhará ao solicitar o fornecimento de um nome de exibição exclusivo do Microsoft Entra ID para uma determinada conta.

Para criar um usuário contido:

  1. Inicie o SQL Server Management Studio.

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

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

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

  5. Clique em Opções.

  6. No campo Ligar à base de dados, introduza o nome da base de dados não pertencente ao sistema que pretende configurar.

  7. Clique em Ligar. Conclua o processo de início de sessão.

  8. No Object Explorer, expanda a pasta Databases.

  9. Clique com o botão direito do mouse em um banco de dados de usuários e selecione Nova consulta.

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

    Nota

    VMName no comando seguinte é o nome da VM em que ativou a identidade atribuída pelo sistema na secção de pré-requisitos.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    O comando deve ser concluído com êxito, ao criar o utilizador contido para a identidade atribuída pelo sistema da VM.

  11. Limpe a janela de consulta, introduza a seguinte linha e clique em Executar na barra de ferramentas:

    Nota

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

    Se você encontrar o erro "Principal VMName tem um nome de exibição duplicado", acrescente 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 utilizador contido a capacidade de ler a base de dados completa.

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

Aceder a dados

Esta seção mostra como obter um token de acesso usando a identidade gerenciada atribuída ao sistema da VM e usá-lo para chamar o Azure SQL. O SQL do Azure dá suporte nativo à autenticação do Microsoft Entra, portanto, ele pode aceitar diretamente 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.

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

Nota

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 precisar escrever e implantar um aplicativo na VM é usando o PowerShell.

  1. No portal, navegue para Máquinas Virtuais, aceda à sua máquina virtual do Windows e, em Descrição Geral, clique em Ligar.

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

  3. Agora que já criou uma Ligação ao Ambiente de Trabalho Remoto com a máquina virtual, abra o PowerShell na sessão remota.

  4. Através de Invoke-WebRequest do PowerShell, faça um pedido ao ponto final da identidade gerida local para obter um token de acesso para o SQL do 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 num 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 de 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 de 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 ver os resultados da consulta.

Desativar

Para desativar a identidade atribuída pelo sistema em sua VM, defina 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óximos passos

Neste tutorial, você aprendeu como 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, consulte: