Condividi tramite


Esercitazione: Usare l'identità gestita per connettere un'app Web di Azure a un database SQL di Azure senza segreti

Azure App Service offre un servizio di hosting web a scalabilità elevata e con auto-aggiornamento in Azure. Il servizio app fornisce anche un'identità gestita per l'app, una soluzione chiavi in mano per proteggere l'accesso ad Azure SQL e ad altri servizi di Azure. Le identità gestite nel servizio app rendono l'app più sicura eliminando i segreti, ad esempio le credenziali nelle stringhe di connessione.

Questa esercitazione illustra come aggiungere un'identità gestita a un'app .NET di esempio con back-end SQL di Azure. Al termine, l'app può connettersi al database SQL di Azure in modo sicuro senza la necessità di un nome utente e una password.

Diagramma dell'architettura per lo scenario di esercitazione.

In questa esercitazione, farai:

  • Abilitare le identità gestite.
  • Concedere al database SQL di Azure l'accesso all'identità gestita.
  • Configurare Entity Framework per l'uso dell'autenticazione di Microsoft Entra con il database SQL.
  • Connettersi al database SQL da Visual Studio usando l'autenticazione Microsoft Entra.

Per indicazioni sull'uso di Database di Azure per MySQL o Database di Azure per PostgreSQL in framework Node.js, Python e Java, vedere Esercitazione: Connettersi ai database di Azure dal servizio app senza segreti usando un'identità gestita.

Note

Prerequisiti

Concedere all'amministratore del database l'accesso a un utente di Microsoft Entra

Abilitare l'autenticazione di Microsoft Entra nel database SQL di Azure assegnando un utente Microsoft Entra come amministratore del server SQL di Azure. L'amministratore di Microsoft Entra deve essere un utente che viene creato, importato, sincronizzato o invitato in Microsoft Entra ID. Questo utente potrebbe non corrispondere all'utente dell'account Microsoft per la sottoscrizione di Azure.

Eseguire i comandi seguenti nell'ambiente Bash di Azure Cloud Shell o dopo l'accesso all'interfaccia della riga di comando di Azure in locale.

  1. Utilizzare az ad user list con il display-name, filter o upn parametro per ottenere l'ID oggetto per l'utente di Microsoft Entra ID che si desidera rendere amministratore. Eseguire az ad user list autonomamente per visualizzare le informazioni per tutti gli utenti nella directory Microsoft Entra.

    Ad esempio, il comando seguente elenca le informazioni per un utente di Microsoft Entra ID con display-name di FirstName LastName.

    az ad user list --display-name "Firstname Lastname"
    

    Ecco l'output di esempio:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Aggiungere l'utente Microsoft Entra ID come amministratore nel server SQL di Azure usando az sql server ad-admin create con il parametro object-id. Nel comando seguente, sostituire <server-name> con il nome del server meno il suffisso .database.windows.net e <entra-id> con il valore id dall'output del comando precedente az ad user list.

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    

Configurare la connettività dell'identità gestita per l'app

La procedura seguente consente di configurare l'app per connettersi al database SQL di Azure usando un'identità gestita assegnata dal sistema. Per usare un'identità assegnata dall'utente, vedere Esercitazione: Connettersi ai database di Azure dal servizio app senza segreti usando un'identità gestita.

Abilitare l'identità gestita per l'app

Per abilitare un'identità gestita per l'app di Azure, usare il comando az webapp identity assign , sostituendo <app-name> con il nome dell'app. Il nome di un'identità assegnata dal sistema è sempre uguale al nome dell'app.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Ecco un esempio di output:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Per abilitare l'identità gestita per uno slot di distribuzione, aggiungere --slot <slot-name> al comando precedente e usare il nome dello slot in <slot-name>. Il nome di un'identità assegnata dal sistema per uno slot di distribuzione è <app-name>/slots/<slot-name>.

È anche possibile aggiungere l'identità a un gruppo Microsoft Entra, quindi concedere al database SQL l'accesso al gruppo Microsoft Entra anziché all'identità. Per concedere le autorizzazioni per un gruppo di Microsoft Entra, usare il nome visualizzato del gruppo. I comandi seguenti aggiungono l'identità gestita di esempio a un nuovo gruppo denominato myAzureSQLDBAccessGroup.

$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Concedere autorizzazioni all'identità gestita

Concedere all'identità le autorizzazioni minime necessarie per l'app.

  1. Aprire una riga di comando di PowerShell e accedere al database SQL usando il comando SQLCMD seguente. Sostituire <server-name> con il nome del server, <db-name> con il nome del database e <admin-user> con il userPrincipalName dell'utente amministratore dall'output del comando az ad user list precedente.

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Seguire le istruzioni per accedere.

  2. Al prompt di SQL eseguire i comandi seguenti per concedere all'app le autorizzazioni minime necessarie per il database. Sostituire <identity-name> con il nome dell'identità gestita in Microsoft Entra ID, che corrisponde al nome dell'app.

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

