Autenticare le app Python nei servizi di Azure durante lo sviluppo locale usando gli account per sviluppatori

Quando gli sviluppatori creano applicazioni cloud, in genere eseguono il debug e il test delle applicazioni nella workstation 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. Questo articolo illustra come usare le credenziali di Azure di uno sviluppatore per autenticare l'app in Azure durante lo sviluppo locale.

Diagramma che mostra come un'app Python durante lo sviluppo locale usa le credenziali degli sviluppatori per connettersi ad Azure ottenendo tali credenziali dagli strumenti di sviluppo installati localmente.

Per consentire a un'app di eseguire l'autenticazione in Azure durante lo sviluppo locale usando le credenziali di Azure dello sviluppatore, è necessario che uno sviluppatore sia connesso ad Azure dall'interfaccia della riga di comando di Azure, da Azure PowerShell o dall'interfaccia della riga di comando per sviluppatori di Azure. Azure SDK per Python è in grado di rilevare che lo sviluppatore ha eseguito l'accesso da uno di questi strumenti e quindi ottenere le credenziali necessarie dalla cache delle credenziali per autenticare l'app in Azure come utente connesso.

Questo approccio è più semplice da configurare per un team di sviluppo perché sfrutta gli account Azure esistenti degli sviluppatori. Tuttavia, l'account di uno sviluppatore avrà probabilmente più autorizzazioni rispetto a quelle richieste dall'applicazione, pertanto il superamento delle autorizzazioni che l'app verrà eseguita con nell'ambiente di produzione. In alternativa, è possibile creare entità servizio dell'applicazione da usare durante lo sviluppo locale definite con un ambito limitato al'accesso necessario per l'app.

1 - Creare un gruppo di sicurezza Microsoft Entra per lo sviluppo locale

Poiché ci sono quasi sempre più sviluppatori che lavorano su un'applicazione, è consigliabile creare prima un gruppo di sicurezza Di Microsoft Entra per incapsulare i ruoli (autorizzazioni) necessari per l'app nello sviluppo locale. Questo approccio offre i vantaggi seguenti.

  • Ogni sviluppatore ha la certezza di avere gli stessi ruoli assegnati perché i ruoli vengono assegnati a livello di gruppo.
  • Se è necessario un nuovo ruolo per l'app, deve essere aggiunto solo al gruppo Microsoft Entra per l'app.
  • Se un nuovo sviluppatore si aggiunge al team, deve semplicemente essere aggiunto al gruppo Microsoft Entra corretto per ottenere le autorizzazioni corrette per lavorare sull'app.

Se si dispone di un gruppo di sicurezza Microsoft Entra esistente per il team di sviluppo, è possibile usare tale gruppo. In caso contrario, completare la procedura seguente per creare un gruppo di sicurezza Microsoft Entra.

Il comando az ad group create viene usato per creare gruppi in Microsoft Entra ID. I parametri --display-name e --main-nickname sono obbligatori. Il nome assegnato al gruppo deve essere basato sul nome dell'applicazione. È anche utile includere una stringa come local-dev nel nome del gruppo per indicare lo scopo del gruppo.

az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"

Copiare il valore della proprietà id nell'output del comando. ID oggetto per il gruppo. È necessario nei passaggi successivi. È anche possibile usare il comando az ad group show per recuperare questa proprietà.

Per aggiungere membri al gruppo, è necessario l'ID oggetto dell'utente di Azure. Usare az ad user list per elencare le entità servizio disponibili. Il comando del parametro --filter accetta filtri di stile OData e può essere usato per filtrare l'elenco in base al nome visualizzato dell'utente, come illustrato. Il parametro --query limita l'output alle colonne di interesse.

az ad user list \
    --filter "startswith(displayName, 'Bob')" \
    --query "[].{objectId:id, displayName:displayName}" \
    --output table

Il comando az ad group member add può quindi essere usato per aggiungere membri ai gruppi.

