0Pricing
Azure Fundamentals · Lezione

Identità gestita per l'autenticazione senza password

Assegnare un'identità gestita assegnata dal sistema a una VM o ad App Service, concederle l'accesso RBAC a Key Vault e Blob Storage ed eliminare i segreti dal codice dell'applicazione.

Identità gestita per l'autenticazione senza password è una lezione Azure Fundamentals gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Azure Fundamentals, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Azure Fundamentals include 4 lezioni in totale.

Il problema delle credenziali archiviate

Tradizionalmente, le applicazioni si connettono a servizi Azure come Storage o Key Vault utilizzando stringhe di connessione o chiavi API archiviate nei file di configurazione o nelle variabili d'ambiente. Queste credenziali possono essere accidentalmente caricate nel controllo del codice sorgente, esposte nei log o sottratte durante una violazione. L'identità gestita elimina completamente la necessità per le applicazioni di archiviare credenziali: Azure stesso emette e rinnova un token per conto della risorsa e l'applicazione si limita a richiedere ad Azure il token corrente durante l'esecuzione.

Che cos'è un'identità gestita?

Un'identità gestita è un service principal gestito automaticamente in Microsoft Entra ID e collegato a una risorsa Azure, ad esempio una VM, un'istanza di App Service o una Function App. La piattaforma Azure crea e gestisce le credenziali dell'identità, rinnovandole regolarmente, così il codice non gestisce mai password o segreti. Le applicazioni in esecuzione sulla risorsa chiamano l'endpoint Azure Instance Metadata Service (IMDS) all'indirizzo http://169.254.169.254 per ottenere un token OAuth a breve durata, che presentano quindi ai servizi Azure.

# Get a token from IMDS (runs inside an Azure VM or App Service)
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://storage.azure.com/' \
  -H 'Metadata: true'

Identità assegnata dal sistema e assegnata dall'utente

Esistono due tipi di identità gestita: l'identità assegnata dal sistema è associata a una singola risorsa Azure; viene creata quando la si abilita nella risorsa ed eliminata automaticamente quando la risorsa viene eliminata. L'identità assegnata dall'utente è un'identità indipendente di Entra ID che si crea separatamente e si collega quindi a una o più risorse Azure. Le identità assegnate dall'utente sono utili quando più servizi, ad esempio diverse Function App, devono condividere la stessa identità e le stesse autorizzazioni RBAC, evitando la duplicazione delle assegnazioni di ruolo.

# Enable system-assigned managed identity on an App Service
az webapp identity assign \
  --resource-group myRG \
  --name myWebApp

# Create and assign a user-assigned identity
az identity create --name mySharedIdentity --resource-group myRG
az webapp identity assign \
  --resource-group myRG \
  --name myWebApp \
  --identities mySharedIdentity

Concessione delle autorizzazioni RBAC

Dopo aver abilitato un'identità gestita, è necessario concederle autorizzazioni RBAC sulla risorsa Azure di destinazione. Ad esempio, per consentire a un App Service di leggere i BLOB, assegni il ruolo Storage Blob Data Reader all'identità gestita dell'App Service nell'account di archiviazione. Le assegnazioni RBAC seguono il principio del privilegio minimo: conceda solo le autorizzazioni minime necessarie. Non assegni mai il ruolo Owner o Contributor a un'identità gestita, salvo assoluta necessità.

# Get the managed identity object ID
PRINCIPAL_ID=$(az webapp identity show \
  --resource-group myRG --name myWebApp \
  --query principalId --output tsv)

# Assign Storage Blob Data Reader role
az role assignment create \
  --assignee $PRINCIPAL_ID \
  --role 'Storage Blob Data Reader' \
  --scope '/subscriptions/<sub>/resourceGroups/myRG/providers/Microsoft.Storage/storageAccounts/mystorageacct'

Uso di DefaultAzureCredential nel codice

Azure SDK offre una classe DefaultAzureCredential che prova automaticamente diversi metodi di autenticazione in un ordine prestabilito: variabili d'ambiente, identità del carico di lavoro, identità gestita, Azure CLI, Visual Studio e altri. Quando l'applicazione viene eseguita in Azure (App Service, VM, Function App), DefaultAzureCredential utilizza automaticamente l'identità gestita senza modifiche al codice. In locale, gli sviluppatori eseguono l'autenticazione tramite la propria sessione di Azure CLI. Questa singola classe di credenziali funziona in tutti gli ambienti senza logica condizionale.

# Python example using DefaultAzureCredential
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

credential = DefaultAzureCredential()
client = BlobServiceClient(
  account_url='https://mystorageacct.blob.core.windows.net',
  credential=credential
)
blobs = client.get_container_client('mycontainer').list_blobs()
for blob in blobs:
    print(blob.name)

Identità gestita con Azure Key Vault

Un modello comune consiste nell'utilizzare un'identità gestita per accedere in fase di esecuzione ai segreti di Azure Key Vault. Invece di archiviare la password di un database nelle impostazioni dell'applicazione, la si archivia in Key Vault e si assegna all'identità gestita dell'app il ruolo Key Vault Secrets User nell'insieme di credenziali. All'avvio, l'applicazione recupera il segreto da Key Vault utilizzando DefaultAzureCredential. Questo modello garantisce che i segreti non vengano mai archiviati nel codice, nei file di configurazione o nelle variabili d'ambiente: esistono solo in Key Vault e vengono recuperati temporaneamente.

# Python: Read a Key Vault secret using managed identity
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
client = SecretClient(
  vault_url='https://mykeyvault.vault.azure.net/',
  credential=credential
)
secret = client.get_secret('DatabasePassword')
print('Secret value retrieved successfully')

Identità gestita per l'accesso ad Azure SQL

