Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
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
L'ID Microsoft Entra e le identità gestite non sono supportate per SQL Server locale.
L'autenticazione di Microsoft Entra è diversa dall'autenticazione integrata di Windows in Active Directory (AD) Domain Services (DS) locale. Active Directory Domain Services e Microsoft Entra ID usano protocolli di autenticazione completamente diversi. Per altre informazioni, vedere la documentazione di Microsoft Entra Domain Services.
Prerequisiti
-
Se non si ha un account Azure, creare un account gratuito prima di iniziare.
Disporre di un’app di base del servizio App di Azure ASP.NET MVC o ASP.NET Core MVC di tipo create-read-update-delete (CRUD) che utilizza il database SQL di Azure con autenticazione SQL come back-end. I passaggi di questa esercitazione supportano le versioni .NET seguenti:
- .NET Framework 4.8 e versioni successive
- .NET 6.0 e versioni successive
Consentire la connessione client dal computer ad Azure, in modo da poter eseguire il debug dell'app nell'ambiente di sviluppo. È possibile aggiungere l'indirizzo IP client seguendo la procedura descritta in Gestire le regole del firewall IP a livello di server usando il portale di Azure.
Accedere ad Azure Cloud Shell o preparare l'ambiente per l'uso dell'interfaccia della riga di comando di Azure.
Utilizzare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Introduzione ad Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, considerare l'esecuzione dell'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l’interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Eseguire l'autenticazione ad Azure con l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare e gestire le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
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.
- Per altre informazioni sulla creazione di un utente di Microsoft Entra, vedere Aggiungere o eliminare utenti tramite Microsoft Entra ID.
- Per altre informazioni sugli utenti di Microsoft Entra consentiti per il database SQL, vedere Funzionalità e limitazioni di Microsoft Entra nel database SQL.
- Per altre informazioni sull'aggiunta di un amministratore di SQL Server di Azure, vedere Effettuare il provisioning di un amministratore di Microsoft Entra per il server.
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.
Utilizzare
az ad user listcon ildisplay-name,filteroupnparametro per ottenere l'ID oggetto per l'utente di Microsoft Entra ID che si desidera rendere amministratore. Eseguireaz ad user listautonomamente 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-namedi 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"Aggiungere l'utente Microsoft Entra ID come amministratore nel server SQL di Azure usando
az sql server ad-admin createcon il parametroobject-id. Nel comando seguente, sostituire<server-name>con il nome del server meno il suffisso.database.windows.nete<entra-id>con il valoreiddall'output del comando precedenteaz 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.
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 iluserPrincipalNamedell'utente amministratore dall'output del comandoaz ad user listprecedente.sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30Seguire le istruzioni per accedere.
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
- Visual Studio Code
- Interfaccia della riga di comando di Azure
- Azure PowerShell
Visual Studio per Windows è integrato con l'autenticazione di Microsoft Entra.
- 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.
- 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.
Nella console di Gestione pacchetti di Visual Studio aggiungere il pacchetto NuGet Microsoft.Data.SqlClient.
Install-Package Microsoft.Data.SqlClientIn appsettings.jsonsostituire il valore della stringa di connessione con il codice seguente, sostituendo
<server-namee<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
DefaultAzureCredentialclasse 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.
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.
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.
È 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.
Contenuti correlati
- Esercitazione: Usare un dominio personalizzato e un certificato gestito per proteggere l'app
- Esercitazione: Connettere un'app del servizio app al database SQL per conto dell'utente connesso
- Esercitazione: Connettersi ai database di Azure da Servizio app senza segreti usando un'identità gestita
- Esercitazione: Connettersi ai servizi di Azure che non supportano le identità gestite con Key Vault
- Esercitazione: Isolare le comunicazioni back-end con l'integrazione della rete virtuale