← Indice pacchetto onboarding
Service Accounts Inventory — Gonzato Group / Ind.i.a SpA
Pacchetto onboarding IT Gonzato · Fase P2 · Sys Admin · v1 03/07/2026 · bozza da compilare in azienda
Scopo
Censire gli account di servizio (non-persona) usati da applicazioni, backup, integrazioni, scheduled task e servizi Windows: proprietario, scopo, dove sono usati, età della password. Gli account di servizio con password mai ruotate sono un rischio noto del contesto e vanno mappati per lo split e per NIS 2. Attività READ-ONLY; nessuna rotazione o disabilitazione durante il censimento (rischio interruzione servizi).
Metodo — come trovarli
A. AD: naming convention + password vecchia
Import-Module ActiveDirectory
# Cattura naming tipici (svc-, srv-, sa-, service, app-) + PasswordLastSet datata
Get-ADUser -Filter { Enabled -eq $true } -Properties PasswordLastSet,PasswordNeverExpires,ServicePrincipalNames,Description,LastLogonDate |
Where-Object {
$_.SamAccountName -match '^(svc|srv|sa|app|service)[-_]?' -or
$_.ServicePrincipalNames.Count -gt 0 -or
$_.PasswordNeverExpires -eq $true
} |
Select-Object SamAccountName,Description,PasswordLastSet,PasswordNeverExpires,LastLogonDate,
@{N='SPN';E={$_.ServicePrincipalNames -join ';'}},
@{N='PwdEtaGiorni';E={ (New-TimeSpan -Start $_.PasswordLastSet -End (Get-Date)).Days }} |
Sort-Object PasswordLastSet |
Export-Csv .\service-accounts-ad.csv -NoTypeInformation -Encoding UTF8
B. Servizi Windows / scheduled task che girano con credenziali di dominio
# Da eseguire sui server rilevanti (o via remoting)
Get-CimInstance Win32_Service |
Where-Object { $_.StartName -and $_.StartName -notmatch 'LocalSystem|LocalService|NetworkService|NT AUTHORITY|NT SERVICE' } |
Select-Object SystemName,Name,StartName,State,StartMode |
Export-Csv .\svc-windows-services.csv -NoTypeInformation -Encoding UTF8
Get-ScheduledTask | Where-Object { $_.Principal.UserId -match '\\' } |
Select-Object TaskName,@{N='RunAs';E={$_.Principal.UserId}},State |
Export-Csv .\svc-scheduled-tasks.csv -NoTypeInformation -Encoding UTF8
C. Entra: app registrations / service principals con segreti in scadenza
Connect-MgGraph -Scopes 'Application.Read.All','Directory.Read.All'
Get-MgApplication -All | ForEach-Object {
foreach ($c in $_.PasswordCredentials) {
[pscustomobject]@{ App=$_.DisplayName; SecretFine=$c.EndDateTime; SecretInizio=$c.StartDateTime }
}
} | Export-Csv .\entra-app-secrets.csv -NoTypeInformation -Encoding UTF8
Template tabella di output
| Account/App | Tipo (AD svc / Win service / task / app Entra) | Scopo | Dove usato (host/app) | Società | Owner (persona) | Password/segreto impostato il | Età (gg) | MFA/eccezione | Note |
|---|
| [da compilare] | | | | | | | | | |
Red flag da evidenziare
| Condizione | Perché conta | Priorità |
|---|
| Password >365 giorni | Mai ruotata, credenziale a rischio | Alta |
PasswordNeverExpires = true senza vault | Nessun ciclo di rotazione | Alta |
| Account di servizio in Domain Admins | Privilegio eccessivo per un servizio | Alta |
| Owner sconosciuto / "boh" | Nessuno sa a cosa serve → non toccabile | Media |
| Segreto app Entra scaduto o in scadenza <30gg | Interruzione integrazione imminente | Media |
| Stesso account su più servizi/società | Blast radius alto, complica lo split | Media |
Piano di rientro (da definire in P3, non ora)
| Account | Azione (rotazione/gMSA/vault/dismissione) | Dipendenze da verificare prima | Owner | Finestra |
|---|
| [da compilare] | | | | |
Sintesi da compilare
- Account di servizio individuati:
[da compilare] - Con password >1 anno:
[da compilare] - Con
PasswordNeverExpires: [da compilare] - Senza owner identificato:
[da compilare]
Prima di ruotare qualunque credenziale, mappare le dipendenze col team: molti servizi possono rompersi. Il censimento serve proprio a poterlo fare in sicurezza.