Condividi tramite


Usare le identità gestite per App Service e Azure Functions

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

Un'identità gestita da Microsoft Entra ID consente all'app di accedere facilmente ad altre risorse protette da Microsoft Entra, ad esempio Azure Key Vault. La piattaforma Azure gestisce l'identità, quindi non è necessario effettuare il provisioning o aggiornare i segreti. Per altre informazioni sulle identità gestite in Microsoft Entra ID, vedere Identità gestite per le risorse di Azure.

È possibile concedere due tipi di identità all'applicazione:

  • Un'identità assegnata dal sistema viene associata all'applicazione e viene eliminata in caso di eliminazione dell'app. Un'app può avere 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. Un'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, accedere innanzitutto 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.

Nota

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

Poiché le identità gestite non supportano scenari tra directory, non si comportano come previsto se l'app viene migrata tra sottoscrizioni o tenant. Per ricreare le identità gestite dopo tale spostamento, vedere Se si sposta una sottoscrizione in un'altra directory, le identità gestite verranno ricreate automaticamente. Per usare la nuova identità, anche le risorse a valle devono disporre di criteri di accesso aggiornati.

Prerequisiti

Per eseguire i passaggi descritti in questo articolo, è necessario disporre di un set minimo di autorizzazioni per le risorse di Azure. Le autorizzazioni specifiche necessarie variano in base allo scenario in uso. La tabella seguente riepiloga gli scenari più comuni:

Sceneggiatura Autorizzazione necessaria Ruoli predefiniti di esempio
Creare un'identità assegnata dal sistema Microsoft.Web/sites/write sull'app o Microsoft.Web/sites/slots/write sullo slot Collaboratore siti Web
Creare un'identità assegnata dall'utente Microsoft.ManagedIdentity/userAssignedIdentities/write nel gruppo di risorse in cui creare l'identità Managed Identity Contributor (Collaboratore per identità gestita)
Assegnare un'identità assegnata dall'utente all'app Microsoft.Web/sites/write sull'app, Microsoft.Web/sites/slots/write sullo slot o
Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action sull'identità
Collaboratore sito Web e operatore di identità gestita
Creare assegnazioni di ruolo di Azure Microsoft.Authorization/roleAssignments/write nell'ambito della risorsa di destinazione Amministratore Controllo di accesso basato su ruoli o amministratore accesso utenti

Aggiungere un'identità assegnata dal sistema

Per abilitare un'identità gestita assegnata dal sistema, usare le istruzioni seguenti.

  1. Nel portale di Azure passare alla pagina dell'app.

  2. Nel menu a sinistra, selezionare Impostazioni>Identity.

  3. All'interno della scheda Assegnata dal sistema impostare Stato su Attivato. Quindi selezionare Salva.

Aggiungere un'identità assegnata dall'utente

Per creare un'app con un'identità assegnata dall'utente, crea l'identità e quindi aggiungine l'identificatore alla configurazione dell'app.

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

  2. Nel menu a sinistra della pagina dell'app selezionare Impostazioni>Identità.

  3. Seleziona Assegnato all'utente, quindi seleziona Aggiungi.

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

Dopo aver completato questi passaggi, l'app viene riavviata.

Configurare la risorsa di destinazione

È necessario configurare la risorsa di destinazione per consentire l'accesso dall'app. Per la maggior parte dei servizi di Azure, configurare la risorsa di destinazione creando un'assegnazione di ruolo.

Alcuni servizi usano meccanismi diversi dal controllo degli accessi in base al ruolo di Azure. Per informazioni su come configurare l'accesso usando un'identità, vedere la documentazione per ogni risorsa di destinazione. Per altre informazioni sulle risorse che supportano i token di Microsoft Entra, vedere Servizi di Azure che supportano l'autenticazione di Microsoft Entra.

Ad esempio, se si richiede un token per accedere a un segreto in Azure Key Vault, è anche necessario creare un'assegnazione di ruolo che consenta all'identità gestita di utilizzare i segreti nel vault di destinazione. In caso contrario, Key Vault rifiuta le chiamate anche se si usa un token valido. Lo stesso vale per database SQL di Azure e altri servizi.

Importante

I servizi back-end per le identità gestite conservano una cache per ogni URI di risorsa per circa 24 ore. L'applicazione delle modifiche apportate al gruppo o all'appartenenza a ruoli di un'identità gestita può richiedere diverse ore. Non è attualmente 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 essere necessario attendere diverse ore prima che la risorsa di Azure che 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 l'identità gestita, un'app può ottenere token per le risorse di Azure che Microsoft Entra ID consente di proteggere, ad esempio il database SQL di Azure, Azure Key Vault e Archiviazione di Azure. Questi token rappresentano l'applicazione che accede 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 usando una richiesta HTTP GET standard. È possibile implementare la richiesta 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>

Una risposta di esempio potrebbe essere simile all'esempio seguente:

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, aggiungere il valore di access_token a una connessione client con l'insieme di credenziali.

Per ulteriori informazioni sull'endpoint REST, consultare il riferimento all'endpoint REST più avanti in questo articolo.

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 menu a sinistra della pagina dell'app selezionare Impostazioni>Identità.

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

    • Per un'identità assegnata dal sistema: nella scheda Assegnata dal sistema impostare Statosu Disattivato. Quindi selezionare Salva.
    • Per un'identità assegnata dall'utente: selezionare la scheda Assegnata dall'utente , selezionare la casella di controllo relativa all'identità e quindi selezionare Rimuovi. Seleziona per confermare.

Nota

È anche possibile impostare un'impostazione dell'applicazione che disabilita solo il servizio token locale: WEBSITE_DISABLE_MSI. Tuttavia, lascia l'identità sul posto. Gli strumenti mostrano ancora l'identità gestita come attivata o abilitata. Di conseguenza, non è consigliabile usare questa impostazione.

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 HTTP che consente di attenuare gli attacchi di richiesta falsificata lato server (SSRF). La piattaforma ruota il valore.

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

Nome parametro In Descrizione
resource Quesito URI della risorsa di Microsoft Entra per cui è necessario ottenere un token. Questa risorsa può essere uno dei servizi di Azure che supportano l'autenticazione di Microsoft Entra o qualsiasi altro URI della risorsa.
api-version Quesito Versione dell'API del token da usare. Usare 2019-08-01.
X-IDENTITY-HEADER Intestazione Valore della IDENTITY_HEADER variabile di ambiente. Questo header viene utilizzato per mitigare gli attacchi SSRF.
client_id Quesito (Facoltativo) ID client dell'identità assegnata dall'utente da usare. Non può essere usato in una richiesta che include principal_id, mi_res_ido 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 Quesito (Facoltativo) ID entità di sicurezza dell'identità assegnata dall'utente da usare. Il object_id parametro è un alias che può essere invece usato. Non può essere usato in una richiesta che include client_id, mi_res_ido 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 Quesito (Facoltativo) ID delle risorsa Azure dell'identità assegnata dall'utente da usare. Non può essere usato in una richiesta che include principal_id, client_ido 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

Se tenti di ottenere token per le identità assegnate dall'utente, includi almeno una proprietà facoltativa. In caso contrario, il servizio token tenta di ottenere un token per un'identità assegnata dal sistema, che potrebbe o meno esistere.

Considera i tutorial seguenti: