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
Fornire parametri ad un Web component HTML
Interagire con Azure DevOps tramite MCP Server
Escludere alcuni file da GitHub Copilot
Evitare la compressione degli artefatti in un workflow di GitHub
Integrare modelli AI in un workflow di GitHub
Ottimizzare la content-visibility in CSS specificando lo spazio da occupato dall'area non renderizzata
Utilizzare Intersect e Except per filtrare set di dati in TSql
Integrare SQL Server in un progetto .NET Aspire
Eseguire i pre-commit hook di git con dependabot
Raggruppamento degli aggiornamenti di dipendenze tra directory in un monorepo con Dependabot
Evitare memory leaks nelle closure JavaScript




