Esercitazione: Usare un'identità gestita assegnata dal sistema per una macchina virtuale Windows per accedere ad Azure SQL

Questa esercitazione illustra come usare un'identità assegnata dal sistema per una macchina virtuale Windows per accedere al database SQL di Azure. Le identità del servizio gestito vengono gestite automaticamente da Azure e consentono di eseguire l'autenticazione ai servizi che supportano l'autenticazione di Microsoft Entra, senza dover inserire le credenziali nel codice. Scopri come:

  • Concedere l'accesso della macchina virtuale al database SQL di Azure
  • Abilitare l'autenticazione di Microsoft Entra
  • Creare un utente indipendente nel database che rappresenta l'identità assegnata dal sistema della macchina virtuale
  • Ottenere un token di accesso usando l'identità della macchina virtuale e usarlo per eseguire query sul database SQL di Azure

Prerequisiti

  • Se non si ha familiarità con la funzionalità delle identità gestite per le risorse di Azure, vedere questa panoramica.
  • Se non si ha un account Azure, registrarsi per ottenere un account gratuito prima di continuare.
  • Per eseguire le attività richieste di creazione delle risorse e gestione dei ruoli, l'account deve disporre delle autorizzazioni "Proprietario" nell'ambito appropriato (sottoscrizione o gruppo di risorse). Se è necessaria assistenza per l'assegnazione di ruolo, vedere Assegnare i ruoli di Azure per gestire l'accesso alle risorse della sottoscrizione di Azure.

Abilitazione

L'abilitazione di un'identità gestita assegnata dal sistema si esegue con un semplice clic del mouse. È possibile abilitarla durante la creazione di una macchina virtuale o nelle proprietà di una VM esistente.

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

Per abilitare l'identità gestita assegnata dal sistema in una nuova VM:

  1. Accedere al portale di Azure

  2. Creare una macchina virtuale con l'identità assegnata dal sistema abilitata

Concedi accesso

Per concedere alla macchina virtuale l'accesso a un database nel database SQL di Azure, è possibile usare un server SQL logico esistente o crearne uno nuovo. Per creare un nuovo server e un database tramite il portale di Azure, seguire questa Guida rapida di SQL di Azure. Nella documentazione di SQL di Azure sono disponibili anche guide rapide che usano l'interfaccia della riga di comando di Azure e Azure PowerShell.

Per concedere alla macchina virtuale l'accesso a un database sono necessari due passaggi:

  1. Abilitare l'autenticazione Di Microsoft Entra per il server.
  2. Creare un utente indipendente nel database che rappresenta l'identità assegnata dal sistema della macchina virtuale.

Abilitare l'autenticazione di Microsoft Entra

Per configurare l'autenticazione di Microsoft Entra:

  1. Nel portale di Azure selezionare i server SQL dal menu a sinistra.
  2. Selezionare il server SQL da abilitare per l'autenticazione di Microsoft Entra.
  3. Nella sezione Impostazioni del pannello fare clic su Amministratore di Active Directory.
  4. Nella barra dei comandi fare clic su Imposta amministratore.
  5. Selezionare un account utente di Microsoft Entra da impostare come amministratore del server e fare clic su Seleziona.
  6. Nella barra dei comandi fare clic su Salva.

Creare un utente indipendente

Questa sezione illustra come creare un utente indipendente nel database che rappresenta l'identità assegnata dal sistema della macchina virtuale. Per questo passaggio è necessario Microsoft SQL Server Management Studio (SSMS). Prima di iniziare, può anche essere utile esaminare gli articoli seguenti per informazioni generali sull'integrazione di Microsoft Entra:

Il database SQL richiede nomi visualizzati univoci di Microsoft Entra ID. A questo scopo, gli account Microsoft Entra, ad esempio utenti, gruppi e entità servizio (applicazioni) e i nomi delle macchine virtuali abilitati per l'identità gestita devono essere definiti in modo univoco in Microsoft Entra ID in relazione ai nomi visualizzati. Il database SQL controlla il nome visualizzato di Microsoft Entra ID durante la creazione T-SQL di tali utenti e, se non è univoco, il comando non riesce a richiedere di fornire un nome visualizzato univoco dell'ID Entra di Microsoft per un determinato account.

