← 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/AppTipo (AD svc / Win service / task / app Entra)ScopoDove usato (host/app)SocietàOwner (persona)Password/segreto impostato ilEtà (gg)MFA/eccezioneNote
[da compilare]

Red flag da evidenziare

CondizionePerché contaPriorità
Password >365 giorniMai ruotata, credenziale a rischioAlta
PasswordNeverExpires = true senza vaultNessun ciclo di rotazioneAlta
Account di servizio in Domain AdminsPrivilegio eccessivo per un servizioAlta
Owner sconosciuto / "boh"Nessuno sa a cosa serve → non toccabileMedia
Segreto app Entra scaduto o in scadenza <30ggInterruzione integrazione imminenteMedia
Stesso account su più servizi/societàBlast radius alto, complica lo splitMedia

Piano di rientro (da definire in P3, non ora)

AccountAzione (rotazione/gMSA/vault/dismissione)Dipendenze da verificare primaOwnerFinestra
[da compilare]

Sintesi 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.