Identità gestite nelle App contenitore di Azure
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.
- È possibile usare l'identità gestita per eseguire l'autenticazione con un Registro Azure Container privato senza nome utente e password per eseguire il pull dei contenitori per l'app contenitore.
- È possibile usare un'identità gestita per creare connessioni per le applicazioni abilitate per Dapr tramite i componenti dapr
Casi d'uso comuni
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
I contenitori Init non possono accedere alle identità gestite negli ambienti di sola utilizzo e negli ambienti del profilo del carico di lavoro dedicati
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.
Aggiungere un'identità assegnata dal sistema
Passare all'app contenitore nel portale di Azure.
Nel gruppo Impostazioni selezionare Identità.
All'interno della scheda Assegnata dal sistema impostare Stato su Attivato.
Seleziona Salva.
Aggiungere un'identità assegnata dall'utente
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.
Sarà prima di tutto necessario creare una risorsa identità assegnata dall'utente.
Creare una risorsa di identità gestita assegnata dall'utente in base alla procedura descritta in Gestire le identità gestite assegnate dall'utente.
Passare all'app contenitore nel portale di Azure.
Nel gruppo Impostazioni selezionare Identità.
Nella scheda Assegnata dall'utente selezionare Aggiungi.
Cercare e selezionare l'identità creata in precedenza.
Selezionare Aggiungi.
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 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. 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.
Nota
Quando ci si connette alle origini dati di Azure SQL con Entity Framework Core, prendere in considerazione l'uso di Microsoft.Data.SqlClient, che fornisce stringhe 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:
- Aggiungere la libreria client Azure Identity al progetto
- Accedere al servizio di Azure con un'identità assegnata dal sistema
- Accedere al servizio di Azure con un'identità assegnata dall'utente
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).
Usare l'identità gestita per le regole di scalabilità
È possibile usare le identità gestite nelle regole di scalabilità per eseguire l'autenticazione con i servizi di Azure che supportano le identità gestite. Per usare un'identità gestita nella regola di scalabilità, usare la identity
proprietà anziché la auth
proprietà nella regola di scalabilità. I valori accettabili per la identity
proprietà sono l'ID risorsa di Azure di un'identità assegnata dall'utente o system
l'uso di un'identità assegnata dal sistema.
Nota
L'autenticazione dell'identità gestita nelle regole di scalabilità è disponibile in anteprima pubblica. È disponibile nella versione 2024-02-02-preview
dell'API .
L'esempio di modello di Resource Manager seguente illustra come usare un'identità gestita con una regola di scalabilità di Archiviazione code di Azure:
L'account di archiviazione code usa la accountName
proprietà per identificare l'account di archiviazione, mentre la identity
proprietà specifica l'identità gestita da usare. Non è necessario usare la auth
proprietà .
"scale": {
"minReplicas": 1,
"maxReplicas": 10,
"rules": [{
"name": "myQueueRule",
"azureQueue": {
"accountName": "mystorageaccount",
"queueName": "myqueue",
"queueLength": 2,
"identity": "<IDENTITY1_RESOURCE_ID>"
}
}]
}
Per altre informazioni sull'uso dell'identità gestita con regole di scalabilità, vedere Impostare le regole di scalabilità in App Azure Container.
Controllare la disponibilità delle identità gestite
App contenitore consente di specificare contenitori init e contenitori principali. Per impostazione predefinita, sia i contenitori main che init in un ambiente del profilo del carico di lavoro a consumo possono usare l'identità gestita per accedere ad altri servizi di Azure. Negli ambienti di sola utilizzo e negli ambienti del profilo del carico di lavoro dedicati, solo i contenitori principali possono usare l'identità gestita. I token di accesso alle identità gestite sono disponibili per ogni identità gestita configurata nell'app contenitore. In alcune situazioni, tuttavia, solo il contenitore init o il contenitore principale richiedono token di accesso per un'identità gestita. In altri casi, è possibile usare un'identità gestita solo per accedere al Registro Azure Container per eseguire il pull dell'immagine del contenitore e l'applicazione stessa non deve avere accesso al Registro Azure Container.
A partire dalla versione 2024-02-02-preview
dell'API, è possibile controllare quali identità gestite sono disponibili per l'app contenitore durante le fasi init e principali per seguire il principio di sicurezza dei privilegi minimi. Sono disponibili le seguenti opzioni:
Init
: disponibile solo per i contenitori init. Usare questa opzione quando si vuole eseguire alcune operazioni di inizializzazione che richiedono un'identità gestita, ma non è più necessaria l'identità gestita nel contenitore principale. Questa opzione è attualmente supportata solo negli ambienti di consumo del profilo del carico di lavoroMain
: disponibile solo per i contenitori principali. Usare questa opzione se il contenitore init non necessita dell'identità gestita.All
: disponibile per tutti i contenitori. Questo valore è l'impostazione predefinita.None
: non disponibile per i contenitori. Usare questa opzione quando si dispone di un'identità gestita usata solo per il pull di immagini del Registro Azure Container, le regole di scalabilità o i segreti di Key Vault e non è necessario essere disponibili per il codice in esecuzione nei contenitori.
L'esempio di modello di Resource Manager seguente illustra come configurare un'app contenitore in un ambiente di consumo del profilo del carico di lavoro che:
- Limita l'identità assegnata dal sistema dell'app contenitore solo ai contenitori principali.
- Limita un'identità assegnata dall'utente specifica solo ai contenitori init.
- Usa un'identità assegnata dall'utente specifica per Registro Azure Container pull dell'immagine senza consentire al codice nei contenitori di usare tale identità gestita per accedere al Registro di sistema. In questo esempio i contenitori stessi non devono accedere al Registro di sistema.
Questo approccio limita le risorse a cui è possibile accedere se un attore malintenzionato dovesse ottenere l'accesso non autorizzato ai contenitori.
{
"location": "eastus2",
"identity":{
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"<IDENTITY1_RESOURCE_ID>":{},
"<ACR_IMAGEPULL_IDENTITY_RESOURCE_ID>":{}
}
},
"properties": {
"workloadProfileName":"Consumption",
"environmentId": "<CONTAINER_APPS_ENVIRONMENT_ID>",
"configuration": {
"registries": [
{
"server": "myregistry.azurecr.io",
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID"
}],
"identitySettings":[
{
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID",
"lifecycle": "None"
},
{
"identity": "<IDENTITY1_RESOURCE_ID>",
"lifecycle": "Init"
},
{
"identity": "system",
"lifecycle": "Main"
}]
},
"template": {
"containers":[
{
"image":"myregistry.azurecr.io/main:1.0",
"name":"app-main"
}
],
"initContainers":[
{
"image":"myregistry.azurecr.io/init:1.0",
"name":"app-init",
}
]
}
}
}
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 da Microsoft Entra ID. 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 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. Seleziona 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.