← Indice pacchetto onboarding

Identity & Access Audit — AD / Entra ID [xlsx]

Pacchetto onboarding IT Gonzato · Fase P1 · Sys Admin · v1 03/07/2026 · bozza da compilare in azienda

Scopo

Fotografia degli utenti e degli accessi su Active Directory on-prem ed Entra ID (M365): elenco utenti, gruppi e membership, ruoli amministrativi, stato MFA, account dormienti (>90 giorni). Serve a documentare "chi ha accesso a cosa" prima dello split societario e a coprire il requisito NIS 2 di gestione delle identità. Tutti i comandi sotto sono READ-ONLY (Get-*): nessuna modifica di directory in fase di audit. L'obiettivo è documentare, non giudicare l'operato di chi ha configurato il sistema.

Metodo — script PowerShell READ-ONLY

A. Utenti AD (stato, ultimo logon, età password)

Import-Module ActiveDirectory
$soglia = (Get-Date).AddDays(-90)

Get-ADUser -Filter * -Properties LastLogonDate,Enabled,PasswordLastSet,PasswordNeverExpires,whenCreated,Description |
  Select-Object SamAccountName,Name,Enabled,LastLogonDate,PasswordLastSet,PasswordNeverExpires,whenCreated,Description,
    @{N='Dormiente90gg';E={ $_.LastLogonDate -lt $soglia }} |
  Sort-Object LastLogonDate |
  Export-Csv .\ad-users.csv -NoTypeInformation -Encoding UTF8

B. Membership dei gruppi (ricorsiva — annidamento incluso)

Get-ADGroup -Filter * -Properties Members | ForEach-Object {
  $g = $_.Name
  Get-ADGroupMember -Identity $_ -Recursive -ErrorAction SilentlyContinue |
    Select-Object @{N='Gruppo';E={$g}}, SamAccountName, Name, objectClass
} | Export-Csv .\ad-group-membership.csv -NoTypeInformation -Encoding UTF8

C. Gruppi privilegiati AD (Domain/Enterprise Admins, ecc.)

'Domain Admins','Enterprise Admins','Schema Admins','Administrators','Account Operators','Server Operators' |
  ForEach-Object {
    $grp = $_
    Get-ADGroupMember -Identity $grp -Recursive -ErrorAction SilentlyContinue |
      Select-Object @{N='GruppoPriv';E={$grp}}, SamAccountName, Name, objectClass
  } | Export-Csv .\ad-privileged.csv -NoTypeInformation -Encoding UTF8

D. Utenti Entra ID + stato account (Microsoft.Graph)

Connect-MgGraph -Scopes 'User.Read.All','Directory.Read.All','UserAuthenticationMethod.Read.All','AuditLog.Read.All'

Get-MgUser -All -Property Id,DisplayName,UserPrincipalName,AccountEnabled,SignInActivity,CreatedDateTime |
  Select-Object DisplayName,UserPrincipalName,AccountEnabled,CreatedDateTime,
    @{N='LastSignIn';E={$_.SignInActivity.LastSignInDateTime}} |
  Export-Csv .\entra-users.csv -NoTypeInformation -Encoding UTF8

E. Metodi di autenticazione / MFA per utente

$mfa = foreach ($u in (Get-MgUser -All -Property Id,UserPrincipalName)) {
  $methods = Get-MgUserAuthenticationMethod -UserId $u.Id -ErrorAction SilentlyContinue
  $types = ($methods.AdditionalProperties.'@odata.type' -replace '#microsoft.graph.','')
  [pscustomobject]@{
    UPN        = $u.UserPrincipalName
    MetodiMFA  = ($types -join '; ')
    SoloPassword = (($types | Where-Object { $_ -ne 'passwordAuthenticationMethod' }).Count -eq 0)
  }
}
$mfa | Export-Csv .\entra-mfa.csv -NoTypeInformation -Encoding UTF8

F. Ruoli di directory attivi (admin Entra)

Get-MgDirectoryRole -All | ForEach-Object {
  $role = $_.DisplayName
  Get-MgDirectoryRoleMember -DirectoryRoleId $_.Id -ErrorAction SilentlyContinue | ForEach-Object {
    [pscustomobject]@{ Ruolo = $role; MembroId = $_.Id }
  }
} | Export-Csv .\entra-admin-roles.csv -NoTypeInformation -Encoding UTF8

Template tabella di output — Utenti

SamAccount/UPNNomeSocietàEnabledUltimo logonPassword impostata ilMFADormiente >90ggNote
[da compilare]

Template tabella di output — Account amministrativi

AccountRuolo/gruppo privAmbito (AD/Entra)Persona reale?MFAGiustificato?OwnerNote
[da compilare]

Template tabella di output — Account dormienti (>90gg)

AccountUltimo logonEnabledGruppiIpotesi (ex-dip/servizio)Azione proposta (P2)
[da compilare]

Sintesi da compilare

Nota: i risultati vanno discussi col team come lettura congiunta ("aiutami a capire perché è così"), non come contestazione. Le azioni correttive si pianificano in P2/P3.