Autenticazione di app ospitate in Azure in risorse di Azure con Azure SDK per .NET

Quando un'app è ospitata in Azure usando un servizio come Servizio app di Azure, Macchine virtuali di Azure o Istanze di Azure Container, l'approccio consigliato per autenticare un'app nelle risorse di Azure consiste nell'usare un'identità gestita.

Un'identità gestita fornisce un'identità per l'app in modo che possa connettersi ad altre risorse di Azure senza la necessità di usare una chiave privata o un altro segreto dell'applicazione. Internamente, Azure conosce l'identità dell'app e le risorse a cui è consentito connettersi. Azure usa queste informazioni per ottenere automaticamente i token di Microsoft Entra per consentire all'app di connettersi ad altre risorse di Azure, senza dover gestire i segreti dell'applicazione.

Tipi di identità gestita

Sono disponibili due tipi di identità gestite:

  • Identità gestite assegnate dal sistema: questo tipo di identità gestita viene fornito da una risorsa di Azure e associato direttamente alla stessa. Quando si abilita l'identità gestita in una risorsa di Azure, si ottiene un'identità gestita assegnata dal sistema per tale risorsa. Un'identità gestita assegnata dal sistema è associata al ciclo di vita della risorsa di Azure a cui è associata. Quando la risorsa viene eliminata, Azure elimina automaticamente anche l'identità. Poiché è sufficiente abilitare l'identità gestita per la risorsa di Azure che ospita il codice, questo è il tipo di identità gestita più semplice da usare.
  • Identità gestite assegnate dall'utente: è anche possibile creare un'identità gestita come risorsa di Azure autonoma. Questo approccio viene usato più frequentemente quando la soluzione ha più carichi di lavoro eseguiti in più risorse di Azure che devono tutti condividere la stessa identità e le stesse autorizzazioni. Ad esempio, se la soluzione include componenti eseguiti in più istanze di Servizio app e macchina virtuale che necessitano tutte dell'accesso allo stesso set di risorse di Azure, la creazione e l'uso di un'identità gestita assegnata dall'utente per tali risorse sarebbe la scelta più opportuna.

Questo articolo illustra i passaggi per abilitare e usare un'identità gestita assegnata dal sistema per un'app. Se è necessario usare un'identità gestita assegnata dall'utente, vedere l'articolo Gestire le identità gestite assegnate dall'utente per informazioni su come creare un'identità gestita assegnata dall'utente.

1 - Abilitare l'identità gestita nella risorsa di Azure che ospita l'app

Il primo passaggio consiste nell'abilitare l'identità gestita nella risorsa di Azure che ospita l'app. Ad esempio, se si ospita un'applicazione .NET che usa Servizio app di Azure, è necessario abilitare l'identità gestita per l'app Web Servizio app che ospita l'app. Se si usa una macchina virtuale per ospitare l'app, è necessario abilitare la macchina virtuale all'uso dell'identità gestita.

È possibile abilitare l'uso dell'identità gestita per una risorsa di Azure usando il portale di Azure o l'interfaccia della riga di comando di Azure.

Istruzioni Schermata
Passare alla risorsa che ospita il codice dell'applicazione nel portale di Azure.

Ad esempio, è possibile digitare il nome della risorsa nella casella di ricerca nella parte superiore della pagina e accedervi selezionandola nella finestra di dialogo.
A screenshot showing how to use the top search bar in the Azure portal to locate and navigate to a resource in Azure.
Nella pagina della risorsa selezionare la voce di menu Identità nel menu a sinistra.

Tutte le risorse di Azure in grado di supportare l'identità gestita avranno una voce di menu Identità anche se il layout del menu può variare leggermente.
A screenshot showing the location of the Identity menu item in the left-hand menu for an Azure resource.
Nella pagina Identità:
  1. Modificare il dispositivo di scorrimento Stato impostandolo su ON.
  2. Fare clic su Salva.
Una finestra di dialogo di conferma verificherà se si vuole abilitare l'identità gestita per il servizio. Se si risponde , l'identità gestita verrà abilitata per la risorsa di Azure.
A screenshot showing how to enable managed identity for an Azure resource on the resource's Identity page.

2 - Assegnare ruoli all'identità gestita

Come passaggio successivo occorre determinare i ruoli (autorizzazioni) necessari per l'app e assegnare l'identità gestita a tali ruoli in Azure. A un'identità gestita è possibile assegnare ruoli a livello di risorsa, gruppo di risorse o sottoscrizione. Questo esempio illustra come assegnare i ruoli a livello di gruppo di risorse perché la maggior parte delle applicazioni raggruppa tutte le risorse di Azure in un unico gruppo di risorse.

Istruzioni Schermata
Individuare il gruppo di risorse per l'applicazione cercando il nome del gruppo di risorse usando la casella di ricerca nella parte superiore del portale di Azure.

