Condividi tramite


Autenticare le app .NET ospitate in Azure nelle risorse di Azure usando un'identità gestita assegnata dall'utente

L'approccio consigliato per autenticare un'app ospitata in Azure in altre risorse di Azure consiste nell'usare un'identità gestita . Questo approccio è supportato per la maggior parte dei servizi di Azure, incluse le app ospitate nel servizio app di Azure, nelle app di Azure Container e nelle macchine virtuali di Azure. Altre informazioni sulle diverse tecniche e approcci di autenticazione sono disponibili nella pagina di panoramica dell'autenticazione . Nelle sezioni successive si apprenderà quanto descritto di seguito:

  • Concetti essenziali relativi all'identità gestita
  • Come creare un'identità gestita assegnata dall'utente per l'app
  • Come assegnare ruoli all'identità gestita assegnata dall'utente
  • Come eseguire l'autenticazione usando l'identità gestita assegnata dall'utente dal codice dell'app

Concetti essenziali relativi all'identità gestita

Un'identità gestita consente all'app di connettersi in modo sicuro ad altre risorse di Azure senza usare chiavi segrete o altri segreti dell'applicazione. Internamente, Azure tiene traccia dell'identità e delle 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.

Esistono due tipi di identità gestite da considerare durante la configurazione dell'app ospitata:

  • le identità gestite assegnate al sistema sono abilitate direttamente su una risorsa di Azure e sono legate al suo ciclo di vita. Quando la risorsa viene eliminata, Azure elimina automaticamente l'identità per te. Le identità assegnate dal sistema offrono un approccio minimalista all'uso delle identità gestite.
  • le identità gestite assegnate dall'utente vengono create come risorse di Azure autonome e offrono maggiore flessibilità e funzionalità. Sono ideali per soluzioni che coinvolgono più risorse di Azure che devono condividere la stessa identità e le stesse autorizzazioni. Ad esempio, se più macchine virtuali devono accedere allo stesso set di risorse di Azure, un'identità gestita assegnata dall'utente offre la riutilizzabilità e la gestione ottimizzata.

Suggerimento

Altre informazioni sulla selezione e sulla gestione delle identità gestite assegnate dal sistema e delle identità gestite assegnate dall'utente sono disponibili nell'articolo raccomandazioni sulle procedure consigliate per l'identità gestita.

Le sezioni precedenti descrivono i passaggi per abilitare e usare un'identità gestita assegnata dall'utente per un'app ospitata in Azure. Se è necessario usare un'identità gestita assegnata dall'utente, vedere l'articolo identità gestite assegnate dal sistema per altre informazioni.

Creare un'identità gestita assegnata dall'utente

Le identità gestite assegnate dall'utente vengono create come risorse autonome nella sottoscrizione di Azure usando il portale di Azure o l'interfaccia della riga di comando di Azure. I comandi dell'interfaccia della riga di comando di Azure possono essere eseguiti nel di Azure Cloud Shell o in una workstation con l'interfaccia della riga di comando di Azure installata.

  1. Nel portale di Azure, immettere identità gestite nella barra di ricerca principale e selezionare il risultato corrispondente nella sezione Servizi.

  2. Nella pagina Identità gestite selezionare + Crea.

    Screenshot che mostra la pagina per gestire le identità gestite assegnate dall'utente.

  3. Nella pagina Crea identità gestita assegnata dall'utente selezionare una sottoscrizione, un gruppo di risorse e un'area per l'identità gestita assegnata dall'utente e quindi specificare un nome.

  4. Seleziona Rivedi e crea per esaminare e convalidare i dati.

    Screenshot che mostra il modulo per creare un'identità gestita assegnata dall'utente.

  5. Selezionare Crea per creare l'identità gestita assegnata dall'utente.

  6. Dopo aver creato l'identità, selezionare Vai alla risorsa.

  7. Nella pagina panoramica della nuova identità, copiare il valore ID client da utilizzare successivamente per configurare il codice dell'applicazione.

Assegna l'identità gestita all'applicazione

Un'identità gestita assegnata dall'utente può essere associata a una o più risorse di Azure. Tutte le risorse che usano tale identità ottengono le autorizzazioni applicate tramite i ruoli dell'identità.

  1. Nel portale di Azure passare alla risorsa che ospita il codice dell'app, ad esempio un servizio app di Azure o un'istanza dell'app Azure Container.

  2. Nella pagina panoramica della risorsa, espandere Impostazioni e selezionare Identità nel riquadro di navigazione.

  3. Nella pagina Identità , passare alla scheda Assegnata dall'utente .

  4. Selezionare + Aggiungi per aprire il pannello Aggiungi identità gestita assegnata dall'utente.

  5. Nel pannello Aggiungi identità gestita assegnata dall'utente, usa il menu a discesa Sottoscrizione per filtrare i risultati della ricerca per le tue identità. Usa la casella di ricerca per individuare l'identità gestita assegnata dall'utente, che hai abilitato per la risorsa di Azure che ospita la tua app.

  6. Selezionare l'identità e scegliere Aggiungi nella parte inferiore del pannello per continuare.

    Screenshot che mostra come associare un'identità gestita assegnata dall'utente a un'app.

Assegnare ruoli all'identità gestita

Successivamente, determinare i ruoli necessari per l'app e assegnare tali ruoli all'identità gestita. È possibile assegnare ruoli a un'identità gestita negli ambiti seguenti:

  • risorsa: i ruoli assegnati si applicano solo a tale risorsa specifica.
  • gruppo di risorse: i ruoli assegnati si applicano a tutte le risorse contenute nel gruppo di risorse.
  • sottoscrizione: i ruoli assegnati si applicano a tutte le risorse contenute nella sottoscrizione.

L'esempio seguente illustra come assegnare ruoli nell'ambito del gruppo di risorse, poiché molte app gestiscono tutte le risorse di Azure correlate usando un singolo gruppo di risorse.

  1. Passare alla pagina panoramica del gruppo di risorse che contiene l'app con l'identità gestita assegnata dall'utente.

  2. Selezionare controllo di accesso (IAM) nella barra di navigazione a sinistra.

  3. Nella pagina di controllo di accesso (IAM) , selezionare + Aggiungi dal menu principale in alto, quindi scegliere Aggiungi assegnazione di ruolo per andare alla pagina Aggiungi assegnazione di ruolo.

    Screenshot che mostra come accedere alla pagina di assegnazione dei ruoli di identità.

  4. La pagina Aggiungi assegnazione di ruolo presenta un flusso di lavoro a schede e a più fasi per assegnare ruoli alle identità. Nella scheda iniziale Ruolo, usa la casella di ricerca in alto per individuare il ruolo da assegnare all'identità.

  5. Selezionare il ruolo nei risultati e quindi scegliere Avanti per passare alla scheda Membri.

  6. Per l'opzione Assegna accesso a, selezionare identità gestita.

  7. Per l'opzione Membri, scegliere + Seleziona membri per aprire il pannello Seleziona identità gestite.

  8. Nel pannello Seleziona identità gestite, usa gli elenchi a discesa Sottoscrizione e Identità gestita per filtrare i risultati della ricerca per le tue identità. Usa la casella di ricerca Seleziona per individuare l'identità gestita assegnata dall'utente che hai abilitato per la risorsa di Azure che ospita la tua app.

    Screenshot che mostra il processo di assegnazione dell'identità gestita.

  9. Selezionare l'identità e scegliere Selezionare nella parte inferiore del pannello per continuare.

  10. Seleziona Rivedi + assegna nella parte inferiore della pagina.

  11. Nella scheda finale Rivedi e assegna, selezionare Rivedi e assegna per completare il flusso di lavoro.

Eseguire l'autenticazione ai servizi di Azure dall'app

La libreria di identità di Azure fornisce varie credenziali, che sono implementazioni di TokenCredential adattate al supporto di diversi scenari e flussi di autenticazione di Microsoft Entra. Poiché l'identità gestita non è disponibile durante l'esecuzione in locale, i passaggi successivi illustrano quali credenziali usare in quale scenario:

  • ambiente di sviluppo locale: durante lo sviluppo locale solo, usare una classe denominata DefaultAzureCredential per una catena di credenziali preconfigurata e con opinioni. DefaultAzureCredential individua le credenziali utente dagli strumenti locali o dall'IDE, ad esempio l'interfaccia della riga di comando di Azure o Visual Studio. Offre inoltre flessibilità e praticità per i tentativi, i tempi di attesa per le risposte e il supporto per più opzioni di autenticazione. Per altre informazioni, vedere l'articolo Eseguire l'autenticazione ai servizi di Azure durante lo sviluppo locale.
  • app ospitate in Azure: quando l'app è in esecuzione in Azure, usare ManagedIdentityCredential per individuare in modo sicuro l'identità gestita configurata per l'app. La specifica di questo tipo esatto di credenziali impedisce che altre credenziali disponibili vengano prelevate in modo imprevisto.

Implementare il codice

Aggiungere il pacchetto Azure.Identity. In un progetto ASP.NET Core installare anche il pacchetto Microsoft.Extensions.Azure:

In un terminale di propria scelta passare alla directory del progetto dell'applicazione ed eseguire i comandi seguenti:

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

È possibile accedere ai servizi di Azure usando classi client specializzate dalle varie librerie client di Azure SDK. Queste classi e i tuoi servizi personalizzati devono essere registrati per l'iniezione delle dipendenze in modo che possano essere usati in tutta l'applicazione. In Program.cs, completare i passaggi seguenti per configurare una classe client per l'iniezione delle dipendenze e l'autenticazione basata su token:

  1. Includere gli spazi dei nomi Azure.Identity e Microsoft.Extensions.Azure tramite direttive using.
  2. Registrare il client di servizio Azure usando il metodo di estensione con prefisso Addcorrispondente.
  3. Passare un'appropriata istanza di TokenCredential al metodo UseCredential:
    • Usare DefaultAzureCredential quando l'app è in esecuzione in locale
    • Usare ManagedIdentityCredential quando l'app è in esecuzione in Azure e configurare l'ID client, l'ID risorsa o l'ID oggetto.

L'ID client viene usato per identificare un'identità gestita durante la configurazione di applicazioni o servizi che devono eseguire l'autenticazione usando tale identità.

  1. Recuperare l'ID client assegnato a un'identità gestita assegnata dall'utente usando il comando seguente:

    az identity show \
        --resource-group <resource-group-name> \
        --name <identity-name> \
        --query 'clientId'
    
  2. Configurare ManagedIdentityCredential con l'ID client:

    builder.Services.AddAzureClients(clientBuilder =>
    {
        clientBuilder.AddBlobServiceClient(
            new Uri("https://<account-name>.blob.core.windows.net"));
    
        TokenCredential credential = null;
    
        if (builder.Environment.IsProduction() || builder.Environment.IsStaging())
        {
            // Managed identity token credential discovered when running in Azure environments
            credential = new ManagedIdentityCredential(
                ManagedIdentityId.FromUserAssignedClientId("<client-id>"));
        } 
        else 
        {
            // Running locally on dev machine - DO NOT use in production or outside of local dev
            credential = new DefaultAzureCredential();
        }
    
        clientBuilder.UseCredential(credential);
    });
    

    Un'alternativa al metodo UseCredential consiste nel fornire direttamente le credenziali al client del servizio:

    TokenCredential credential = null;
    
    if (builder.Environment.IsProduction() || builder.Environment.IsStaging())
    {
        // Managed identity token credential discovered when running in Azure environments
        credential = new ManagedIdentityCredential(
            ManagedIdentityId.FromUserAssignedClientId("<client-id>"));
    }
    else
    {
        // Running locally on dev machine - DO NOT use in production or outside of local dev
        credential = new DefaultAzureCredential();
    }
    
    builder.Services.AddSingleton<BlobServiceClient>(_ =>
        new BlobServiceClient(
            new Uri("https://<account-name>.blob.core.windows.net"), credential));
    

Il codice precedente si comporta in modo diverso a seconda dell'ambiente in cui è in esecuzione:

  • Nella workstation di sviluppo locale DefaultAzureCredential cerca nelle variabili di ambiente un'entità servizio dell'applicazione o in strumenti di sviluppo installati localmente, ad esempio Visual Studio, per un set di credenziali per sviluppatori.
  • Quando viene distribuita in Azure, ManagedIdentityCredential individua automaticamente le configurazioni delle identità gestite per l'autenticazione ad altri servizi.