Padroneggiare il flusso di managed identity con PowerShell e Microsoft Graph
By Mirko Peters ·
Bentornato sul blog del podcast! Se ti è mai capitato di trovarti in difficoltà con le password inserite direttamente nel codice, con i fastidiosi client secret da gestire o con la preoccupazione che le credenziali finiscano esposte negli script automatizzati, sei nel posto giusto. L'automazione nel cloud richiede un cambio di prospettiva sulla sicurezza. Sono finiti i tempi in cui gli amministrat
Automatically translated with AI from the original post. Read the English original
Bentornato sul blog del podcast! Se ti è mai capitato di trovarti in difficoltà con le password inserite direttamente nel codice, con i fastidiosi client secret da gestire o con la preoccupazione che le credenziali finiscano esposte negli script automatizzati, sei nel posto giusto. L'automazione nel cloud richiede un cambio di prospettiva sulla sicurezza. Sono finiti i tempi in cui gli amministratori potevano nascondere le credenziali in file di configurazione in chiaro o in variabili d'ambiente senza doversi guardare alle spalle. Oggi approfondiamo l'autenticazione cloud-native, in particolare come usare le managed identity di Azure all'interno dei tuoi script PowerShell per autenticarti in modo sicuro su Microsoft Graph, senza memorizzare credenziali sensibili.
Automatizzare l'ambiente Microsoft 365 non è più una competenza accessoria; è una necessità operativa assoluta. Tuttavia, combinare PowerShell con l'API di Microsoft Graph può a volte sembrare un labirinto di richieste di autorizzazione, limiti di throttling e flussi complessi di acquisizione dei token. Spostando la mentalità verso flussi di lavoro moderni e basati sull'identità, possiamo eliminare del tutto la gestione delle credenziali per i carichi di lavoro che girano in Azure. In questo post analizziamo i componenti essenziali dell'autenticazione cloud-native, guidandoti attraverso i prerequisiti, le registrazioni app in Azure AD, i flussi di acquisizione dei token e l'ottimizzazione degli script. Se vuoi approfondire proprio questo flusso di lavoro, ascolta il nostro episodio del podcast di approfondimento: Use Managed Identity with PowerShell for Microsoft Graph.
Prerequisiti per PowerShell + Graph API
Prima di iniziare ad automatizzare le attività di Microsoft 365 con PowerShell e l'API Graph, è necessario preparare correttamente il sistema e l'ambiente. Questa preparazione garantisce un'esecuzione senza intoppi e un accesso sicuro alle risorse di Microsoft Graph.
Installazione dei moduli PowerShell
Devi installare i moduli PowerShell corretti per interagire con l'API di Microsoft Graph. Il Microsoft Graph PowerShell SDK fornisce tutti i cmdlet necessari per questa integrazione. Per evitare errori, verifica che il sistema soddisfi questi requisiti minimi:
| Requisito | Descrizione |
|---|---|
| Versione di PowerShell | È richiesto PowerShell 7 o versione successiva per lo scripting cloud moderno. |
| .NET Framework | È necessario .NET Framework 4.7.2 o successivo, soprattutto negli ambienti Windows. |
| PowerShellGet | Aggiorna PowerShellGet all'ultima versione per garantire la stabilità della gestione dei moduli. |
| Criterio di esecuzione | Imposta il criterio di esecuzione su RemoteSigned o su un valore meno restrittivo per consentire l'importazione degli script. |
Puoi aggiornare PowerShellGet eseguendo Install-Module PowerShellGet -Force e impostare il criterio di esecuzione con Set-ExecutionPolicy RemoteSigned. Dopodiché, installa il modulo Microsoft Graph usando:
Install-Module Microsoft.Graph -Scope CurrentUserQuesto comando scarica l'ultima versione stabile del modulo, consentendoti di richiamare facilmente gli endpoint di Microsoft Graph.
Configurazione dell'ambiente Microsoft 365
Configurare correttamente l'ambiente Microsoft 365 è fondamentale per l'automazione. Segui questi passaggi per iniziare:
- Verifica che il sistema soddisfi i requisiti: PowerShell 7.2 o successivo, .NET Framework 4.7.2 o più recente e l'ultimo modulo PowerShellGet.
- Installa il modulo Microsoft Graph PowerShell come mostrato sopra.
- Connettiti al tuo tenant Microsoft 365 importando il modulo e autenticandoti con gli ambiti necessari. Ad esempio:
Connect-MgGraph -Scopes "User.ReadWrite.All","Directory.ReadWrite.All"Questo comando ti chiede di accedere e concede alla sessione le autorizzazioni per leggere e scrivere i dati degli utenti e della directory. Puoi modificare gli ambiti in base alle esigenze della tua automazione.
Comprendere autorizzazioni e ambiti
Autorizzazioni e ambiti definiscono ciò che i tuoi script possono accedere o modificare in Microsoft 365. L'API Microsoft Graph utilizza due tipi principali di autorizzazioni:
- Autorizzazioni delegate: si applicano quando esegui script come utente con accesso. Limitano l'accesso ai dati che l'utente possiede o a cui può accedere.
- Autorizzazioni dell'applicazione: consentono alla tua app o al tuo script di accedere ai dati dell'intera organizzazione senza un utente connesso, tipico dell'automazione in background e dei flussi con identità gestita.
Le autorizzazioni più comuni sono *.Read.All per l'accesso di sola lettura e *.ReadWrite.All per le funzionalità complete di lettura e scrittura. Ad esempio, SecurityActions.Read.All ti permette di visualizzare le azioni di sicurezza, mentre SecurityActions.ReadWrite.All ti consente di modificarle.
Le autorizzazioni dell'applicazione richiedono il consenso dell'amministratore. Un amministratore del tenant deve approvarle per garantire la sicurezza. Inoltre, gli utenti hanno bisogno dei ruoli appropriati di Microsoft Entra, come Lettore di sicurezza, per accedere ai dati sensibili. Questo accesso basato sui ruoli aggiunge un ulteriore livello di sicurezza.
Quando ti connetti con Microsoft Graph PowerShell SDK, specifica solo gli ambiti di cui lo script ha bisogno. Questa pratica segue il principio del privilegio minimo e riduce i rischi per la sicurezza. Tieni presente che le autorizzazioni concesse alla tua app si applicano a tutti gli utenti di quell'app, quindi verificale e gestiscile regolarmente.
Identità dell'app in Azure AD
Registrazione di una nuova app
Per automatizzare le attività di Microsoft 365 con PowerShell e Graph API, devi prima registrare un'applicazione in Azure Active Directory (Azure AD). Questa app funge da identità che i tuoi script usano per accedere in modo sicuro a Microsoft Graph. Segui questi passaggi per registrare la tua app:
- Apri il portale di Azure e vai a Azure Active Directory > Registrazioni app > Nuova registrazione.
- Assegna alla tua app un nome significativo, ad esempio «My Graph Automation App».
- Scegli i tipi di account supportati:
- Tenant singolo: possono accedere solo gli utenti del tuo tenant di Azure AD.
- Multi-tenant: possono accedere gli utenti di qualsiasi tenant di Azure AD.
- Multi-tenant e account personali: include gli utenti di Azure AD e gli account Microsoft personali.
- Imposta l'URI di reindirizzamento in base al tipo di app:
- Per le app web, usa un URL come
https://yourapp.com/auth/callback. - Per le app a pagina singola, usa
https://yourapp.com. - Per le app mobili o desktop, usa
https://login.microsoftonline.com/common/oauth2/nativeclient.
- Per le app web, usa un URL come
- Fai clic su Registra per creare la tua app.
Questo processo crea un'identità applicazione univoca nel tuo tenant. Userai questa identità per richiedere token e chiamare l'API Microsoft Graph.
Configurazione delle autorizzazioni API
Dopo aver registrato l'app, devi configurare le autorizzazioni API di cui ha bisogno. Queste autorizzazioni controllano ciò che l'app può accedere o modificare in Microsoft 365. Per impostare le autorizzazioni:
- Nella registrazione dell'app, vai a Autorizzazioni API > Aggiungi un'autorizzazione > Microsoft Graph.
- Scegli Autorizzazioni dell'applicazione se lo script viene eseguito senza interfaccia o tramite un contesto di identità gestita, oppure Autorizzazioni delegate se viene eseguito in modo interattivo.
- Seleziona le autorizzazioni specifiche di cui la tua app ha bisogno, ad esempio
User.Read.AlloDirectory.Read.All. - Fai clic su Aggiungi autorizzazioni per applicarle.
⚠️ Applica sempre il principio del privilegio minimo. Assegna solo le autorizzazioni di cui la tua app ha bisogno per ridurre i rischi per la sicurezza.
Alcune autorizzazioni richiedono il consenso dell'amministratore prima che l'app possa usarle. Puoi concedere questo consenso facendo clic su Concedi consenso dell'amministratore per [nome tenant] nel portale di Azure. Verifica regolarmente le autorizzazioni per evitare di assegnare alla tua app più privilegi del necessario.
Generazione di un segreto client o di un certificato
La tua app ha bisogno di credenziali per autenticarsi in modo sicuro con Azure AD se non usi un'identità gestita. Puoi usare un client secret oppure un certificato. Entrambi i metodi dimostrano l'identità della tua app quando richiede i token.
| Metodo | Vantaggi | Svantaggi |
|---|---|---|
| Client Secret | Facile da creare e da usare; funziona con molti flussi di autenticazione. | Funziona come una password; può essere esposto se non viene archiviato in modo sicuro; nessun avviso automatico in caso di compromissione. |
| Certificato | Più sicuro; non invia il certificato vero e proprio durante l'autenticazione; supporta la revoca immediata. | Più complesso da gestire; richiede un monitoraggio solido del ciclo di vita. |
Per creare un client secret, vai su Certificati e segreti nella registrazione della tua app, seleziona Nuovo client secret, aggiungi una descrizione e imposta un periodo di scadenza. Per i certificati, carica un file di certificato valido nella stessa sezione.
Acquisizione dei token di accesso
Comprendere OAuth 2.0
OAuth 2.0 svolge un ruolo fondamentale nel proteggere l'accesso all'API di Microsoft Graph quando usi PowerShell + Graph API. Funge da custode affidabile che consente alle tue applicazioni di autenticarsi in modo sicuro e di ottenere token di accesso. Questi token funzionano come chiavi digitali, concedendo ai tuoi script il permesso di chiamare gli endpoint di Microsoft Graph senza esporre direttamente le tue credenziali.
Per usare OAuth 2.0, devi prima registrare la tua applicazione in Azure Active Directory (Azure AD). Questa registrazione fornisce le credenziali client, come un ID applicazione e un secret oppure un certificato. Quando lo script richiede un token di accesso, presenta queste credenziali ad Azure AD. Azure AD verifica quindi la tua identità e rilascia un token a breve durata. Lo script include questo token nelle richieste API per dimostrare di avere il diritto di accedere alle risorse richieste.
Questo processo garantisce un accesso sicuro e controllato ai dati di Microsoft 365. Supporta inoltre autorizzazioni granulari, così i tuoi script ottengono solo l'accesso di cui hanno bisogno. Seguendo gli standard OAuth 2.0, proteggi il tuo ambiente da accessi non autorizzati e allo stesso tempo abiliti una potente automazione con PowerShell + Graph API.
Usare PowerShell per le richieste di token
Puoi acquisire token di accesso tramite diversi flussi di autenticazione, pensati per scenari differenti. Ogni flusso bilancia sicurezza e facilità d'uso in modo diverso. L'API di Microsoft Graph supporta questi flussi comuni:
- Device Code Flow: ideale per dispositivi o script senza browser o capacità di input. Ti autentichi su un dispositivo separato, il che lo rende sicuro e semplice da usare.
- Flusso basato su certificato: progettato per l'automazione headless, questo flusso usa certificati al posto delle password, rafforzando la sicurezza degli script non presidiati.
- Managed Identity Flow: il più adatto ad ambienti cloud-native come Azure Functions o le macchine virtuali, questo flusso sfrutta le identità gestite di Azure per ottenere token senza archiviare segreti.
Device Code Flow
Device Code Flow funziona bene quando esegui script in locale o su dispositivi senza comode opzioni di input. Ti consente di autenticarti in modo interattivo su un altro dispositivo, come il browser del telefono o del PC.
Ecco come usare Device Code Flow con PowerShell:
- Esegui il comando seguente per avviare l'autenticazione con codice del dispositivo:
Connect-MgGraph -Scopes "User.Read.All" -DeviceCode - PowerShell visualizza un codice e un URL. Apri l'URL nel browser di un qualsiasi dispositivo.
- Inserisci il codice mostrato in PowerShell e accedi con il tuo account Microsoft 365.
- Dopo l'autenticazione riuscita, PowerShell ottiene un token di accesso e collega la sessione.
💡 Device Code Flow bilancia sicurezza e facilità d'uso. Evita di incorporare credenziali negli script ed è adatto a attività manuali o semi-automatizzate.
Flusso basato su certificato
Il flusso basato su certificato è adatto agli script automatizzati che vengono eseguiti senza interazione dell'utente. Invece di un client secret, usi un certificato per dimostrare l'identità della tua app. Questo metodo riduce i rischi legati alla fuga di segreti.
Per usare questo flusso, segui questi passaggi:
- Registra la tua app in Azure AD e carica un certificato in Certificati e segreti.
- Archivia il certificato in modo sicuro sul computer che esegue lo script.
- Usa PowerShell per richiedere un token specificando il thumbprint del certificato, l'ID client e l'ID tenant.
Ecco un esempio semplificato di come ottenere un token usando un certificato in PowerShell:
$tenantId = "YOUR_TENANT_ID"
$clientId = "YOUR_CLIENT_ID"
$certThumbprint = "YOUR_CERT_THUMBPRINT"
$cert = Get-Item Cert:\CurrentUser\My\$certThumbprint
$body = @{
grant_type = "client_credentials"
client_id = $clientId
scope = "https://graph.microsoft.com/.default"
client_assertion_type = "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"
client_assertion = New-JwtToken -Certificate $cert -TenantId $tenantId -ClientId $clientId
}
$tokenResponse = Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" -Body $body
$accessToken = $tokenResponse.access_token⚠️ Gestire i certificati richiede attenzione. Proteggi le chiavi private e ruota i certificati regolarmente per mantenere la sicurezza.
Flusso di Managed Identity
Il flusso Managed Identity funziona al meglio quando esegui script PowerShell + Graph API all'interno di servizi Azure come Azure Virtual Machines, Azure Functions o Azure Automation. Azure assegna automaticamente un'identità alla tua risorsa, quindi non devi gestire manualmente le credenziali.
Per ottenere un access token tramite Managed Identity, segui questi passaggi:
- Abilita Managed Identity (assegnata dal sistema o assegnata dall'utente) sulla tua risorsa Azure.
- Assegna alla identità le autorizzazioni necessarie di Microsoft Graph API in Azure AD tramite Microsoft Graph PowerShell o Graph Explorer.
- Usa PowerShell per richiedere un token dal servizio locale Azure Instance Metadata Service (IMDS).
Esempio di snippet PowerShell per ottenere un token tramite Managed Identity:
$resource = "https://graph.microsoft.com"
$tokenAuthUri = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=$resource"
$headers = @{ Metadata = "true" }
$response = Invoke-RestMethod -Method Get -Uri $tokenAuthUri -Headers $headers
$accessToken = $response.access_token🔐 Il flusso Managed Identity elimina la necessità di memorizzare segreti negli script. Offre un'autenticazione sicura e senza interruzioni negli ambienti Azure.
Effettuare chiamate API con PowerShell + Graph API

Effettuare chiamate API con PowerShell + Graph API ti permette di interagire in modo efficace con i servizi Microsoft 365. Capire come costruire le richieste HTTP è essenziale per una comunicazione riuscita con l'API.
Costruire le richieste HTTP
Quando interagisci con la Microsoft Graph API, devi costruire correttamente le richieste HTTP. Ecco i componenti chiave di una richiesta HTTP:
- Recupero del token di accesso: usa il token acquisito nell'header.
- Configurazione degli header: imposta gli header necessari, inclusi
Content-Type: application/jsoneAuthorization: Bearer $accessToken. - Richiesta GET/POST: effettua una richiesta esplicita all'endpoint desiderato di Microsoft Graph API.
Usare Invoke-RestMethod
Il cmdlet Invoke-RestMethod semplifica la comunicazione con la Microsoft Graph API. Permette di inviare richieste HTTP e ricevere risposte in modo diretto. Ecco una panoramica rapida del suo comportamento e dei suoi limiti:
| Limite / Fattore | Descrizione |
|---|---|
| Numero massimo di risultati per chiamata | Microsoft consiglia di richiedere meno di 120 risultati per chiamata sugli endpoint più pesanti, per evitare errori. |
| Gestione degli errori | Il cmdlet può restituire un errore 400 Bad Request se la sintassi del filtro della query è errata. |
| Prestazioni | Recuperare i log di directory o i dati di attività di accesso può richiedere molte risorse, da qui la necessità di una corretta paginazione. |
Endpoint API comuni
Diversi endpoint della Microsoft Graph API sono usati di frequente per le attività di gestione di Microsoft 365. Ecco alcuni dei più comuni:
| Endpoint | Caso d'uso |
|---|---|
| Ottenere i conteggi attività dei gruppi di Office 365 | Eseguire un report sui gruppi di Microsoft 365 e identificare le collaborazioni attive. |
| Elencare i piani di un gruppo | Trovare i piani associati a un gruppo di Microsoft 365. |
| Pubblicare conversazioni | Avviare una nuova conversazione all'interno di un gruppo di Microsoft 365. |
| Ottenere il blocco note predefinito | Recuperare il blocco note predefinito di un gruppo. |
Gestire l'output dell'API
Capire le risposte JSON
Quando interagisci con la Microsoft Graph API, questa restituisce i dati in formato JSON. JSON (JavaScript Object Notation) è leggero e facile da leggere. Capire le risposte JSON è fondamentale per manipolare i dati in modo efficace. Una tipica risposta JSON appare così:
{
"id": "1",
"displayName": "John Doe",
"mail": "john.doe@example.com"
}Convertire JSON in oggetti PowerShell
Per lavorare con i dati JSON in PowerShell, devi convertirli in oggetti PowerShell. Questa conversione ti permette di manipolare i dati con facilità. Puoi usare a questo scopo il cmdlet ConvertFrom-Json. Ecco come funziona:
$jsonData = '{"id": "1", "displayName": "John Doe", "mail": "john.doe@example.com"}'
$powerShellObject = $jsonData | ConvertFrom-JsonOra, $powerShellObject contiene proprietà a cui puoi accedere direttamente, come $powerShellObject.displayName.
Filtrare e formattare i dati
Una volta che hai i dati in oggetti PowerShell, puoi filtrarli e formattarli in base alle tue esigenze. PowerShell offre diverse tecniche per affinare l'output dei dati. Per esempio, quando effettui chiamate API puoi usare i parametri di query OData per filtrare i risultati direttamente da Microsoft Graph API.
| Parametro di query | Descrizione | Esempio |
|---|---|---|
| $expand | Restituisce le risorse correlate. | /groups?$expand=members |
| $filter | Filtra i risultati (righe). | /users?$filter=startswith(givenName,'J') |
| $orderby | Ordina i risultati. | /users?$orderby=displayName desc |
| $select | Filtra le proprietà (colonne). | /users?$select=givenName,surname |
| $top | Imposta la dimensione della pagina dei risultati. | /users?$top=2 |
Esportare i risultati
Esportare i risultati dagli script PowerShell è essenziale per una gestione efficace dei dati. Puoi salvare l'output in vari formati, come CSV, JSON o XML. Per esempio, puoi esportare i dettagli degli utenti in questo modo:
$users = Get-MgUser -All
$users | Select-Object DisplayName, Mail | Export-Csv -Path "Users.csv" -NoTypeInformationBest practice e risoluzione dei problemi
Gestione degli errori e dei limiti delle API
Quando lavori con Microsoft Graph API, gli errori derivano spesso da impostazioni specifiche del tenant o problemi di autorizzazioni. Molti utenti eseguono script scaricati da Internet senza adattarli al proprio ambiente, con conseguenti errori. Inoltre, Microsoft Graph applica limiti di frequenza per proteggere i propri servizi. Se lo script invia troppe richieste in poco tempo, l'API restituisce un codice di stato 429. Dovresti rispettare l'intestazione Retry-After e attendere il tempo suggerito prima di riprovare.
| Ambito | Tipo | Limite | Note |
|---|---|---|---|
| Globale (tutti i servizi) | Qualsiasi | 130.000 ogni 10 secondi per app | Limite massimo assoluto per tutti i servizi di Graph |
| Intune (generale) | Qualsiasi | 1.000 per app per tenant ogni 20 secondi | Limite della tua app per tutte le operazioni |

Protezione delle credenziali
Proteggere le credenziali è fondamentale quando si automatizzano attività di Microsoft 365. Usa registrazioni di app e identità gestite per creare identità sicure per le tue applicazioni. Evita, quando possibile, di memorizzare i segreti client in testo normale all'interno degli script.
Ottimizzazione degli script
Script efficienti fanno risparmiare tempo e riducono il consumo di risorse. Usa il recupero selettivo delle proprietà applicando il parametro di query $select, sfrutta i meccanismi di batching e progetta i cicli di automazione con gestori di paginazione puliti.
Padroneggiare i flussi di identità gestite con PowerShell e Microsoft Graph API cambia radicalmente il modo in cui affronti l'automazione cloud. Eliminando i segreti statici e adottando identità cloud-native, costruisci flussi di lavoro resilienti e altamente sicuri che proteggono la tua azienda. Per saperne di più su queste strategie e ascoltare discussioni pratiche sull'amministrazione cloud moderna, non perdere il nostro episodio correlato: Use Managed Identity with PowerShell for Microsoft Graph. Prova subito questi esempi nel tuo tenant di test e porta il tuo framework di automazione al livello successivo!
Domande frequenti
Che cos'è PowerShell?
PowerShell è un framework di automazione delle attività di Microsoft che combina una shell da riga di comando con un linguaggio di scripting per semplificare la gestione dei sistemi e le operazioni cloud.
Che cos'è Microsoft Graph API?
Microsoft Graph API è un endpoint RESTful unificato per accedere a dati e servizi di Microsoft 365, inclusi utenti, gruppi, posta e configurazioni della directory.
Come installo il modulo PowerShell di Microsoft Graph?
Puoi installare il modulo eseguendo Install-Module Microsoft.Graph -Scope CurrentUser nel tuo ambiente PowerShell 7.
Che cosa sono le autorizzazioni delegate e le autorizzazioni dell'applicazione?
Le autorizzazioni delegate consentono alla tua app di agire per conto di un utente con accesso, mentre le autorizzazioni dell'applicazione consentono l'esecuzione in background senza un contesto utente attivo.
Come gestisco i limiti di frequenza delle API?
Controlla sempre il valore Retry-After negli header della risposta quando ricevi uno status code 429, e implementa una logica di retry con backoff esponenziale negli script.
Che cos'è OAuth 2.0?
OAuth 2.0 è un framework di autorizzazione che consente alle applicazioni di ottenere in modo sicuro access token per chiamare API protette, senza esporre le credenziali dell'utente.
Posso usare PowerShell su Linux?
Sì! PowerShell è completamente multipiattaforma e funziona nativamente su Windows, macOS e Linux.
Come esporto i dati da PowerShell?
Puoi esportare dati strutturati in modo semplice con cmdlet come Export-Csv o ConvertTo-Json, a seconda dei requisiti di formato per i report.