az ad group member add \
    --group <group-name> \
    --member-id <object-id>

Nota

Per impostazione predefinita, la creazione di gruppi di sicurezza Di Microsoft Entra è limitata a determinati ruoli con privilegi in una directory. Se non è possibile creare un gruppo, contattare un amministratore per la directory. Se non è possibile aggiungere membri a un gruppo esistente, contattare il proprietario del gruppo o un amministratore della directory. Per altre informazioni, vedere Gestire i gruppi e l'appartenenza a un gruppo di Microsoft Entra.

2 - Assegnare ruoli al gruppo di Microsoft Entra

Successivamente, è necessario determinare i ruoli (autorizzazioni) necessari per l'app in base alle risorse e assegnare tali ruoli all'app. In questo esempio i ruoli verranno assegnati al gruppo Microsoft Entra creato nel passaggio 1. I ruoli possono essere assegnati a una risorsa, a un gruppo di risorse o a un ambito di sottoscrizione. Questo esempio illustra come assegnare ruoli nell'ambito del gruppo di risorse perché la maggior parte delle applicazioni raggruppa tutte le risorse di Azure in un singolo gruppo di risorse.

A un utente, un gruppo o un'entità servizio dell'applicazione viene assegnato un ruolo in Azure usando il comando az role assignment create . È possibile specificare un gruppo con il relativo ID oggetto.

az role assignment create --assignee <objectId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 

Per ottenere i nomi dei ruoli che è possibile assegnare, usare il comando az role definition list .

az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Ad esempio, per consentire ai membri di un gruppo un ID oggetto di bbbbbbbb-1111-2222-3333-cccccccccccc lettura, scrittura ed eliminazione dell'accesso a Archiviazione di Azure contenitori BLOB e dati in tutti gli account di archiviazione nel gruppo di risorse msdocs-python-sdk-auth-example nella sottoscrizione con ID aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e, si assegnerebbe il ruolo Collaboratore dati BLOB di archiviazione al gruppo usando il comando seguente.

az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"

Per informazioni sull'assegnazione delle autorizzazioni a livello di risorsa o sottoscrizione tramite l'interfaccia della riga di comando di Azure, vedere l'articolo Assegnare ruoli di Azure usando l'interfaccia della riga di comando di Azure.

3 - Accedere ad Azure usando l'interfaccia della riga di comando di Azure, Azure PowerShell, l'interfaccia della riga di comando per sviluppatori di Azure o in un browser

Aprire un terminale nella workstation per sviluppatori e accedere ad Azure dall'interfaccia della riga di comando di Azure.

az login

4 - Implementare DefaultAzureCredential nell'applicazione

Per autenticare gli oggetti client di Azure SDK in Azure, l'applicazione deve usare la DefaultAzureCredential classe del azure.identity pacchetto. In questo scenario verifica DefaultAzureCredential in sequenza se lo sviluppatore ha eseguito l'accesso ad Azure usando l'interfaccia della riga di comando di Azure, Azure PowerShell o l'interfaccia della riga di comando per sviluppatori di Azure. Se lo sviluppatore ha eseguito l'accesso ad Azure usando uno di questi strumenti, le credenziali usate per accedere allo strumento verranno usate dall'app per l'autenticazione in Azure.

Per iniziare, aggiungere il pacchetto azure.identity all'applicazione.

pip install azure-identity

Successivamente, per qualsiasi codice Python che crea un oggetto client Azure SDK nell'app, è necessario:

  1. Importare la DefaultAzureCredential classe dal azure.identity modulo.
  2. Creare un oggetto DefaultAzureCredential.
  3. Passare l'oggetto al costruttore dell'oggetto DefaultAzureCredential client di Azure SDK.

Un esempio di questi passaggi è illustrato nel segmento di codice seguente.

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

# Acquire a credential object
token_credential = DefaultAzureCredential()

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