Condividi tramite


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

Quando si sviluppano applicazioni cloud, gli sviluppatori in genere compilano, testano ed eseguono il debug del codice in locale prima di distribuirlo in Azure. Tuttavia, anche durante lo sviluppo locale, l'applicazione deve eseguire l'autenticazione con tutti i servizi di Azure con cui interagisce, ad esempio Key Vault, Archiviazione o database.

Questo articolo illustra come configurare l'applicazione in modo da usare le credenziali di Azure dello sviluppatore per l'autenticazione durante lo sviluppo locale. Questo approccio consente un'esperienza di sviluppo facile e sicura senza incorporare segreti o scrivere logica specifica dell'ambiente.

Panoramica dell'autenticazione di sviluppo locale con gli account per sviluppatori

Quando si sviluppa un'applicazione che usa la libreria di identità di Azure per Python, è possibile eseguire l'autenticazione ai servizi di Azure durante lo sviluppo locale usando l'account Azure dello sviluppatore. Questo approccio è spesso il modo più semplice per eseguire l'autenticazione ai servizi di Azure durante lo sviluppo locale perché non richiede la creazione e la gestione di entità servizio o segreti.

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

Per consentire a un'applicazione di eseguire l'autenticazione in Azure durante lo sviluppo locale usando le credenziali di Azure dello sviluppatore, lo sviluppatore deve prima accedere usando uno degli strumenti da riga di comando supportati:

  • Interfaccia della riga di comando di Azure (az login)
  • Interfaccia della riga di comando per sviluppatori di Azure (azd login)
  • Azure PowerShell (Connect-AzAccount)

Dopo l'accesso, la libreria di identità di Azure per Python può rilevare automaticamente la sessione attiva e recuperare i token necessari dalla cache delle credenziali. Questa funzionalità consente all'app di eseguire l'autenticazione ai servizi di Azure come utente connesso, senza richiedere alcuna configurazione aggiuntiva o segreti hardcoded.

Questo comportamento viene abilitato quando si usa DefaultAzureCredential, che passa automaticamente alle credenziali basate su CLI negli ambienti locali.

L'uso delle credenziali di Azure di accesso di uno sviluppatore è la configurazione più semplice per lo sviluppo locale. Sfrutta l'account Azure esistente di ogni membro del team, consentendo l'accesso facile ai servizi di Azure senza richiedere una configurazione aggiuntiva.

Tuttavia, gli account per sviluppatori hanno in genere autorizzazioni più ampie rispetto a quelle che l'applicazione deve avere nell'ambiente di produzione. Queste autorizzazioni più ampie possono causare incoerenze nei test o inavvertitamente consentire operazioni che l'app non sarebbe autorizzata a eseguire in un ambiente di produzione. Per eseguire il mirroring delle autorizzazioni di produzione e migliorare il comportamento di sicurezza, è invece possibile creare entità servizio specifiche dell'applicazione per lo sviluppo locale. Queste identità:

  • È possibile assegnare solo i ruoli e le autorizzazioni necessarie all'applicazione
  • Supportare il principio del minimo privilegio
  • Offrire test coerenti del comportamento correlato all'accesso tra ambienti

Gli sviluppatori possono configurare l'ambiente locale per utilizzare il service principal tramite variabili di ambiente e DefaultAzureCredential lo rileva automaticamente. Per altre informazioni, vedere l'articolo Autenticare le app Python nei servizi di Azure durante lo sviluppo locale usando le entità servizio.

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

Nella maggior parte degli scenari di sviluppo più sviluppatori contribuiscono alla stessa applicazione. Per semplificare il controllo di accesso e garantire autorizzazioni coerenti all'interno del team, è consigliabile creare prima di tutto un gruppo di sicurezza Microsoft Entra in modo specifico per le esigenze di sviluppo locale dell'applicazione.

L'assegnazione di ruoli di Azure a livello di gruppo, anziché a singoli utenti, offre diversi vantaggi principali:

  • Assegnazioni di ruolo coerenti

    Tutti gli sviluppatori del gruppo ereditano automaticamente gli stessi ruoli e le stesse autorizzazioni, garantendo un ambiente di sviluppo uniforme.

  • Gestione semplificata dei ruoli

    Quando l'applicazione richiede un nuovo ruolo, è necessario aggiungerlo una sola volta al gruppo. Non è necessario aggiornare le autorizzazioni utente individuali.

  • Onboarding semplice

    Ai nuovi sviluppatori possono essere concesse le autorizzazioni necessarie semplicemente aggiungendole al gruppo. Non sono necessarie assegnazioni di ruolo manuali.

Se l'organizzazione ha già un gruppo di sicurezza Microsoft Entra adatto per il team di sviluppo, è possibile riutilizzarlo. In caso contrario, è possibile creare un nuovo gruppo specifico per l'app.

Per creare un gruppo di sicurezza in Microsoft Entra ID, usare il comando az ad group create con l'interfaccia della riga di comando di Azure.

Questo comando richiede i parametri seguenti:

--display-name: nome descrittivo per il gruppo

--mail-nickname: identificatore univoco usato per la posta elettronica e i riferimenti interni

È consigliabile basare il nome del gruppo sul nome dell'applicazione e includere un suffisso come -local-dev indicarne chiaramente lo scopo.

#!/bin/bash
az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"
# PowerShell syntax
az ad group create `
    --display-name MyDisplay `
    --mail-nickname MyDisplay `
    --description "<group-description>"

Dopo aver eseguito il az ad group create comando, copiare il valore della id proprietà dall'output del comando. Per assegnare i ruoli nei passaggi successivi di questo articolo, è necessario disporre del gruppo di sicurezza di Microsoft Entra. Per recuperare nuovamente Object ID in un secondo momento, usare il comando seguente az ad group show: az ad group show --group "my-app-local-dev" --query id --output tsv.

Per aggiungere un utente al gruppo, è innanzitutto necessario ottenere il codice dell'account utente di Azure che si desidera aggiungere. Usare il comando az ad user list con il --filter parametro per cercare un utente specifico in base al nome visualizzato. Il --query parametro consente di limitare l'output ai campi pertinenti:

#!/bin/bash
az ad user list \
--filter "startswith(displayName, 'Bob')" \
--query "[].{objectId:id, displayName:displayName}" \
--output table
# PowerShell syntax
az ad user list `
    --filter "startswith(displayName, 'Bob')" `
    --query "[].{objectId:id, displayName:displayName}" `
    --output table

Dopo aver ottenuto l'ID Object ID dell'utente, puoi aggiungerlo al gruppo usando il comando az ad group member add.

#!/bin/bash
az ad group member add \
    --group <group-name> \
    --member-id <object-id>
# PowerShell syntax
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

Dopo aver creato il gruppo di sicurezza Microsoft Entra e aver aggiunto membri, il passaggio successivo consiste nel determinare quali ruoli (autorizzazioni) l'applicazione richiede e assegnare tali ruoli al gruppo nell'ambito appropriato.

  • Determinare i ruoli obbligatori

    Identificare i ruoli necessari per il funzionamento dell'app. Esempi comuni prevedono:

    • Utente dei segreti di Key Vault: per leggere i segreti da Azure Key Vault
    • Collaboratore ai dati della coda di storage - per inviare messaggi ad Azure Queue Storage

    Per altre opzioni, vedere le definizioni di ruolo predefinite.

  • Scegliere un ambito per l'assegnazione di ruolo

    I ruoli possono essere assegnati in ambiti diversi:

    • Livello di risorsa (ad esempio, un singolo Key Vault o un account di archiviazione)
    • Livello gruppo di risorse (consigliato per la maggior parte delle app)
    • Livello di sottoscrizione (usare con cautela, accesso più ampio)

In questo esempio vengono assegnati ruoli nell'ambito del gruppo di risorse, che è tipico quando tutte le risorse dell'applicazione vengono raggruppate in un unico 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 proprio Object ID.

#!/bin/bash
az role assignment create --assignee <objectId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 
# PowerShell syntax
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 .

#!/bin/bash
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table
# PowerShell syntax
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Per concedere l'accesso in lettura, scrittura ed eliminazione a contenitori BLOB e dati di Archiviazione di Azure per tutti gli account di archiviazione in un gruppo di risorse specifico, assegnare il ruolo Collaboratore ai dati dei BLOB di archiviazione al gruppo di sicurezza Microsoft Entra.

#!/bin/bash
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"
# PowerShell syntax
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

Per eseguire l'autenticazione con l'account Azure, scegliere uno dei metodi seguenti:

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 con Azure, l'applicazione deve usare la DefaultAzureCredential classe del azure-identity pacchetto. Questo è il metodo di autenticazione consigliato sia per le distribuzioni di sviluppo locale che per le distribuzioni di produzione.

In uno scenario di sviluppo locale, DefaultAzureCredential funziona controllando in sequenza le origini di autenticazione disponibili. In particolare, cerca le sessioni attive negli strumenti seguenti:

  • Interfaccia della riga di comando di Azure (az login)
  • Azure PowerShell (Connect-AzAccount)
  • CLI per sviluppatori Azure (azd auth login)

Se lo sviluppatore ha eseguito l'accesso ad Azure usando uno di questi strumenti, DefaultAzureCredential rileva automaticamente la sessione e usa tali credenziali per autenticare l'applicazione con i servizi di Azure. Ciò consente agli sviluppatori di eseguire l'autenticazione in modo sicuro senza archiviare segreti o modificare il codice per ambienti diversi.

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, si vuole:

  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)