DanpLab · Lab NoteArchitettura operativa

Identity Lifecycle Automation: dal ticket manuale al provisioning zero-touch

Come ho costruito un sistema end-to-end che automatizza l'intero ciclo di vita delle identità IT — onboarding, offboarding, riattivazione, dispositivi, MFA e audit — riducendo i tempi da ore a minuti e azzerando gli account orfani.

11 min di letturaNota basata su utilizzo operativo reale
automazionemicrosoftsicurezzahomelab

Il problema: quando l'identità è un processo manuale

In un'organizzazione con oltre 1.000 dipendenti e turnover continuativo, la gestione manuale delle identità IT è un rischio operativo concreto. Ogni nuovo assunto richiede: creazione account, assegnazione licenze, configurazione gruppi, consegna credenziali. Ogni uscita richiede: blocco accessi, revoca licenze, rimozione gruppi, documentazione.

Quando tutto questo avviene via ticket email, i problemi sono inevitabili:

  • Tempi lunghi: 2-4 ore per un onboarding completo, con l'IT che diventa collo di bottiglia
  • Errori umani: account con permessi sbagliati, licenze dimenticate, gruppi non assegnati
  • Account orfani: ex dipendenti con accessi attivi per giorni o settimane dopo la fine del rapporto — il rischio di sicurezza più grave
  • Zero audit trail: nessuna traccia strutturata di chi ha fatto cosa, quando, e con quale esito
  • Configurazioni difformi: ogni operatore crea account in modo leggermente diverso

Questo articolo descrive il sistema che ho progettato e implementato per risolvere questi problemi: un'architettura end-to-end che automatizza l'intero ciclo di vita delle identità, dal trigger HR alla consegna del dispositivo, con audit trail completo e compliance GDPR/NIS2.


Architettura del sistema

Il sistema è composto da tre layer distinti che collaborano:

SOURCE OF TRUTH — HR Database SQL Server → sync → hires_queue LAYER 1 — AUTOMATION ORCHESTRATION n8n Engine orchestrator PowerShell + Kerberos Graph API Microsoft 365 PostgreSQL audit + state Active Directory on-prem · GROUND Entra ID cloud · CREW Exchange on-prem + Online Intune devices LAYER 2 — OPERATIONAL DASHBOARD Flask + Gunicorn → SSO Entra ID → KPI real-time device assignment · TAP · password reset · PDF delivery LAYER 3 — AUDIT & COMPLIANCE Audit trail PostgreSQL · HR↔AD/Entra reconciliation · Reports · GDPR/NIS2

Due categorie di dipendenti, due percorsi

Il sistema distingue due tipologie di personale con requisiti completamente diversi:

| | GROUND (personale di terra) | CREW (personale navigante) | |---|---|---| | Tipo identità | On-premises | Cloud-only | | Directory | Active Directory + Exchange | Entra ID | | Provisioning | PowerShell via Kerberos | Microsoft Graph API | | Credenziali | Password AD + Remote Mailbox | Password cloud + TAP | | Offboarding | Disable → OU DISMISSED (Day 30) | Disable → Delete cloud (Day 30) |

Questa distinzione è fondamentale: il personale di terra mantiene identità on-prem per compatibilità con sistemi legacy, mentre il personale navigante è gestito interamente nel cloud Microsoft.

HR Trigger hires_queue → is_crew? GROUND (on-prem) PowerShell + Kerberos Invoke-Command → DC Create AD User OU + groups + UPN Remote Mailbox Exchange on-prem → AD Connect sync → Entra ID CREW (cloud-only) Graph API app registration Create Entra User UPN + password + profile Add to Group Personale Navigante → License M365 + TAP OTS

Onboarding: dal trigger HR all'account pronto

Il flusso di onboarding è completamente automatizzato e si divide in sei step sequenziali:

1 Validate input check 2 Create AD / Entra ID 3 Sync AD Connect 4 License M365 assign 5 Groups Teams + DL 6 Deliver OTS + email ~30s ~60s ~120s ~30s ~60s ~30s Total: ~8 minutes (vs 2-4 hours manual)

Step 1 — Validazione input

Il workflow riceve i dati del dipendente (nome, cognome, reparto, ruolo, responsabile) dalla coda di onboarding, alimentata da una sincronizzazione con il database HR. Il primo step valida il payload: campi obbligatori presenti, formato email corretto, esistenza del reparto nel mapping configurato. Se qualcosa non va, una notifica viene inviata al richiedente — nessun account viene creato con dati incompleti.

Step 2 — Creazione account

GROUND: uno script PowerShell crea l'account in Active Directory nella OU corretta, imposta display name, UPN, numero interno e forza il cambio password al primo accesso. L'operazione avviene via Invoke-Command con autenticazione Kerberos — il container Linux non ha cmdlet AD nativi, quindi ogni operazione passa per una sessione remota sul domain controller.

CREW: il workflow chiama Microsoft Graph API per creare l'utente direttamente su Entra ID. Subito dopo, l'utente viene aggiunto al gruppo del personale navigante.

Step 3 — Sincronizzazione identità cloud

Per il personale GROUND, il workflow attende la propagazione della sync di AD Connect verso Entra ID. Un polling sull'API Graph con retry e backoff esponenziale verifica la disponibilità dell'utente cloud prima di procedere. Solo quando l'identità è confermatamente presente in entrambi i sistemi, il flusso continua.

Step 4 — Assegnazione licenze

Tramite Microsoft Graph API viene assegnata la licenza Microsoft 365 configurata per il reparto. I profili licenza sono mappati in un nodo di configurazione aggiornabile senza modificare il workflow — basta cambiare il mapping, non riscrivere il flusso.

Step 5 — Configurazione gruppi e Teams

L'utente viene aggiunto automaticamente ai gruppi di sicurezza, distribution list e team Microsoft Teams in base al reparto di appartenenza. Il mapping reparto→gruppi è centralizzato e mantenibile.

Step 6 — Consegna credenziali e handoff

Le credenziali temporanee vengono consegnate tramite un servizio di link monouso (TTL 24h per l'utente, 7gg per l'IT) che include password e istruzioni per il primo accesso. In parallelo:

  • Un report riepilogativo viene inviato al team IT
  • Una email di notifica parte verso il responsabile del nuovo dipendente
  • L'email aziendale generata viene scritta nel record HR per chiudere il cerchio

Tempo medio dall'inizio alla fine: meno di 8 minuti, contro le 2-4 ore del processo manuale precedente.


Offboarding: il processo più critico

Un account attivo di un ex dipendente è un rischio di sicurezza immediato. L'offboarding è progettato con una filosofia conservativa: mai forzare, mai cancellare d'ufficio, sempre verificare prima di agire.

DAY 0 DAY 0 DAY 30 DAY 60 leave event disabled period recycle bin GROUND Disable AD account save groups_snapshot Disabled in AD access revoked <60s Move OU DISMISSED verify live AD first CREW Reset pwd + revoke disable Entra ID Disabled in Entra all sessions killed DELETE via Graph verify live Entra first ↻ Reactivation within 30 days: restore from groups_snapshot — no recreation needed

Day 0 — Blocco immediato

Quando un evento di leave entra nella coda, il sistema agisce entro secondi:

GROUND: script PowerShell disabilita l'account AD e lo prepara per lo spostamento nella OU di dismiss.

CREW: Graph API resetta la password casuale, revoca tutte le sessioni attive (revokeSignInSessions), disabilita l'account su Entra ID. L'accesso a tutti i servizi cloud viene interrotto immediatamente.

Prima di qualsiasi azione, lo stato dei gruppi viene salvato in un snapshot JSON — questo permette una riattivazione rapida se il dipendente torna (es. contratto a termine rinnovato).

Day 30 — Dismiss definitivo

GROUND: un job giornaliero verifica i candidati allo spostamento (disable completato + 30 giorni passati). Prima di spostare, verifica live su AD che l'account sia ancora disabilitato — se nel frattempo è stato riattivato, lo spostamento viene annullato e l'item segnalato come anomalia. L'account viene spostato in una OU dedicata che lo esclude dalla sync di Entra Connect → Microsoft cancella automaticamente identità cloud e mailbox. L'oggetto AD non viene mai cancellato: resta disabilitato a tempo indeterminato per finalità di audit.

CREW: un job giornaliero verifica i candidati alla cancellazione cloud (30 giorni da leave + 30 giorni da disable). Prima di ogni cancellazione, GET live su Entra ID per confermare che accountEnabled=false. Solo se confermato, il DELETE sposta l'oggetto nel cestino nativo di Entra ID (recuperabile per 30 giorni dal Centro amministrazione M365). Al giorno 60 totale, Microsoft esegue il purge permanente.

