Come usare le identità gestite nel servizio app e in Funzioni di Azure
Articolo
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.
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.
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.
La proprietà tenantId identifica il tenant di Microsoft Entra a cui l'identità appartiene. La proprietà principalId è un identificatore univoco per la nuova identità dell'applicazione. In Microsoft Entra ID, l'entità servizio ha lo stesso nome assegnato all'istanza del servizio app o di Funzioni di Azure.
Se è necessario fare riferimento a queste proprietà in una fase successiva nel modello, è possibile farlo tramite la funzione di modelloreference() con il flag 'Full', come in questo esempio:
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.
Qualsiasi risorsa di tipo Microsoft.Web/sites può essere creata con un'identità includendo il blocco seguente nella definizione della risorsa, sostituendo <resource-id> con l'ID risorsa dell'identità desiderata:
Un'applicazione può avere contemporaneamente sia identità assegnate dal sistema che assegnate dall'utente. In questo caso, la proprietà type sarebbe SystemAssigned,UserAssigned
L'aggiunta del tipo assegnato dall'utente indica ad Azure di usare l'identità assegnata dall'utente specificata per l'applicazione.
Ad esempio, il modello di un'app Web potrebbe essere simile al codice JSON seguente:
Il valore principalId è un identificatore univoco per l'identità usata per l'amministrazione di Microsoft Entra. clientId è un identificatore univoco per la nuova identità dell'applicazione, che viene usato per specificare l'identità da usare durante le chiamate di runtime.
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.
Gli esempi collegati usano DefaultAzureCredential. È utile per la maggior parte degli scenari, perché lo stesso modello funziona in Azure (con le identità gestite) e nel computer locale (senza identità gestite).
Gli esempi collegati usano DefaultAzureCredential. È utile per la maggior parte degli scenari, perché lo stesso modello funziona in Azure (con le identità gestite) e nel computer locale (senza identità gestite).
Per altri esempi di codice della libreria client Azure Identity per JavaScript, vedere gli esempi di Azure Identity.
Gli esempi collegati usano DefaultAzureCredential. È utile per la maggior parte degli scenari, perché lo stesso modello funziona in Azure (con le identità gestite) e nel computer locale (senza identità gestite).
Gli esempi collegati usano DefaultAzureCredential. È utile per la maggior parte degli scenari, perché lo stesso modello funziona in Azure (con le identità gestite) e nel computer locale (senza identità gestite).
Per altri esempi di codice della libreria client Azure Identity per Java, vedere gli esempi di Azure Identity.
Usare lo script seguente per recuperare un token dall'endpoint locale specificando un URI di risorsa di un servizio di Azure:
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.
Nel riquadro di spostamento a sinistra della pagina dell'app scorrere verso il basso fino al gruppo Impostazioni.
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 Sì per confermare.
Per rimuovere l'identità assegnata dal sistema:
az webapp identity remove --name <app-name> --resource-group <group-name>
Per rimuovere una o più identità assegnate dall'utente:
Per rimuovere tutte le identità in Azure PowerShell (solo Funzioni di Azure):
# Update an existing function app to have IdentityType "None".
Update-AzFunctionApp -Name $functionAppName -ResourceGroupName $resourceGroupName -IdentityType None
Per rimuovere tutte le identità in un modello di Resource Manager:
"identity": {
"type": "None"
}
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:
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.
Illustrare le funzionalità di Microsoft Entra ID per modernizzare le soluzioni di identità, implementare soluzioni ibride e implementare la governance delle identità.