Note

I servizi di gestione delle identità gestite back-end mantengono una cache dei token che aggiorna il token per una risorsa di destinazione solo alla scadenza. Se si tenta di modificare le autorizzazioni del database SQL dopo aver ottenuto un token con l'app, non si ottiene un nuovo token con autorizzazioni aggiornate fino alla scadenza del token memorizzato nella cache.

Rimuovere la stringa di connessione originale

Tutte le modifiche apportate in web.config o appsettings.json funzionano con l'identità gestita. È possibile rimuovere la stringa di connessione originale usata durante la distribuzione dell'app la prima volta. Per eliminare la stringa di connessione, eseguire il comando seguente dell'interfaccia della riga di comando di Azure, sostituendo <app-name> con il nome dell'app e <connection-string-name> con il nome della stringa di connessione.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names <connection-string-name>

Configurare l'ambiente di sviluppo

Configurare l'ambiente di sviluppo scelto e accedere ad Azure. Per altre informazioni sulla configurazione dell'ambiente di sviluppo per l'autenticazione di Microsoft Entra, vedere Libreria client di Azure Identity per .NET.

Visual Studio per Windows è integrato con l'autenticazione di Microsoft Entra.

  1. Per abilitare lo sviluppo e il debug in Visual Studio, aggiungere l'utente Microsoft Entra in Visual Studio selezionandoImpostazioni account> dal menu in alto e quindi selezionare Accedi o Aggiungi.
  2. Per impostare l'utente di Microsoft Entra per l'autenticazione del servizio di Azure, selezionare Strumenti>Opzioni dal menu in alto e quindi selezionareSelezione account> servizio di Azure. Selezionare l'utente di Microsoft Entra aggiunto, quindi selezionare OK.

Modificare il progetto e pubblicare l'app

L'app Web supportata dal database SQL di Azure usa un contesto di database per connettersi al database. Per usare l'autenticazione di Microsoft Entra per lavorare con l'app, è necessario aggiornare il contesto del database per fare riferimento al provider SQL Server di Entity Framework, che dipende dal provider di ADO.NET Microsoft.Data.SqlClient moderno.

Il provider Entity Framework sostituisce il provider SQL Server predefinito System.Data.SqlClient e include il supporto per i metodi di autenticazione di Microsoft Entra ID. Per altre informazioni, vedere Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] funziona localmente per usare Microsoft.Data.SqlClient per il contesto del database, ma poiché System.Data.SqlClient è codificato staticamente come provider nel Servizio App di Azure, è necessario estendere MicrosoftSqlDbConfiguration reindirizzando i riferimenti a System.Data.SqlClient verso Microsoft.Data.SqlClient. I passaggi variano a seconda che si disponga di un'app ASP.NET o ASP.NET Core.

Un'app ASP.NET Core usa Entity Framework Core per impostazione predefinita.

  1. Nella console di Gestione pacchetti di Visual Studio aggiungere il pacchetto NuGet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. In appsettings.jsonsostituire il valore della stringa di connessione con il codice seguente, sostituendo <server-name e <database-name> con il nome del server e il nome del database.

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Note

    È possibile usare l'autenticazione predefinita di Active Directory sia nel computer locale che nel servizio app di Azure. Il driver può acquisire un token dall'ID Microsoft Entra in diversi modi.

    Se l'app viene distribuita, il driver ottiene un token dall'identità gestita assegnata dal sistema dell'app. Il driver può anche eseguire l'autenticazione con un'identità gestita assegnata dall'utente se si include User Id=<client-id-of-user-assigned-managed-identity>; nella stringa di connessione.

    La DefaultAzureCredential classe memorizza nella cache il token in memoria e lo recupera dall'ID Microsoft Entra prima della scadenza. Per aggiornare il token, non è necessario specificare codice personalizzato.

    Ora hai tutto quello che ti serve per connetterti al database SQL di Azure quando esegui il debug in Visual Studio. Il codice usa l'utente di Microsoft Entra configurato durante la configurazione dell'ambiente di sviluppo.

  3. Eseguire l'app. L'app CRUD nel browser si connette direttamente al database SQL di Azure usando l'autenticazione Microsoft Entra. Questa configurazione consente di eseguire migrazioni del database da Visual Studio.

  4. Pubblicare le modifiche usando i comandi Git seguenti:

    git commit -am "configure managed identity"
    git push azure main
    

Testare l'app

Quando nella nuova pagina Web viene visualizzato l'elenco attività, l'app si connette al database con l'identità gestita.

Screenshot che mostra l'app di Azure dopo Code First Migration.

È ora possibile modificare l'elenco di to-do.

Pulire le risorse

Nei passaggi precedenti sono state create risorse di Azure in un gruppo di risorse. Se si ritiene che queste risorse non saranno necessarie in futuro, eliminare il gruppo di risorse eseguendo questo comando in Cloud Shell:

az group delete --name myResourceGroup

L'esecuzione del comando può richiedere un minuto.