M365Con 2027 – conferenza online gratuita · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Padroneggiare il flusso di managed identity con PowerShell e Microsoft Graph

By ·

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:

RequisitoDescrizione
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.
PowerShellGetAggiorna PowerShellGet all'ultima versione per garantire la stabilità della gestione dei moduli.
Criterio di esecuzioneImposta 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 CurrentUser

Questo 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:

  1. 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.
  2. Installa il modulo Microsoft Graph PowerShell come mostrato sopra.
  3. 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:

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:

  1. Apri il portale di Azure e vai a Azure Active Directory > Registrazioni app > Nuova registrazione.
  2. Assegna alla tua app un nome significativo, ad esempio «My Graph Automation App».
  3. 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.
  4. 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.
  5. 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:

  1. Nella registrazione dell'app, vai a Autorizzazioni API > Aggiungi un'autorizzazione > Microsoft Graph.
  2. 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.
  3. Seleziona le autorizzazioni specifiche di cui la tua app ha bisogno, ad esempio User.Read.All o Directory.Read.All.
  4. 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.

MetodoVantaggiSvantaggi
Client SecretFacile 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.
CertificatoPiù 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

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:

  1. Esegui il comando seguente per avviare l'autenticazione con codice del dispositivo:
    Connect-MgGraph -Scopes "User.Read.All" -DeviceCode
  2. PowerShell visualizza un codice e un URL. Apri l'URL nel browser di un qualsiasi dispositivo.
  3. Inserisci il codice mostrato in PowerShell e accedi con il tuo account Microsoft 365.
  4. 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:

  1. Registra la tua app in Azure AD e carica un certificato in Certificati e segreti.
  2. Archivia il certificato in modo sicuro sul computer che esegue lo script.
  3. 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:

  1. Abilita Managed Identity (assegnata dal sistema o assegnata dall'utente) sulla tua risorsa Azure.
  2. Assegna alla identità le autorizzazioni necessarie di Microsoft Graph API in Azure AD tramite Microsoft Graph PowerShell o Graph Explorer.
  3. 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

Making API Calls with 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:

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 / FattoreDescrizione
Numero massimo di risultati per chiamataMicrosoft consiglia di richiedere meno di 120 risultati per chiamata sugli endpoint più pesanti, per evitare errori.
Gestione degli erroriIl cmdlet può restituire un errore 400 Bad Request se la sintassi del filtro della query è errata.
PrestazioniRecuperare 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:

EndpointCaso d'uso
Ottenere i conteggi attività dei gruppi di Office 365Eseguire un report sui gruppi di Microsoft 365 e identificare le collaborazioni attive.
Elencare i piani di un gruppoTrovare i piani associati a un gruppo di Microsoft 365.
Pubblicare conversazioniAvviare una nuova conversazione all'interno di un gruppo di Microsoft 365.
Ottenere il blocco note predefinitoRecuperare 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-Json

Ora, $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 queryDescrizioneEsempio
$expandRestituisce le risorse correlate./groups?$expand=members
$filterFiltra i risultati (righe)./users?$filter=startswith(givenName,'J')
$orderbyOrdina i risultati./users?$orderby=displayName desc
$selectFiltra le proprietà (colonne)./users?$select=givenName,surname
$topImposta 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" -NoTypeInformation

Best 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.

AmbitoTipoLimiteNote
Globale (tutti i servizi)Qualsiasi130.000 ogni 10 secondi per appLimite massimo assoluto per tutti i servizi di Graph
Intune (generale)Qualsiasi1.000 per app per tenant ogni 20 secondiLimite della tua app per tutte le operazioni

Bar chart comparing Microsoft Graph API rate limits across different scopes and types

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.

Microsoft Graph .NET Microsoft 365 Microsoft Entra ID

Related articles

RSS