Passare al gruppo di risorse selezionando il nome del gruppo di risorse nell'intestazione Gruppi di risorse della finestra di dialogo.
A screenshot showing how to use the top search bar in the Azure portal to locate and navigate to a resource group in Azure. This is the resource group that you'll assign roles (permissions) to.
Nella pagina del gruppo di risorse selezionare Controllo di accesso (IAM) nel menu a sinistra. A screenshot showing the location of the Access control (IAM) menu item in the left-hand menu of an Azure resource group.
Nella pagina Controllo di accesso (IAM):
  1. Selezionare la scheda Assegnazioni di ruolo.
  2. Selezionare + Aggiungi nel menu in alto e quindi Aggiungi assegnazione di ruolo nel menu a discesa risultante.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
Nella pagina Aggiungi assegnazione di ruolo sono elencati tutti i ruoli che è possibile assegnare per il gruppo di risorse.
  1. Usare la casella di ricerca per filtrare l'elenco in modo da renderlo più gestibile. Questo esempio illustra come filtrare i ruoli di BLOB del servizio di archiviazione.
  2. Selezionare il ruolo che si vuole assegnare.
Selezionare Avanti per passare alla schermata successiva.
A screenshot showing how to filter and select role assignments to be added to the resource group.
La pagina Aggiungi assegnazione di ruolo successiva consente di specificare a quale utente assegnare il ruolo.
  1. Selezionare Identità gestita in Assegnare l'accesso a.
  2. Selezionare + Selezionare membri in Membri.
Verrà aperta una finestra di dialogo sul lato destro del portale di Azure.
A screenshot showing how to select managed identity as the type of user you want to assign the role (permission) on the add role assignments page.
Nella finestra di dialogo Selezionare le identità gestite:
  1. È possibile usare l'elenco a discesa Identità gestita e la casella di testo Selezionare per filtrare l'elenco delle identità gestite nella sottoscrizione. In questo esempio selezionando Servizio app vengono visualizzate solo le identità gestite associate a un Servizio app.
  2. Selezionare l'identità gestita per la risorsa di Azure che ospita l'applicazione.
Selezionare Seleziona nella parte inferiore della finestra di dialogo per continuare.
A screenshot showing how to use the select managed identities dialog to filter and select the managed identity to assign the role to.
L'identità gestita verrà ora visualizzata come selezionata nella schermata Aggiungi assegnazione di ruolo.

Selezionare Rivedi e assegna per passare alla pagina finale e quindi Rivedi e assegna di nuovo per completare il processo.
A screenshot of the final add role assignment screen where a user needs to select the Review + Assign button to finalize the role assignment.

3 - Implementare DefaultAzureCredential nell'applicazione

DefaultAzureCredential supporta più metodi di autenticazione e determina il metodo di autenticazione usato in fase di esecuzione. In questo modo, l'app può usare metodi di autenticazione diversi in ambienti diversi senza implementare codice specifico dell'ambiente.

L'ordine e le posizioni in cui DefaultAzureCredential cerca le credenziali sono disponibili in DefaultAzureCredential.

Per implementare DefaultAzureCredential, aggiungere prima di tutto il pacchetto Azure.Identity e facoltativamente i pacchetti Microsoft.Extensions.Azure all'applicazione. A tale scopo, è possibile usare la riga di comando o Gestione pacchetti NuGet.

Aprire l'ambiente terminale desiderato nella directory del progetto dell'applicazione e immettere il comando seguente.

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

I servizi di Azure sono in genere accessibili usando le classi client corrispondenti dall'SDK. Queste classi e i propri servizi personalizzati devono essere registrati nel file Program.cs in modo da poter essere accessibili tramite l'inserimento delle dipendenze in tutta l'app. All'interno di Program.cs, seguire questa procedura per configurare correttamente il servizio e DefaultAzureCredential.

  1. Includere gli spazi dei nomi Azure.Identity e Microsoft.Extensions.Azure con un'istruzione using.
  2. Registrare il servizio di Azure usando i metodi helper pertinenti.
  3. Passare un'istanza dell'oggetto DefaultAzureCredential al metodo UseCredential.

Un esempio è illustrato nel segmento di codice seguente.

using Microsoft.Extensions.Azure;
using Azure.Identity;

// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
    x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
    x.UseCredential(new DefaultAzureCredential());
});

In alternativa, è anche possibile usare DefaultAzureCredential nei servizi più direttamente senza l'aiuto di altri metodi di registrazione di Azure, come illustrato di seguito.

using Azure.Identity;

// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x => 
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Quando il codice precedente viene eseguito nella workstation locale durante lo sviluppo locale, cercherà nelle variabili di ambiente un'entità servizio dell'applicazione o in Visual Studio, VS Code, nell'interfaccia della riga di comando di Azure o in Azure PowerShell un set di credenziali per sviluppatori, che possono essere usate per autenticare l'app nelle risorse di Azure durante lo sviluppo locale.

Quando distribuito in Azure, lo stesso codice può anche autenticare l'app in altre risorse di Azure. DefaultAzureCredential può recuperare automaticamente le impostazioni dell'ambiente e le configurazioni dell'identità gestita per l'autenticazione automatica in altri servizi.