Autenticare le app Python nei servizi di Azure usando Azure SDK per Python

Quando un'applicazione deve accedere a una risorsa di Azure come Archiviazione di Azure, Azure Key Vault o i servizi di intelligenza artificiale di Azure, l'applicazione deve essere autenticata in Azure. Questo requisito è vero per tutte le applicazioni, sia che vengano distribuite in Azure, distribuite in locale o in fase di sviluppo in una workstation per sviluppatori locale. Questo articolo descrive gli approcci consigliati per autenticare un'app in Azure quando si usa Azure SDK per Python.

Usare l'autenticazione basata su token anziché stringa di connessione per le app quando eseguono l'autenticazione alle risorse di Azure. Azure SDK per Python fornisce classi che supportano l'autenticazione basata su token. Le app possono eseguire facilmente l'autenticazione alle risorse di Azure, indipendentemente dal fatto che l'app sia in fase di sviluppo locale, distribuita in Azure o distribuita in un server locale.

Il tipo specifico di autenticazione basata su token usato da un'app per l'autenticazione alle risorse di Azure dipende dalla posizione in cui viene eseguita l'app. I tipi di autenticazione basata su token sono illustrati nel diagramma seguente.

A diagram that shows the recommended token-based authentication strategies for an app depending on where it's running.

  • Quando uno sviluppatore esegue un'app durante lo sviluppo locale: l'app esegue l'autenticazione in Azure usando un'entità servizio dell'applicazione per lo sviluppo locale o le credenziali di Azure dello sviluppatore. Queste opzioni sono illustrate nella sezione Autenticazione durante lo sviluppo locale.
  • Quando un'app è ospitata in Azure: l'app esegue l'autenticazione alle risorse di Azure usando un'identità gestita. Questa opzione è illustrata nella sezione Autenticazione negli ambienti server.
  • Quando un'app è ospitata e distribuita in locale: l'app esegue l'autenticazione alle risorse di Azure usando un'entità servizio dell'applicazione. Questa opzione è illustrata nella sezione Autenticazione negli ambienti server.

DefaultAzureCredential

La classe DefaultAzureCredential fornita da Azure SDK consente alle app di usare metodi di autenticazione diversi a seconda dell'ambiente in cui vengono eseguiti. In questo modo, le app possono essere promosse dallo sviluppo locale agli ambienti di test all'ambiente di produzione senza modifiche al codice.

È possibile configurare il metodo di autenticazione appropriato per ogni ambiente e DefaultAzureCredential rilevare e usare automaticamente tale metodo di autenticazione. L'uso di è preferibile rispetto alla codifica manuale della logica condizionale o dei flag di DefaultAzureCredential funzionalità per l'uso di metodi di autenticazione diversi in ambienti diversi.

I dettagli sull'uso della DefaultAzureCredential classe sono descritti nella sezione Usare DefaultAzureCredential in un'applicazione.

Vantaggi dell'autenticazione basata su token

Usare l'autenticazione basata su token anziché usare stringa di connessione quando si compilano app per Azure. L'autenticazione basata su token offre i vantaggi seguenti rispetto all'autenticazione con stringa di connessione:

  • I metodi di autenticazione basati su token descritti in questo articolo consentono di stabilire le autorizzazioni specifiche necessarie per l'app nella risorsa di Azure. Questa pratica segue il principio dei privilegi minimi. Al contrario, un stringa di connessione concede diritti completi alla risorsa di Azure.
  • Chiunque o qualsiasi app con un stringa di connessione può connettersi a una risorsa di Azure, ma i metodi di autenticazione basati su token hanno come ambito l'accesso alla risorsa solo alle app destinate ad accedere alla risorsa.
  • Con un'identità gestita, non esiste alcun segreto dell'applicazione da archiviare. L'app è più sicura perché non sono presenti stringa di connessione o segreti dell'applicazione che possono essere compromessi.
  • Il pacchetto azure.identity in Azure SDK gestisce automaticamente i token in background. I token gestiti semplificano l'uso dell'autenticazione basata su token come stringa di connessione.

Limitare l'uso di stringa di connessione alle app di verifica iniziali o ai prototipi di sviluppo che non accedono a dati sensibili o di produzione. In caso contrario, le classi di autenticazione basate su token disponibili in Azure SDK sono sempre preferite quando eseguono l'autenticazione alle risorse di Azure.

Autenticazione negli ambienti server

Quando si ospita in un ambiente server, a ogni applicazione viene assegnata un'identità dell'applicazione univoca per ogni ambiente in cui viene eseguita l'applicazione. In Azure un'identità dell'app è rappresentata da un'entità servizio. Questo tipo speciale di entità di sicurezza identifica e autentica le app in Azure. Il tipo di entità servizio da usare per l'app dipende dalla posizione in cui è in esecuzione l'app:

Authentication method Descrizione
App ospitate in Azure Le app ospitate in Azure devono usare un'entità servizio di gestione delle identità. Le identità gestite sono progettate per rappresentare l'identità di un'app ospitata in Azure e possono essere usate solo con le app ospitate in Azure.

Ad esempio, a un'app Web Django ospitata nel servizio app Azure verrebbe assegnata un'identità gestita. L'identità gestita assegnata all'app verrà quindi usata per autenticare l'app in altri servizi di Azure.

Le app in esecuzione in servizio Azure Kubernetes (servizio Azure Kubernetes) possono usare una credenziale dell'identità del carico di lavoro. Questa credenziale si basa su un'identità gestita con una relazione di trust con un account del servizio Azure Kubernetes.
,
App ospitate all'esterno di Azure
(ad esempio, app locali)
Le app ospitate all'esterno di Azure (ad esempio, app locali) che devono connettersi ai servizi di Azure devono usare un'entità servizio dell'applicazione. Un'entità servizio dell'applicazione rappresenta l'identità dell'app in Azure e viene creata tramite il processo di registrazione dell'applicazione.

Si consideri, ad esempio, un'app Web Django ospitata in locale che usa Archiviazione BLOB di Azure. Si creerebbe un'entità servizio dell'applicazione per l'app usando il processo di registrazione dell'app. L'oggetto AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_CLIENT_SECRET verrebbe archiviato come variabili di ambiente da leggere dall'applicazione in fase di esecuzione e consentire all'app di eseguire l'autenticazione in Azure usando l'entità servizio dell'applicazione.

Autenticazione durante lo sviluppo locale

Quando un'applicazione viene eseguita nella workstation di uno sviluppatore durante lo sviluppo locale, deve comunque eseguire l'autenticazione a tutti i servizi di Azure usati dall'app. Esistono due strategie principali per l'autenticazione delle app in Azure durante lo sviluppo locale:

Authentication method Descrizione
Creare oggetti entità servizio dell'applicazione dedicati da usare durante lo sviluppo locale. In questo metodo, gli oggetti entità servizio dell'applicazione dedicati vengono configurati usando il processo di registrazione dell'app da usare durante lo sviluppo locale. L'identità dell'entità servizio viene quindi archiviata come variabili di ambiente a cui accedere l'app quando viene eseguita nello sviluppo locale.

Questo metodo consente di assegnare le autorizzazioni di risorsa specifiche necessarie dall'app agli oggetti entità servizio usati dagli sviluppatori durante lo sviluppo locale. Questa procedura assicura che l'applicazione abbia accesso solo alle risorse specifiche necessarie e replica le autorizzazioni che l'app avrà nell'ambiente di produzione.

Lo svantaggio di questo approccio è la necessità di creare oggetti entità servizio separati per ogni sviluppatore che lavora su un'applicazione.

Autenticare l'app in Azure usando le credenziali dello sviluppatore durante lo sviluppo locale. In questo metodo, uno sviluppatore deve accedere ad Azure dall'interfaccia della riga di comando di Azure, da Azure PowerShell o dall'interfaccia della riga di comando per sviluppatori di Azure nella workstation locale. L'applicazione può quindi accedere alle credenziali dello sviluppatore dall'archivio credenziali e usare tali credenziali per accedere alle risorse di Azure dall'app.

Questo metodo offre il vantaggio di una configurazione più semplice perché uno sviluppatore deve accedere solo al proprio account Azure tramite uno degli strumenti di sviluppo indicati in precedenza. Lo svantaggio di questo approccio è che l'account dello sviluppatore ha probabilmente più autorizzazioni rispetto a quelle richieste dall'applicazione. Di conseguenza, l'applicazione non replica in modo accurato le autorizzazioni con cui verrà eseguita nell'ambiente di produzione.

Usare DefaultAzureCredential in un'applicazione

Per usare DefaultAzureCredential in un'app Python, aggiungere il pacchetto azure.identity all'applicazione.

pip install azure-identity

L'esempio di codice seguente illustra come creare un'istanza di un DefaultAzureCredential oggetto e usarlo con una classe client di Azure SDK. In questo caso, si tratta di un BlobServiceClient oggetto usato per accedere a Archiviazione BLOB di Azure.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=credential)

L'oggetto DefaultAzureCredential rileva automaticamente il meccanismo di autenticazione configurato per l'app e ottiene i token necessari per autenticare l'app in Azure. Se un'applicazione usa più client SDK, è possibile usare lo stesso oggetto credenziale con ogni oggetto client SDK.

Sequenza di metodi di autenticazione quando si usa DefaultAzureCredential

Internamente, DefaultAzureCredential implementa una catena di provider di credenziali per l'autenticazione delle applicazioni nelle risorse di Azure. Ogni provider di credenziali può rilevare se le credenziali di quel tipo sono configurate per l'app. L'oggetto DefaultAzureCredential controlla in sequenza ogni provider nell'ordine e usa le credenziali del primo provider con credenziali configurate.

L'ordine in cui DefaultAzureCredential cerca le credenziali è illustrato nel diagramma e nella tabella seguenti:

A diagram that shows the sequence in which DefaultAzureCredential checks to see what authentication source is configured for an application.

Tipo di credenziali Descrizione
Ambiente L'oggetto DefaultAzureCredential legge un set di variabili di ambiente per determinare se un'entità servizio applicazione (utente applicazione) è stata impostata per l'app. In questo caso, DefaultAzureCredential usa questi valori per autenticare l'app in Azure.

Questo metodo viene spesso usato negli ambienti server, ma è anche possibile usarlo quando si sviluppa in locale.
Identità del carico di lavoro Se l'applicazione viene distribuita in servizio Azure Kubernetes (servizio Azure Kubernetes) con identità gestita abilitata, DefaultAzureCredential autentica l'app in Azure usando tale identità gestita. L'identità del carico di lavoro rappresenta una relazione di trustahip tra un'identità gestita assegnata dall'utente e un account del servizio Servizio Azure Kubernetes. L'autenticazione tramite un'identità del carico di lavoro è descritta nell'articolo Usare ID dei carichi di lavoro di Microsoft Entra con servizio Azure Kubernetes.
Identità gestita Se l'applicazione viene distribuita in un host di Azure con identità gestita abilitata, DefaultAzureCredential autentica l'app in Azure usando tale identità gestita. L'autenticazione tramite un'identità gestita è descritta nella sezione Autenticazione negli ambienti server.

Questo metodo è disponibile solo quando un'applicazione è ospitata in Azure usando un servizio come servizio app Azure, Funzioni di Azure o Azure Macchine virtuali.
Interfaccia della riga di comando di Azure Se è stata eseguita l'autenticazione in Azure usando il az login comando nell'interfaccia della riga di comando di Azure, DefaultAzureCredential autentica l'app in Azure usando lo stesso account.
Azure PowerShell Se è stata eseguita l'autenticazione in Azure usando il Connect-AzAccount cmdlet di Azure PowerShell, DefaultAzureCredential autentica l'app in Azure usando lo stesso account.
Azure Developer CLI Se è stata eseguita l'autenticazione in Azure usando il azd auth login comando nell'interfaccia della riga di comando per sviluppatori di Azure, DefaultAzureCredential autentica l'app in Azure usando lo stesso account.
Interattivo Se abilitata, DefaultAzureCredential esegue l'autenticazione interattiva tramite il browser predefinito del sistema corrente. L'opzione è disabilitata per impostazione predefinita.

Nota

A causa di un problema noto, VisualStudioCodeCredential è stato rimosso dalla catena di DefaultAzureCredential token. Quando il problema viene risolto in una versione futura, questa modifica verrà ripristinata. Per altre informazioni, vedere Libreria client di Identità di Azure per Python.