Analisi Modifica Etichette e DLP

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