Un'identità gestita da Microsoft Entra ID consente all'app contenitore di accedere ad altre risorse protette di Microsoft Entra. Per altre informazioni sulle identità gestite in Microsoft Entra ID, vedere Identità gestite per le risorse di Azure.
All'app contenitore possono essere concessi due tipi di identità:
Un'identità assegnata dal sistema è associata all'app contenitore e viene eliminata quando l'app contenitore viene eliminata. A un'app può essere associata una sola identità assegnata dal sistema.
Un'identità assegnata dall'utente è una risorsa di Azure autonoma che è possibile assegnare all'app contenitore e ad altre risorse. Un'app contenitore può avere più identità assegnate dall'utente. Le identità assegnate dall'utente esistono fino a quando non vengono eliminate.
Perché usare un'identità gestita?
È possibile usare un'identità gestita in un'app contenitore in esecuzione per eseguire l'autenticazione a qualsiasi servizio che supporti l'autenticazione di Microsoft Entra.
Con le identità gestite:
L'app si connette alle risorse con l'identità gestita. Non è necessario gestire le credenziali nell'app contenitore.
È possibile usare il controllo degli accessi in base al ruolo per concedere autorizzazioni specifiche a un'identità gestita.
Le identità assegnate dal sistema vengono create e gestite automaticamente. Vengono eliminati quando l'app contenitore viene eliminata.
È possibile aggiungere ed eliminare identità assegnate dall'utente e assegnarle a più risorse. Sono indipendenti dal ciclo di vita dell'app contenitore.
Le identità assegnate dal sistema sono ideali per i carichi di lavoro che:
sono contenuti all'interno di una singola risorsa
necessitano di identità indipendenti
Le identità assegnate dall'utente sono ideali per i carichi di lavoro che:
eseguire su più risorse e condividere una singola identità
è necessaria la pre-autorizzazione per una risorsa sicura
Limiti
Le identità gestite nelle regole di scalabilità non sono supportate. È necessario includere stringa di connessione o chiavi nella secretRef regola di ridimensionamento.
I contenitori Init non possono accedere alle identità gestite.
Configurare le identità gestite
È possibile configurare le identità gestite tramite:
Portale di Azure
l'interfaccia della riga di comando di Azure
modello di Azure Resource Manager (ARM)
Quando viene aggiunta, eliminata o modificata un'identità gestita in un'app contenitore in esecuzione, l'app non viene riavviata automaticamente e non viene creata una nuova revisione.
Nota
Quando si aggiunge un'identità gestita a un'app contenitore distribuita prima del 11 aprile 2022, è necessario creare una nuova revisione.
All'interno della scheda Assegnata dal sistema impostare Stato su Attivato.
Seleziona Salva.
Eseguire il comando az containerapp identity assign per creare un'identità assegnata dal sistema:
az containerapp identity assign --name myApp --resource-group myResourceGroup --system-assigned
È possibile usare un modello di Resource Manager per automatizzare la distribuzione dell'app e delle risorse del contenitore. Per aggiungere un'identità assegnata dal sistema, aggiungere una identity sezione al modello di Resource Manager.
"identity": {
"type": "SystemAssigned"
}
L'aggiunta del tipo assegnato dal sistema indica ad Azure di creare e gestire l'identità per l'applicazione. Per un esempio di modello arm completo, vedere Specifica DELL'API ARM.
Alcuni comandi dell'interfaccia della riga di comando di Azure, inclusi az containerapp create e az containerapp job create, supportano i file YAML per l'input. Per aggiungere un'identità assegnata dal sistema, aggiungere una identity sezione al file YAML.
identity:
type: SystemAssigned
L'aggiunta del tipo assegnato dal sistema indica ad Azure di creare e gestire l'identità per l'applicazione. Per un esempio di modello YAML completo, vedere Specifica DELL'API ARM.
Un modello Bicep può essere usato per automatizzare la distribuzione dell'app e delle risorse del contenitore. Per aggiungere un'identità assegnata dal sistema, aggiungere una identity sezione al modello Bicep.
La configurazione di un'app contenitore con un'identità assegnata dall'utente richiede prima di tutto di creare l'identità e quindi aggiungerne l'identificatore alla configurazione dell'app contenitore. È possibile creare identità assegnate dall'utente tramite il portale di Azure o l'interfaccia della riga di comando di Azure. Per informazioni sulla creazione e la gestione delle identità assegnate dall'utente, vedere Gestire le identità gestite assegnate dall'utente.
Sostituire <IDENTITY_RESOURCE_ID> con la id proprietà dell'identità. Per assegnare più identità assegnate dall'utente, specificare un elenco separato da spazi di ID identità al --user-assigned parametro .
Per aggiungere una o più identità assegnate dall'utente, aggiungere una identity sezione al modello di Resource Manager. Sostituire <IDENTITY1_RESOURCE_ID> e <IDENTITY2_RESOURCE_ID> con gli identificatori di risorsa delle identità da aggiungere.
Specificare ogni identità assegnata dall'utente aggiungendo un elemento all'oggetto userAssignedIdentities con l'identificatore di risorsa dell'identità come chiave. Usare un oggetto vuoto come valore.
Per un esempio di modello arm completo, vedere Specifica DELL'API ARM.
Nota
Un'applicazione può avere contemporaneamente sia identità assegnate dal sistema che assegnate dall'utente. In questo caso, il valore della type proprietà sarà SystemAssigned,UserAssigned.
Per aggiungere una o più identità assegnate dall'utente, aggiungere una identity sezione al file di configurazione YAML. Sostituire <IDENTITY1_RESOURCE_ID> e <IDENTITY2_RESOURCE_ID> con gli identificatori di risorsa delle identità da aggiungere.
Specificare ogni identità assegnata dall'utente aggiungendo un elemento all'oggetto userAssignedIdentities con l'identificatore di risorsa dell'identità come chiave. Usare un oggetto vuoto come valore.
Per un esempio di modello YAML completo, vedere Specifica DELL'API ARM.
Nota
Un'applicazione può avere contemporaneamente sia identità assegnate dal sistema che assegnate dall'utente. In questo caso, la proprietà type sarebbe SystemAssigned,UserAssigned.
Per aggiungere una o più identità assegnate dall'utente, aggiungere una identity sezione al modello Bicep. Sostituire <IDENTITY1_RESOURCE_ID> e <IDENTITY2_RESOURCE_ID> con gli identificatori di risorsa delle identità da aggiungere.
Specificare ogni identità assegnata dall'utente aggiungendo un elemento all'oggetto userAssignedIdentities con l'identificatore di risorsa dell'identità come chiave. Usare un oggetto vuoto come valore.
Un'applicazione può avere contemporaneamente sia identità assegnate dal sistema che assegnate dall'utente. In questo caso, la proprietà type sarebbe SystemAssigned,UserAssigned.
Configurare una risorsa di destinazione
Per alcune risorse, è necessario configurare le assegnazioni di ruolo per l'identità gestita dell'app per concedere l'accesso. In caso contrario, le chiamate dall'app ai servizi, ad esempio Azure Key Vault e database SQL di Azure, vengono rifiutate anche quando si usa un token valido per tale identità. Per altre informazioni sul controllo degli accessi in base al ruolo di Azure, vedere Informazioni sul controllo degli accessi in base al ruolo. Per altre informazioni sulle risorse che supportano i token 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. Se si aggiornano i criteri di accesso di una determinata risorsa di destinazione e si recupera immediatamente un token per tale risorsa, è possibile ottenere un token memorizzato nella cache con autorizzazioni obsolete fino alla scadenza del token. L'uso forzato di un aggiornamento del token non è supportato.
Connettersi ai servizi di Azure nel codice dell'app
Con le identità gestite, un'app può ottenere token per accedere alle risorse di Azure che usano l'ID Microsoft Entra, ad esempio 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.
App contenitore fornisce un endpoint REST accessibile internamente per recuperare i token. L'endpoint REST è disponibile dall'interno dell'app con una richiesta HTTP GET standard, che è possibile inviare con un client HTTP generico nella lingua preferita. Per .NET, JavaScript, Java e Python, la libreria client di Identità di Azure fornisce un'astrazione su questo endpoint REST. È possibile connettersi ad altri servizi di Azure aggiungendo un oggetto credenziale al client specifico del servizio.
Nota
Quando si usa la libreria client di Identità di Azure, è necessario specificare in modo esplicito l'ID client dell'identità gestita assegnata dall'utente.
Quando ci si connette alle origini dati SQL di Azure con Entity Framework Core, è consigliabile usare Microsoft.Data.SqlClient, che fornisce stringa di connessione speciali per la connettività delle identità gestite.
Per le app .NET, il modo più semplice per usare un'identità gestita consiste nell'usare la libreria client di Identità di Azure per .NET. Per altre informazioni, vedere le risorse seguenti:
Gli esempi collegati usano DefaultAzureCredential. Questo oggetto è efficace nella maggior parte degli scenari come lo stesso modello funziona in Azure (con identità gestite) e nel computer locale (senza identità gestite).
Gli esempi collegati usano DefaultAzureCredential. Questo oggetto è efficace nella maggior parte degli scenari come lo stesso modello funziona in Azure (con identità gestite) e nel computer locale (senza identità gestite).
Per altri esempi di codice della libreria client di Identità di Azure per JavaScript, vedere Esempi di identità di Azure.
Per le app Python, il modo più semplice per usare un'identità gestita consiste nell'usare la libreria client di Identità di Azure per Python. Per altre informazioni, vedere le risorse seguenti:
Gli esempi collegati usano DefaultAzureCredential. Questo oggetto è efficace nella maggior parte degli scenari come lo stesso modello funziona in Azure (con identità gestite) e nel computer locale (senza identità gestite).
Per le app e le funzioni Java, il modo più semplice per usare un'identità gestita consiste nell'usare la libreria client di Identità di Azure per Java. Per altre informazioni, vedere le risorse seguenti:
Gli esempi collegati usano DefaultAzureCredential. Questo oggetto è efficace nella maggior parte degli scenari come lo stesso modello funziona in Azure (con identità gestite) e nel computer locale (senza identità gestite).
Per altri esempi di codice della libreria client di Identità di Azure per Java, vedere Esempi di identità di Azure.
Usare lo script seguente per recuperare un token dall'endpoint locale specificando un URI di risorsa di un servizio di Azure. Sostituire il segnaposto con l'URI della risorsa per ottenere il token.
Una richiesta HTTP GET non elaborata è simile all'esempio seguente.
Ottenere l'URL dell'endpoint del token dalla IDENTITY_ENDPOINT variabile di ambiente. x-identity-header contiene il GUID archiviato nella IDENTITY_HEADER variabile di ambiente.
GET http://localhost:42356/msi/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
x-identity-header: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a
Una risposta potrebbe essere simile all'esempio seguente:
Questa risposta corrisponde alla risposta per la richiesta di token di accesso da servizio a servizio Microsoft Entra. Per accedere a Key Vault, aggiungere il valore di access_token a una connessione client con l'insieme di credenziali.
Informazioni di riferimento sugli endpoint REST
Un'app contenitore con un'identità gestita espone l'endpoint di identità definendo due variabili di ambiente:
IDENTITY_ENDPOINT: URL locale da cui l'app contenitore può richiedere token.
IDENTITY_HEADER: intestazione usata per attenuare gli attacchi di richiesta sul lato server (SSRF). Il valore viene ruotato dalla piattaforma.
Per ottenere un token per una risorsa, effettuare una richiesta HTTP GET all'endpoint, inclusi i parametri seguenti:
Nome parametro
In
Descrizione
resource
Query
URI della risorsa Microsoft Entra per cui ottenere un token. La risorsa può essere uno dei servizi di Azure che supportano l'autenticazione di Microsoft Entra o qualsiasi altro URI di risorsa.
api-version
Query
Versione dell'API del token da usare. Usare "2019-08-01" o versione successiva.
X-IDENTITY-HEADER
Intestazione
Valore della IDENTITY_HEADER variabile di ambiente. Questa intestazione attenua gli attacchi di richiesta sul lato server (SSRF).
client_id
Query
(Facoltativo) ID client dell'identità assegnata dall'utente da usare. Non è possibile usare 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
Query
(Facoltativo) ID entità di sicurezza dell'identità assegnata dall'utente da usare. object_id è un alias che può essere usato in alternativa. Non è possibile usare in una richiesta che include client_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.
mi_res_id
Query
(Facoltativo) ID delle risorsa Azure dell'identità assegnata dall'utente da usare. Non è possibile usare 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
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.
Visualizzare le identità gestite
È possibile visualizzare le identità gestite assegnate dal sistema e assegnate dall'utente usando il comando dell'interfaccia della riga di comando di Azure seguente. L'output mostra il tipo di identità gestita, gli ID tenant e gli ID entità di tutte le identità gestite assegnate all'app contenitore.
az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>
Rimuovere un'identità gestita
Quando si rimuove un'identità assegnata dal sistema, viene eliminata dall'ID Microsoft Entra. Anche le identità assegnate dal sistema vengono rimosse automaticamente dall'ID Microsoft Entra quando si elimina la risorsa dell'app contenitore stessa. La rimozione delle identità gestite assegnate dall'utente dall'app contenitore non le rimuove dall'ID Microsoft Entra.
Nel riquadro di spostamento sinistro 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: nella scheda Assegnata dal sistema impostare Stato su Disattivato. Seleziona Salva.
Identità assegnata dall'utente: selezionare la scheda Assegnata dall'utente, selezionare la casella di controllo per l'identità e selezionare Rimuovi. Seleziona Sì per confermare.
Per rimuovere l'identità assegnata dal sistema:
az containerapp identity remove --name <APP_NAME> --resource-group <GROUP_NAME> --system-assigned
Per rimuovere una o più identità assegnate dall'utente: