Condividi tramite


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

Quando un'app deve accedere a una risorsa di Azure come Archiviazione di Azure, Azure Key Vault o i servizi di intelligenza artificiale di Azure, l'app deve essere autenticata in Azure. Questo requisito è vero per tutte le app, 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. La libreria client di Identità di Azure per Python fornisce classi che supportano l'autenticazione basata su token e consentono alle app di 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.

Diagramma che mostra le strategie di autenticazione consigliate basate su token per un'app a seconda della posizione in cui è in esecuzione.

  • 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 dalla libreria client di Azure Identity 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 acquisisce e gestisce automaticamente i token Microsoft Entra. Ciò semplifica 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 nella libreria client di Identità di Azure sono sempre preferite quando eseguono l'autenticazione nelle risorse di Azure.

Autenticazione negli ambienti server

Quando si ospita in un ambiente server, a ogni app viene assegnata un'identità dell'applicazione univoca per ogni ambiente in cui viene eseguita l'app. In Azure un'identità dell'applicazione è 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'app 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

DefaultAzureCredential è una sequenza ordinata di meccanismi per l'autenticazione in Microsoft Entra ID. Ogni meccanismo di autenticazione è una classe che implementa il protocollo TokenCredential ed è nota come credenziale. In fase di esecuzione, DefaultAzureCredential tenta di eseguire l'autenticazione usando la prima credenziale. Se tale credenziale non riesce ad acquisire un token di accesso, viene tentata la credenziale successiva nella sequenza e così via finché non viene ottenuto un token di accesso correttamente. In questo modo, l'app può usare credenziali diverse in ambienti diversi senza scrivere codice specifico dell'ambiente.

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

pip install azure-identity

È possibile accedere ai servizi di Azure usando classi client specializzate dalle varie librerie client di Azure SDK. 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)

Quando il codice precedente viene eseguito nella workstation di sviluppo locale, cerca nelle variabili di ambiente un'entità servizio dell'applicazione o in strumenti di sviluppo installati localmente, ad esempio l'interfaccia della riga di comando di Azure, per un set di credenziali per sviluppatori. È possibile usare entrambi gli approcci per autenticare l'app nelle risorse di Azure durante lo sviluppo locale.

Quando viene distribuito in Azure, lo stesso codice può anche autenticare l'app nelle risorse di Azure. DefaultAzureCredential può recuperare automaticamente le impostazioni dell'ambiente e le configurazioni dell'identità gestita per l'autenticazione ai servizi di Azure.