Questo script estrae dal Unified Audit Log di Microsoft 365 tutte le modifiche apportate dagli amministratori alle Sensitivity Labels e alle DLP Policy del tenant. L’estrazione è limitata alla giornata precedente alla data di esecuzione e i risultati vengono esportati in un file CSV.
<#
================================================================================
SCRIPT: Audit Log – Modifiche Sensitivity Labels e DLP Policy (Admin)
DESCRIZIONE:
Estrae dal Unified Audit Log di Microsoft 365 tutte le modifiche effettuate
dagli amministratori su:
- Sensitivity Labels
- DLP Policy e relative regole
limitatamente al giorno precedente alla data di esecuzione.
================================================================================
#>
# ===========================
# CONFIGURAZIONE DATE
# ===========================
$ReportDate = (Get-Date).AddDays(-1)
$StartDate = $ReportDate.Date
$EndDate = $ReportDate.Date.AddDays(1).AddSeconds(-1)
$DateString = $ReportDate.ToString("yyyyMMdd")
$CsvPath = "C:\AuditLogs\Compliance_AdminChanges_$DateString.csv"
# ===========================
# CONNESSIONI
# ===========================
Import-Module ExchangeOnlineManagement
Import-Module Microsoft.Graph.Identity.DirectoryManagement
Connect-ExchangeOnline -ShowBanner:$false
Connect-MgGraph -Scopes "Directory.Read.All"
# ===========================
# RECUPERO UTENZE AMMINISTRATIVE
# ===========================
$AdminRoleIds = Get-MgDirectoryRole | Select-Object -ExpandProperty Id
$AdminUsers = foreach ($RoleId in $AdminRoleIds) {
Get-MgDirectoryRoleMember -DirectoryRoleId $RoleId -All |
Where-Object { $_.'@odata.type' -eq "#microsoft.graph.user" } |
Select-Object -ExpandProperty UserPrincipalName
}
$AdminUsers = $AdminUsers | Sort-Object -Unique
# ===========================
# OPERAZIONI DA MONITORARE
# ===========================
$Operations = @(
# Sensitivity Labels
"CreateLabel",
"SetLabel",
"DeleteLabel",
"UpdateLabelPolicy",
"SetLabelPolicy",
# DLP Policy
"New-DlpCompliancePolicy",
"Set-DlpCompliancePolicy",
"Remove-DlpCompliancePolicy",
"New-DlpComplianceRule",
"Set-DlpComplianceRule",
"Remove-DlpComplianceRule"
)
# ===========================
# ESTRAZIONE AUDIT LOG
# ===========================
$AuditResults = @()
foreach ($Admin in $AdminUsers) {
$Logs = Search-UnifiedAuditLog `
-StartDate $StartDate `
-EndDate $EndDate `
-UserIds $Admin `
-Operations $Operations `
-RecordType SecurityComplianceCenter `
-ResultSize 5000
foreach ($Log in $Logs) {
$AuditResults += [PSCustomObject]@{
DateTime = $Log.CreationDate
AdminUser = $Log.UserIds
Operation = $Log.Operations
ObjectId = $Log.ObjectId
ClientIP = $Log.ClientIP
Result = $Log.ResultStatus
AuditData = $Log.AuditData
}
}
}
# ===========================
# ESPORTAZIONE CSV
# ===========================
if ($AuditResults.Count -gt 0) {
$AuditResults |
Sort-Object DateTime |
Export-Csv -Path $CsvPath -NoTypeInformation -Encoding UTF8
}
# ===========================
# DISCONNESSIONE
# ===========================
Disconnect-ExchangeOnline -Confirm:$false
Disconnect-MgGraph