Azure SQL Database supporta l'autenticazione Entra ID, il che significa che un'identità gestita può autenticarsi a SQL senza nome utente e password. Per abilitarla: imposti un amministratore Entra ID nel server SQL, quindi esegua un'istruzione CREATE USER nel database di destinazione per il nome visualizzato dell'identità gestita e le assegni il ruolo database appropriato. L'applicazione si connette utilizzando DefaultAzureCredential di Azure SDK e un token di accesso con ambito https://database.windows.net/, interamente senza password.

-- In Azure SQL: create a user for the managed identity
CREATE USER [myWebApp] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [myWebApp];
ALTER ROLE db_datawriter ADD MEMBER [myWebApp];

Identità gestita per i carichi di lavoro AKS

In Azure Kubernetes Service, i singoli pod possono ottenere token di identità gestita utilizzando Workload Identity, il successore di AAD Pod Identity. Si crea un'identità gestita assegnata dall'utente, la si federa con l'emittente OIDC di AKS, si annota l'account del servizio Kubernetes e il webhook Azure Workload Identity inserisce le variabili d'ambiente necessarie affinché DefaultAzureCredential del pod possa ottenere un token. Questo estende l'autenticazione senza password ai microservizi containerizzati senza archiviare segreti negli oggetti Kubernetes Secrets.

# Create federated identity credential for AKS workload identity
az identity federated-credential create \
  --name myFederatedCredential \
  --identity-name mySharedIdentity \
  --resource-group myRG \
  --issuer $(az aks show --resource-group myRG --name myAKS --query 'oidcIssuerProfile.issuerUrl' -o tsv) \
  --subject 'system:serviceaccount:default:myapp-sa' \
  --audiences 'api://AzureADTokenExchange'

Audit degli accessi con identità gestita

Anche se le credenziali delle identità gestite sono invisibili agli sviluppatori, tutti gli eventi di emissione dei token e di accesso alle risorse vengono registrati. I log di accesso di Entra ID registrano ogni richiesta di token effettuata da un'identità gestita, inclusi la risorsa a cui si accede, l'ora e l'esito della richiesta. I log attività di Azure Storage e i log di controllo di Key Vault registrano le operazioni specifiche eseguite utilizzando il token. Questi log sono essenziali per gli audit di sicurezza e le indagini sugli incidenti che coinvolgono le identità gestite.

# Query Entra ID sign-in logs for a managed identity
az monitor activity-log list \
  --resource-group myRG \
  --caller myWebApp \
  --start-time 2024-06-01 \
  --output table

Migrazione dalle stringhe di connessione

Se l'applicazione utilizza attualmente stringhe di connessione o chiavi API, esegua la migrazione all'identità gestita in tre passaggi: Passaggio 1 — Abiliti un'identità gestita nella risorsa di calcolo. Passaggio 2 — Assegni all'identità i ruoli RBAC appropriati in ogni servizio di destinazione. Passaggio 3 — Aggiorni il codice dell'applicazione per utilizzare DefaultAzureCredential al posto della stringa di connessione. Dopo aver verificato la migrazione, rimuova la stringa di connessione dalla configurazione di App Service e da Key Vault. Nelle applicazioni moderne che utilizzano Azure SDK, questa migrazione può essere generalmente completata con modifiche minime al codice.

Riepilogo dei vantaggi in termini di sicurezza

L'identità gestita offre quattro vantaggi fondamentali in termini di sicurezza rispetto all'autenticazione basata su credenziali: Nessuna credenziale archiviata — non c'è nulla da sottrarre o caricare accidentalmente. Rinnovo automatico — Azure rinnova i certificati sottostanti senza tempi di inattività. Autorizzazioni con ambito limitato — alle identità vengono assegnati solo i ruoli RBAC necessari, secondo il principio del privilegio minimo. Traccia di audit completa — tutti i tentativi di accesso vengono registrati in Entra ID e nei log di controllo del servizio a cui si accede. Per ogni nuova integrazione con un servizio Azure, l'identità gestita dovrebbe essere l'approccio di autenticazione predefinito.

Verifica rapida

Verifichi la Sua comprensione dei concetti di Microsoft Azure Fundamentals (AZ-900) trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: l'identità gestita elimina le credenziali memorizzate assegnando alle risorse Azure un'identità Entra ID gestita automaticamente; DefaultAzureCredential nell'Azure SDK usa in modo trasparente l'identità gestita in Azure e le credenziali dello sviluppatore in locale; infine, le assegnazioni di ruolo RBAC nei servizi di destinazione controllano le risorse a cui l'identità può accedere. Ora esamineremo Azure Service Bus per la messaggistica disaccoppiata tra i componenti dell'applicazione.

Domande Frequenti

La lezione «Identità gestita per l'autenticazione senza password» è gratuita?

Sì — il testo completo di «Identità gestita per l'autenticazione senza password» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Azure Fundamentals, passa a CoddyKit PRO. Il corso Azure Fundamentals include 4 lezioni in totale.

Cosa imparerò in «Identità gestita per l'autenticazione senza password»?

Assegnare un'identità gestita assegnata dal sistema a una VM o ad App Service, concederle l'accesso RBAC a Key Vault e Blob Storage ed eliminare i segreti dal codice dell'applicazione. Eserciti Azure Fundamentals con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Azure Fundamentals?

Non è richiesta alcuna esperienza precedente. Azure Fundamentals su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Identità gestita per l'autenticazione senza password»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Azure Fundamentals?

Sì. Ogni lezione Azure Fundamentals include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Identità gestita per l'autenticazione senza password
  2. Azure Service Bus per la messaggistica disaccoppiata
  3. Azure Container Apps
  4. Flusso di lavoro dello sviluppatore end-to-end
← Torna a Azure Fundamentals