Per creare un utente indipendente:

  1. Avvia SQL Server Management Studio.

  2. Nella finestra di dialogo Connetti al server immettere il nome del server nel campo Nome server.

  3. Nel campo Autenticazione selezionare Active Directory - Universale con supporto MFA.

  4. Nel campo Nome utente immettere il nome dell'account Microsoft Entra impostato come amministratore del server, ad esempiohelen@woodgroveonline.com

  5. Fare clic su Opzioni.

  6. Nel campo Connetti a database immettere il nome del database esterno al sistema che si desidera configurare.

  7. Fare clic su Connetti. Completare il processo di accesso.

  8. In Esplora oggetti espandere la cartella Database.

  9. Fare clic con il pulsante destro del mouse su un database utente e scegliere Nuova query.

  10. Nella finestra della query immettere la riga seguente e fare clic su Esegui nella barra degli strumenti:

    Nota

    VMName nel comando seguente è il nome della macchina virtuale su cui è stata abilitata l'identità assegnata dal sistema nella sezione Prerequisiti.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    Il comando dovrebbe completare l'operazione correttamente, creando l'utente indipendente per l'identità assegnata dal sistema della macchina virtuale.

  11. Cancellare la finestra di query, immettere la riga seguente e fare clic su Esegui nella barra degli strumenti:

    Nota

    VMName nel comando seguente è il nome della macchina virtuale in cui è stata abilitata l'identità assegnata dal sistema nella sezione prerequisiti.

    Se viene visualizzato l'errore "Principal VMName ha un nome visualizzato duplicato", aggiungere l'istruzione CREATE U edizione Standard R con WITH OBJECT_ID='xxx'.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    Il comando dovrebbe completare l'operazione correttamente, concedendo all'utente indipendente la possibilità di leggere tutto il database.

Il codice in esecuzione nella macchina virtuale può ora ottenere un token tramite l'identità gestita assegnata dal sistema e usarlo per l'autenticazione al server.

Accedere ai dati

Questa sezione illustra come ottenere un token di accesso usando l'identità gestita assegnata dal sistema della macchina virtuale e usarlo per chiamare Azure SQL. SQL di Azure supporta in modo nativo l'autenticazione Di Microsoft Entra, in modo che possa accettare direttamente i token di accesso ottenuti usando le identità gestite per le risorse di Azure. Questo metodo non richiede l'inserimento delle credenziali nel stringa di connessione.

Di seguito è riportato un esempio di codice .NET per aprire una connessione a SQL usando l'autenticazione dell'identità gestita di Active Directory. Questo codice deve essere eseguito nella macchina virtuale per poter accedere all'endpoint dell'identità gestita assegnata dal sistema della macchina virtuale. Per usare questo metodo è necessario .NET Framework 4.6.2 o versione successiva o successiva o .NET Core 3.1 . Sostituire i valori di AZURE-SQL-edizione Standard RVERNAME e DATABA edizione Standard di conseguenza e aggiungere un riferimento NuGet alla libreria 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

È possibile usare le identità gestite mentre si usano altre opzioni di programmazione usando gli SDK.

In alternativa, un modo rapido per testare la configurazione end-to-end senza dover scrivere e distribuire un'app nella macchina virtuale usa PowerShell.

  1. Nel portale passare a Macchine virtuali, selezionare la macchina virtuale Windows e in Panoramica fare clic su Connetti.

  2. Immettere le credenziali di amministratore della macchina virtuale aggiunte al momento della creazione della macchina virtuale Windows.

  3. Ora che si è creata una connessione Desktop remoto con la macchina virtuale, aprire PowerShell nella sessione remota.

  4. Usando Invoke-WebRequest di PowerShell, eseguire una richiesta all'endpoint locale dell'identità gestita per ottenere un token di accesso per 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"}
    

    Convertire la risposta da un oggetto JSON a un oggetto di PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Estrarre il token di accesso dalla risposta.

    $AccessToken = $content.access_token
    
  5. Aprire una connessione al server. Ricordarsi di sostituire i valori di 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()
    

    Creare quindi e inviare una query al server. Ricordarsi di sostituire il valore per TABELLA.

    $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)
    

Esaminare il valore di $DataSet.Tables[0] per visualizzare i risultati della query.

Disabilita

Per disabilitare l'identità assegnata dal sistema nella VM, impostare il relativo stato su Disattivato.

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

Passaggi successivi

In questa esercitazione si è appreso come usare un'identità gestita assegnata dal sistema per accedere al database SQL di Azure. Per altre informazioni sul database SQL di Azure, vedere: