Autorizzazione nelle librerie di Azure SDK per Python

L'autorizzazione in Azure determina le azioni che gli utenti o i servizi autenticati possono eseguire sulle risorse. Questo articolo illustra come implementare l'autorizzazione usando Azure SDK per Python, che illustra modelli, implementazione, risoluzione dei problemi e procedure consigliate. Per la configurazione dettagliata dell'autenticazione, vedere Autenticare le app Python in Azure.

Introduzione

L'autenticazione (AuthN) verifica l'identità di un utente o di un servizio, mentre l'autorizzazione (AuthZ) definisce le operazioni che possono eseguire. In Azure l'autorizzazione garantisce l'accesso sicuro alle risorse, fondamentale per la protezione di applicazioni e dati. Gli sviluppatori possono implementare un'autorizzazione affidabile con Azure SDK per Python per controllare l'accesso in vari flussi di lavoro, dalla gestione delle risorse all'accesso ai dati specifici del servizio.

Modelli di autorizzazione di Azure

Azure offre più meccanismi di autorizzazione per gestire l'accesso. La comprensione di questi modelli è essenziale per un controllo di accesso efficace.

Controllo di accesso di Azure Role-Based

Controllo degli accessi basati sui ruoli di Azure (RBAC) assegna ruoli alle identità in ambiti come sottoscrizioni o gruppi di risorse. I ruoli predefiniti includono Proprietario, Collaboratore e Lettore, mentre i ruoli personalizzati consentono autorizzazioni personalizzate. Quando assegni un ruolo a uno specifico ambito, l'identità (ad esempio un utente o un servizio) ottiene i permessi per tutte le risorse all'interno di tale ambito e i suoi ambiti figlio. Ad esempio, l'assegnazione del ruolo Collaboratore a livello di sottoscrizione consente la gestione di tutte le risorse in tale sottoscrizione. Vedere Informazioni sull'ambito per il controllo degli accessi in base al ruolo di Azure.

Meccanismi specifici del servizio

Alcuni servizi di Azure offrono metodi di autorizzazione univoci:

  • Archiviazione di Azure: usa firme di accesso condiviso e elenchi di controllo di accesso (ACL) per l'accesso ai dati. Vedere Service-Specific Note di autorizzazione per Archiviazione di Azure.
  • Azure Key Vault: consiglia il controllo degli accessi in base al ruolo rispetto ai criteri di accesso legacy. Vedere Service-Specific Note di autorizzazione per Azure Key Vault.
  • Microsoft Graph: usa ambiti EAuth 2.0 e autorizzazioni dell'applicazione. Vedere Service-Specific Note di autorizzazione per Microsoft Graph.

Usare l'autorizzazione in Azure SDK per Python

Azure SDK per Python offre il supporto predefinito per la gestione dell'autenticazione e dell'autorizzazione tramite il azure-identity pacchetto. La DefaultAzureCredential classe supporta vari meccanismi di autenticazione, ad esempio identità gestite e entità servizio, adattandosi a ambienti diversi.

Esempio: Elencare i gruppi di risorse

Questo esempio mostra come Azure SDK per Python usa credenziali (tramite DefaultAzureCredential) per l'autenticazione e come l'autorizzazione determina se l'identità può elencare correttamente i gruppi di risorse. Se l'identità non dispone del ruolo Lettore o superiore nell'ambito della sottoscrizione o del gruppo di risorse, questa chiamata restituisce un errore 403 Accesso negato.

from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient

credential = DefaultAzureCredential()
client = ResourceManagementClient(credential, "<subscription-id>")
resource_groups = client.resource_groups.list()
for rg in resource_groups:
    print(rg.name)

Sostituire <subscription-id> con l'ID sottoscrizione di Azure, che in genere è sotto forma di 00000000-0000-0000-0000-000000000000.

Microsoft Graph con ambiti

Per accedere a Microsoft Graph, usare l'SDK ufficiale di Microsoft Graph per Python, che supporta sia le autorizzazioni delegate che le autorizzazioni dell'applicazione.

Questo esempio illustra come l'SDK usa credenziali per richiedere un token di accesso con l'ambito https://graph.microsoft.com/.default di autorizzazione richiesto e accedere alle risorse di Microsoft Graph. L'identità deve essere autorizzata in Microsoft Entra ID con autorizzazioni dell'applicazione appropriate (ad esempio User.Read.All) per recuperare i dati utente. In caso contrario, la richiesta ha esito negativo con 403 Vietato.

Importante

Verificare che l'app o l'identità disponga di User.Read.All o altre autorizzazioni necessarie concesse da Microsoft Entra ID.

from azure.identity import DefaultAzureCredential
from msgraph.core import GraphClient

credential = DefaultAzureCredential()
client = GraphClient(credential=credential, scopes=["https://graph.microsoft.com/.default"])

response = client.get("/users")
users = response.json().get("value", [])
for user in users:
    print(user["displayName"])