Riattivazione

Se un dipendente torna entro 30 giorni, il sistema ripristina automaticamente l'account dallo snapshot dei gruppi salvato al Day 0. Nessuna ricreazione, nessuna riassegnazione manuale — l'identità torna operativa con i permessi originali.


Dashboard operativa

La dashboard è una web application separata, protetta da SSO con Microsoft Entra ID e MFA obbligatorio. L'accesso è limitato a un gruppo di sicurezza nominale; ogni azione è tracciata con l'identità dell'operatore autenticato.

KPI in tempo reale

La dashboard mostra una vista aggregata che unisce dati HR, stato provisioning e asset assegnati:

  • Totale record in coda
  • Pending pronti all'esecuzione
  • Pending schedulati nel futuro
  • Completati
  • Errori (con dettaglio eccezione e step fallito)
  • Assunzioni del giorno
  • Dispositivi assegnati e PC preparati

Operazioni dalla dashboard

| Operazione | Descrizione | |---|---| | Assegnazione dispositivo | L'operatore inserisce il service tag del laptop; il sistema registra l'associazione con timestamp e operatore | | TAP (Temporary Access Pass) | Genera un pass monouso Entra ID per il primo accesso senza password | | Reset password | Reset sicuro con consegna credenziali via link monouso + email | | Completamento configurazione PC | Reset password + notifica IT + email al dipendente con istruzioni | | Verbale di consegna PDF | Generazione automatica del documento di consegna dispositivo, pronto per la firma |


Calcolo del risparmio

Tempo di provisioning

| Metrica | Prima (manuale) | Dopo (automatizzato) | Risparmio | |---|---|---|---| | Onboarding completo | 2-4 ore | ~8 minuti | ~95% | | Offboarding (blocco accessi) | 30-60 min | <60 secondi | ~98% | | Setup nuovo dispositivo | 3-4 ore | ~25 minuti (Autopilot) | ~85% | | Carico operativo IT | 3-4 ore/settimana | ~30 min/settimana | ~85% |

Sicurezza

| Metrica | Prima | Dopo | Miglioramento | |---|---|---|---| | Account orfani post-leave | Frequenti (giorni/settimane) | Zero dal deployment | Eliminazione totale | | Tempo revoca accessi | Ore-giorni | <60 secondi dal trigger | Riduzione critica | | Audit trail | Assente | Completo (operatore, timestamp, esito) | Tracciabilità totale | | Configurazioni difformi | Comuni | Standardizzate per reparto | Consistenza garantita |

Costo

Il sistema gira su infrastruttura esistente (VM, container Docker, licenze M365 già attive). L'unico costo aggiuntivo è il tempo di sviluppo e manutenzione — nessun costo ricorrente per software di terzi.


Compliance: GDPR e NIS2

Il sistema implementa una strategia di difesa in profondità (defense in depth) su quattro livelli indipendenti:

L1 — Network TLS · firewall · VPN L2 — Identity SSO + MFA · Kerberos L3 — Application RBAC · least privilege L4 — Data PostgreSQL · encrypted Audit Trail operator · timestamp · action SSO Entra ID oauth2-proxy MFA Enforced conditional access Kerberos Auth AD operations One-Time Secret TTL 24h/7gg Graph API app permissions TEST_MODE fail-safe Defense in depth: every layer is independently secured · no single point of failure

GDPR (Reg. UE 2016/679)

  • Art. 5 — Limitazione conservazione: account disabilitati e licenze revocate al termine del rapporto. Zero account orfani è un requisito di compliance prima ancora che un KPI tecnico
  • Art. 25 — Privacy by design: accesso dashboard limitato a gruppo nominale, utenti DB separati con permessi minimi, ogni azione registrata con identità operatore. Principio del minimo privilegio applicato a ogni livello dello stack
  • Art. 32 — Sicurezza del trattamento: SSO con MFA obbligatorio, nessun accesso anonimo, trasmissione cifrata TLS end-to-end
  • Art. 33 — Notifica violazioni: il log strutturato permette di ricostruire con precisione chi aveva accesso a cosa e in quale intervallo di tempo — informazione richiesta nelle notifiche al Garante entro 72 ore

NIS2 (Dir. UE 2022/2555)

Il settore del trasporto aereo è classificato nell'Allegato I come settore essenziale, con obblighi di sicurezza più stringenti.

  • Art. 21 — Gestione del rischio: il deprovisioning automatico con revoca accessi in meno di 60 secondi riduce drasticamente la finestra di esposizione post-cessazione
  • Gestione identità e accessi: provisioning standardizzato elimina configurazioni difformi; ogni account è nominale, tracciabile e revocabile centralmente
  • Registrazione e audit: il log strutturato su PostgreSQL con retention configurabile fornisce l'evidenza operativa richiesta in caso di ispezione o incident response

Resilienza e gestione errori

Il sistema è progettato per fallire in modo sicuro (fail-closed), non in modo silenzioso:

  • Retry con backoff esponenziale su operazioni Graph API (rate limit, timeout)
  • Fallback manuale: se uno step fallisce dopo i retry, l'operazione viene sospesa e inviata una notifica IT con istruzioni per intervento — nessun account viene lasciato in stato inconsistente
  • Idempotenza: ogni step verifica lo stato prima di agire, evitando duplicazioni in caso di riesecuzione
  • Rollback parziale: se l'assegnazione licenze fallisce, il workflow notifica e mantiene l'account senza licenze anziché eliminarlo
  • Verifica live prima di azioni distruttive: ogni offboarding verifica lo stato attuale su AD/Entra prima di procedere — se l'account è stato riattivato nel frattempo, l'azione viene annullata
  • TEST_MODE: un flag centralizzato permette di testare l'intero flusso senza effetti collaterali — email redirette a indirizzo di test, azioni distruttive convertite in mock

Stack tecnologico

| Componente | Tecnologia | |---|---| | Orchestrazione | n8n (immagine custom con PowerShell + Kerberos) | | Dashboard | Python Flask + Gunicorn | | Database | PostgreSQL 15 | | Autenticazione dashboard | oauth2-proxy + Microsoft Entra ID SSO | | Reverse proxy | Caddy (TLS automatico) | | Contenitori | Docker Compose | | Active Directory | PowerShell + WinRM via Kerberos | | Cloud identity | Microsoft Graph API | | Licenze e gruppi | Microsoft Graph API | | Email | Microsoft Graph API (application permissions) | | Consegna credenziali | One-time secret (link monouso TTL 24h/7gg) | | Documenti PDF | ReportLab | | Enrollment dispositivi | Microsoft Intune / Autopilot |


Estensioni del sistema

Il sistema è progettato come piattaforma estendibile. Oltre a onboarding e offboarding, gestisce:

  • Rollout MFA: 12 batch group (per dipartimento e ruolo), con workflow di notifica, reminder e enforcement graduato. La classificazione S1-S4 basata su metodi di autenticazione registrati e log di sign-in determina il livello di intervento
  • Monitoraggio certificati e secret: controllo scadenza certificati PFX e client secret delle app registration, con report operativo dettagliato (generazione nuovo secret, aggiornamento configurazione, restart, verifica)
  • Audit di riconciliazione HR↔AD/Entra: confronto periodico tra stato HR (attivo/disattivato) e stato reale su AD/Entra. Classificazione: MISMATCH_CRITICO (HR dice off, sistema dice on), GAP_PROVISIONING, NON_MATCHABILE, OK. Auto-remediation solo per mismatch ad alta confidenza, attraverso il workflow standard di offboarding
  • Monitoraggio Azure Arc: stato connessione server registrati, con classificazione per giorni di disconnessione e workflow di conferma umana per la rimozione
  • Provisioning vendor esterni: architettura pronta (DDL, script, dashboard, workflow) per estendere il ciclo di vita anche a identità esterne

Conclusioni

Un sistema di identity lifecycle management automatizzato non è un lusso tecnico — è un controllo di sicurezza concreto e un requisito di compliance. I benefici si misurano in tre dimensioni:

  1. Tempo: da ore a minuti, liberando il team IT per attività a maggior valore
  2. Sicurezza: zero account orfani, revoca accessi in secondi, audit trail completo
  3. Compliance: evidenza operativa per GDPR, NIS2 e audit ISO 27001

La chiave del successo non è stata la tecnologia singola, ma l'approccio incrementale: partire dal flusso più critico (offboarding), validare in TEST_MODE, flip a produzione solo dopo conferma, poi espandere. Patch chirurgiche, mai riscritture complete. Backup sempre prima di modificare in produzione. E una dashboard che rende lo stato visibile — perché quello che non si vede, non si controlla.