Come usare le identità gestite nel servizio app e in Funzioni di Azure

Nota

A partire dal 1° giugno 2024, tutte le app del servizio app appena create avranno la possibilità di generare un nome host predefinito univoco usando la convenzione di denominazione <app-name>-<random-hash>.<region>.azurewebsites.net. I nomi delle app esistenti rimarranno invariati.

Esempio: myapp-ds27dh7271aah175.westus-01.azurewebsites.net

Per altri dettagli, vedere Nome host predefinito univoco per la risorsa del servizio app.

Questo articolo illustra come creare un'identità gestita per le applicazioni del servizio app e di Funzioni di Azure e come usarla per accedere ad altre risorse.

Importante

Poiché le identità gestite non supportano gli scenari tra directory, se si esegue la migrazione dell'app tra sottoscrizioni o tenant non funzioneranno come previsto. Per ricreare le identità gestite dopo uno spostamento di questo tipo. vedere Le identità gestite saranno ricreate automaticamente se si sposta una sottoscrizione in un'altra directory? Per usare la nuova identità, anche le risorse a valle devono disporre di criteri di accesso aggiornati.

Nota

Le identità gestite non sono disponibili per le app distribuite in Azure Arc.

Un'identità gestita di Microsoft Entra ID consente all'app di accedere facilmente ad altre risorse protette da Microsoft Entra, come Azure Key Vault. L'identità viene gestita dalla piattaforma Azure e non è necessario eseguire il provisioning o ruotare alcun segreto. Per altre informazioni sulle identità gestite in Microsoft Entra ID, vedere Identità gestite per le risorse di Azure.

All'applicazione possono essere concessi due tipi di identità:

  • Un'identità assegnata dal sistema viene associata all'applicazione e viene eliminata in caso di eliminazione dell'app. A un'app può essere associata una sola identità assegnata dal sistema.
  • Un'identità assegnata dall'utente è una risorsa di Azure autonoma che può essere assegnata all'app. Un'app può avere più identità assegnate dall'utente e un'unica identità assegnata dall'utente può essere assegnata a più risorse di Azure, ad esempio due app del servizio app.

La configurazione dell'identità gestita è specifica dello slot. Per configurare un'identità gestita per uno slot di distribuzione nel portale, passare per prima cosa allo slot. Per trovare l'identità gestita per l'app Web o lo slot di distribuzione nel tenant di Microsoft Entra dal portale di Azure, cercarla direttamente dalla pagina Panoramica del tenant. In genere, il nome dello slot è simile a <app-name>/slots/<slot-name>.

Questo video illustra come usare le identità gestite per il servizio app.

I passaggi del video sono descritti anche nelle sezioni seguenti.

Aggiungere un'identità assegnata dal sistema

  1. Accedere alle impostazioni dell'app nel portale di Azure nel gruppo Impostazioni nel riquadro di spostamento a sinistra.

  2. Selezionare Identità.

  3. All'interno della scheda Assegnata dal sistema impostare Stato su Attivato. Fare clic su Salva.

    Screenshot che mostra dove impostare Stato su attivato e quindi selezionare Salva.

Aggiungere un'identità assegnata dall'utente

La creazione di un'app con un'identità assegnata dall'utente richiede la creazione dell'identità e quindi l'aggiunta dell'identificatore di risorsa corrispondente alla configurazione dell'app.

Sarà prima di tutto necessario creare una risorsa identità assegnata dall'utente.

  1. Seguire queste istruzioni per creare una risorsa identità gestita assegnata dall'utente.

  2. Nel riquadro di spostamento a sinistra per la pagina dell'app scorrere verso il basso fino al gruppo Impostazioni.

  3. Selezionare Identità.

  4. Selezionare Assegnata dall'utente>Aggiungi.

  5. Cercare l'identità creata in precedenza, selezionarla e selezionare Aggiungi.

    Identità gestita nel servizio app

    Dopo aver selezionato Aggiungi, l'app viene riavviata.

Configurare la risorsa di destinazione

Può essere necessario configurare la risorsa di destinazione per consentire l'accesso dall'app o dalla funzione. Ad esempio, se si richiede un token di accesso a Key Vault, è necessario aggiungere anche un criterio di accesso che include l'identità dell'app o della funzione. In caso contrario, le chiamate a Key Vault verranno rifiutate, anche se si usa un token valido. Lo stesso vale per il database SQL di Azure. Per altre informazioni sulle risorse che supportano i token di Microsoft Entra, vedere Servizi di Azure che supportano l'autenticazione di Microsoft Entra.

Importante

I servizi back-end per le identità gestite conservano una cache per ogni URI di risorsa per circa 24 ore. Ciò significa che possono essere necessarie diverse ore per rendere effettive le modifiche apportate al gruppo o all'appartenenza ai ruoli di un'identità gestita. Attualmente non è possibile forzare l'aggiornamento del token di un'identità gestita prima della scadenza. Se si modifica il gruppo o l'appartenenza a un ruolo di un'identità gestita per aggiungere o rimuovere le autorizzazioni, potrebbe quindi essere necessario attendere diverse ore prima che la risorsa di Azure usi l'identità per avere l'accesso corretto. Per le alternative ai gruppi o alle appartenenze ai ruoli, vedere Limitazione dell'uso di identità gestite per l'autorizzazione.

Connettersi ai servizi di Azure nel codice dell'app

Con la sua identità gestita, un'app può ottenere token per le risorse di Azure protette da Microsoft Entra ID, ad esempio il database SQL di Azure, Azure Key Vault e Archiviazione di Azure. Questi token rappresentano le applicazioni che accedono alla risorsa e non un utente specifico dell'applicazione.

Il servizio app e Funzioni di Azure forniscono un endpoint REST accessibile internamente per il recupero dei token. È possibile accedere all'endpoint REST dall'interno dell'app con una richiesta HTTP GET standard, che può essere implementata con un client HTTP generico in ogni linguaggio. Per .NET, JavaScript, Java e Python, la libreria client Azure Identity fornisce un'astrazione su questo endpoint REST e semplifica l'esperienza di sviluppo. Per la connessione ad altri servizi di Azure è sufficiente aggiungere un oggetto credenziali al client specifico del servizio.

Una richiesta HTTP GET non elaborata usa le due variabili di ambiente fornite e ha un aspetto simile all'esempio seguente:

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: <ip-address-:-port-in-IDENTITY_ENDPOINT>
X-IDENTITY-HEADER: <value-of-IDENTITY_HEADER>

E un esempio di risposta potrebbe apparire come segue:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "1586984735",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "00001111-aaaa-2222-bbbb-3333cccc4444"
}

Questa risposta è uguale alla risposta per la richiesta del token di accesso da servizio a servizio di Microsoft Entra. Per accedere a Key Vault, si aggiungerà quindi il valore di access_token a una connessione client con l'insieme di credenziali.

Per altre informazioni sull'endpoint REST, vedere riferimento all'endpoint REST.

Rimuovere un'identità

Quando si rimuove un'identità assegnata dal sistema, viene eliminata da Microsoft Entra ID. Anche le identità assegnate dal sistema vengono rimosse automaticamente da Microsoft Entra ID quando la risorsa app viene eliminata.

  1. Nel riquadro di spostamento a sinistra della pagina dell'app scorrere verso il basso fino al gruppo Impostazioni.

  2. Selezionare Identità. Seguire quindi i passaggi in base al tipo di identità:

    • Identità assegnata dal sistema: all'interno della scheda Assegnata dal sistema impostare Stato su Disattivato. Fare clic su Salva.
    • Identità assegnata dall'utente: selezionare la scheda Assegnata dall'utente, selezionare la casella di controllo relativa all'identità e selezionare Rimuovi. Seleziona per confermare.

Nota

È inoltre disponibile l'impostazione applicazione WEBSITE_DISABLE_MSI che, se attivata, disabilita il servizio token locale, L'identità non viene tuttavia disabilitata e negli strumenti continuerà a essere indicata come attivata o abilitata. Di conseguenza, l'uso di questa impostazione non è consigliato.

Riferimento all'endpoint REST

Un'app con un'identità gestita rende disponibile questo endpoint definendo due variabili di ambiente:

  • IDENTITY_ENDPOINT: URL del servizio token locale.
  • IDENTITY_HEADER: intestazione usata per mitigare gli attacchi SSRF (Server Side Request Forgery). Il valore viene ruotato dalla piattaforma.

IDENTITY_ENDPOINT è un URL locale da cui l'app può richiedere i token. Per ottenere un token per una risorsa, eseguire una richiesta HTTP GET a questo endpoint, includendo i parametri seguenti:

Nome parametro In Descrizione
resource Query URI della risorsa di Microsoft Entra per cui è necessario ottenere un token. Può trattarsi di uno dei servizi di Azure che supportano l'autenticazione di Microsoft Entra o di qualsiasi altro URI di risorsa.
api-version Query Versione dell'API del token da usare. Usare 2019-08-01.
X-IDENTITY-HEADER Intestazione Valore della variabile di ambiente IDENTITY_HEADER. Questa intestazione viene usata per mitigare gli attacchi SSRF (Server Side Request Forgery).
client_id Query (Facoltativo) ID client dell'identità assegnata dall'utente da usare. Non può essere usato in una richiesta che include principal_id, mi_res_id o object_id. Se vengono omessi tutti i parametri ID (client_id, principal_id, object_id e mi_res_id), viene usata l'identità assegnata dal sistema.
principal_id Query (Facoltativo) ID entità di sicurezza dell'identità assegnata dall'utente da usare. object_id è un alias che può essere usato in alternativa. Non può essere usato in una richiesta che include: client_id, mi_res_id oppure object_id. Se vengono omessi tutti i parametri ID (client_id, principal_id, object_id e mi_res_id), viene usata l'identità assegnata dal sistema.
mi_res_id Query (Facoltativo) ID delle risorsa Azure dell'identità assegnata dall'utente da usare. Non può essere usato in una richiesta che include principal_id, client_id o object_id. Se vengono omessi tutti i parametri ID (client_id, principal_id, object_id e mi_res_id), viene usata l'identità assegnata dal sistema.

Importante

Per ottenere i token per le identità assegnate dall'utente, è necessario includere una delle proprietà facoltative. In caso contrario, il servizio token tenterà di ottenere un token per un'identità assegnata dal sistema, che potrebbe o meno esistere.

Passaggi successivi