Altre informazioni su questo SDK sono disponibili nell'esercitazione ufficiale creare app Python con Microsoft Graph .

Diagnosticare gli errori di autorizzazione

I problemi di autorizzazione spesso causano errori HTTP 403 Non consentiti, che indicano autorizzazioni insufficienti. Per diagnosticare questi problemi:

  • Controllare i messaggi di errore: esaminare la risposta per informazioni dettagliate sulle autorizzazioni mancanti.

  • Abilitare la registrazione: usare Python registrazione per esaminare le richieste e le risposte.

    import logging
    logging.basicConfig(level=logging.DEBUG)
    
  • Verificare l'accesso: usare interfaccia della riga di comando di Azure o il portale di Azure per controllare le assegnazioni di ruolo.

    az role assignment list --assignee <principal-id> --scope <scope>
    

    Sostituire <principal-id> con l'ID oggetto dell'utente, dell'entità servizio o dell'identità gestita. Sostituire <scope> con un ambito di risorsa di Azure, ad esempio un ID sottoscrizione, un nome di gruppo di risorse o una risorsa. Vedere Usare gli ambiti.

Usare gli ambiti

Spesso è necessario fornire un ambito, come nell'esempio seguente:

az role assignment list \
    --assignee <principal-id> \
    --scope <scope>

Ecco alcuni formati di ambito comuni:

Livello ambito Valore di esempio
Subscription /subscriptions/<subscription-id>
Gruppo di risorse /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>
Nome della risorsa /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name>

Ad esempio, per elencare tutte le assegnazioni di ruolo per un'identità gestita a livello di gruppo di risorse:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>/resourceGroups/my-resource-group

Oppure a livello di sottoscrizione:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>

Per recuperare l'ID oggetto (<principal-id>) di un utente o di un'identità gestita, usare:

az ad user show --id <user-email> --query id
az identity show --name <identity-name> --resource-group <rg-name> --query principalId

Gestire l'accesso

Gestire l'accesso tramite le assegnazioni di ruolo usando:

  • portale di Azure: Aggiungi ruoli tramite il menu del servizio Controllo di accesso (IAM).

  • Interfaccia della riga di comando di Azure:

    az role assignment create --assignee <principal-id> --role <role-name> --scope <scope>
    

    Sostituire <principal-id> con l'ID oggetto dell'utente, dell'entità servizio o dell'identità gestita. Sostituire <scope> con un ambito di risorsa di Azure, ad esempio un ID sottoscrizione, un nome di gruppo di risorse o un nome di risorsa. Vedere Usare gli ambiti.

  • Template ARM: usare per la gestione dichiarativa.

Per le identità gestite, assegnare ruoli all'identità associata a risorse come le macchine virtuali. Usare la funzionalità Verifica accesso del portale di Azure o l'interfaccia della riga di comando di Azure per verificare le autorizzazioni valide.

Note di autorizzazione specifiche del servizio

Nella sezione Meccanismi specifici del servizio si è appreso che alcuni servizi Azure offrono metodi di autorizzazione univoci. Questa sezione fornisce altri dettagli per ognuno dei tre servizi di Azure menzionati.

Archiviazione di Azure

  • RBAC (Controllo degli accessi in base al ruolo): gestisce le operazioni del piano di controllo.
  • SAS e ACL: controlla l'accesso al piano dati, con il supporto per l'autenticazione di Microsoft Entra.

Esempio: Accedere ai BLOB con l'ID Microsoft Entra

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

credential = DefaultAzureCredential()
client = BlobServiceClient(account_url="https://<account-name>.blob.core.windows.net", credential=credential)
containers = client.list_containers()
for container in containers:
    print(container.name)

Sostituire <account-name> con il nome dell'account di archiviazione di Azure.

Azure Key Vault (Archivio chiavi di Azure)

Usare RBAC anziché i criteri di accesso precedenti per coerenza. I criteri di accesso sono ancora supportati ma non preferiti.

Esempio: Recuperare un segreto

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
client = SecretClient(vault_url="https://<vault-name>.vault.azure.net", credential=credential)
secret = client.get_secret("my-secret")
print(secret.value)

Sostituire <vault-name> con il nome della risorsa di Key Vault.

Microsoft Graph

Usa gli ambiti OAuth 2.0 per le autorizzazioni delegate e le autorizzazioni dell'applicazione per le app daemon. Specificare gli ambiti come illustrato nell'esempio precedente.

Procedure consigliate

  • Privilegio minimo: assegnare solo le autorizzazioni necessarie, ad esempio Lettore anziché Collaboratore.
  • Preferisci RBAC: Soprattutto per Key Vault, per un controllo di accesso unificato.
  • Usare identità gestite: evitare di gestire le credenziali nel codice.
  • Limitare le autorizzazioni di Graph: richiedere ambiti specifici per ridurre al minimo i rischi.

Passaggi successivi