In tutte le organizzazioni aziendali prima o poi capita di dover fare un audit. Che sia una operazione periodica, dovuta ad un certo evento come una certificazione ISO piuttosto che un breach di sicurezza, ci siamo passati tutti e sappiamo quanto sia complesso dover dimostrare una timeline completa degli eventi.
In Azure DevOps abbiamo una API molto utile che ci permette di scaricare ed analizzare in modo semplice gli eventi. Ci serve solo un token generato da una utenza con i permessi "View Audit Log" a livello di organizzazione e un semplice script:
$Token="{PAT}"
$OutputFile="{PATH}"
$Base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($Token)"))
$AuditLogURL = "https://auditservice.dev.azure.com/{organization}/_apis/audit/downloadlog?format=csv&startTime={startTime}&endTime={endTime}&api-version=7.1-preview.1"
$AuditInfo = Invoke-RestMethod -Uri $AuditLogURL -Headers @{authorization = "Basic $Base64AuthInfo"} -Method Get -OutFile $OutputFileDi default verrebbe scaricato un file JSON, ma in questo caso per semplicità abbiamo optato per avere un file CSV, perché così sarà più intuitivo e comodo fare una analisi dettagliata, per esempio, tramite Excel o strumenti di reportistica più avanzati come Power BI.
L'elenco degli audit log potrebbe essere veramente lungo, quindi ci conviene sempre filtrare per una data di inizio e fine ben definite. Nel caso non bastasse, in risposta avremo comunque un continuationToken per continuare l'esecuzione della chiamata e ottenere ulteriori risultati.
Ciascuna operazione viene descritta in modo molto preciso, come è giusto che sia.
Azure DevOps Service,,06/25/2025 14:56:20,Organization,myorg (Organization),38cad75d-0000-0000-0000-123456789,2b77a8fd-0000-0000-0000-123456789,Aspitalia.Intranet,,"TFS JobAgent(TfsJobAgent.exe, 20.257.36216.1)",CheckSuite.Completed,"{""CheckSuiteId"":""434c16d1-0000-0000-0000-123456789"",""CheckSuiteStatus"":""TimedOut"",""RunName"":""2025.05.26.6"",""StageName"":""Deploy_Production"",""PipelineName"":""Aspitalia.Intranet"",""CheckRuns"":[{""Id"":""7cb37c1a-0000-0000-0000-123456789"",""Status"":""TimedOut"",""Type"":""Approval"",""Approvers"":""Microsoft.VisualStudio.Services.TFS""}],""CallerProcedure"":""PipelinePolicy.prc_UpdatePolicyBatchEvaluation""}","Checks on stage ""Deploy_Production"" of run ""#2025.05.26.6"" of pipeline ""Aspitalia.Intranet"" in project ""Aspitalia.Intranet"" have been TimedOut"Anche se non proprio comprensibile a colpo d'occhio, possiamo vedere come all'interno dell'organizzazione myorg sia stato eseguito una CheckSuite (una condizione all'interno di un environment (in questo caso "Deploy_Production", per una pipeline chiamata "Aspitalia.Intranet", il giorno 25/6/2025 e che ha dato come risultato un TimedOut, fallendo di conseguenza il proseguimento della pipeline stessa.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
GitHub Copilot CLI in ambienti offline
.NET Aspire vs Dapr: differenze, sovrapposizioni e integrazione
Gestione delle issue type con GitHub
Filtrare i dati in ASP.NET Core usando OpenTelemetry su Azure Monitor
Ottimizzare gli indici con Automatic Index Compaction in Azure SQL Database
Nuova modale riconnessione Blazor
Operazioni tra insiemi di array in Javascript
Utilizzo delle Feature flag in ASP.NET Core
Azure SQL Database per dev: tutte le novità da non perdere
Proteggere l'endpoint dell'agente A2A delle Logic App
Nuove validazioni Form Blazor
Personalizzare le pagine di errore su Azure App Service


