Audit log
Che cosa registra l'audit log di Blu Pantheon, struttura del record, immutabilità, conservazione ed esportazione per le verifiche ispettive.
Nota
Questa pagina descrive le funzionalità di registrazione a supporto della conformità e non costituisce consulenza legale. Il Cliente resta Titolare del trattamento: la scelta dei tempi di conservazione, degli accessi e dell'uso delle evidenze è di sua competenza.
L'audit log è il registro immutabile delle operazioni rilevanti eseguite nel tenant. È lo strumento con cui si dimostra il principio di accountability dell'art. 5.2 GDPR: chi ha fatto che cosa, quando, da dove e con quale esito.
Che cosa viene registrato
Autenticazione e sessioni
| Evento | Descrizione |
|---|---|
auth.login.succeeded | Accesso riuscito, con metodo (password, SSO, chiave API) |
auth.login.failed | Tentativo fallito, con motivo generico (credenziali errate, account bloccato) |
auth.logout | Chiusura di sessione volontaria |
auth.mfa.enrolled | Attivazione di un secondo fattore |
auth.mfa.challenge.failed | Verifica MFA non superata |
auth.mfa.disabled | Disattivazione del secondo fattore |
auth.password.changed | Cambio password da parte dell'utente |
auth.password.reset.requested | Richiesta di reimpostazione password |
auth.account.locked | Blocco per superamento dei tentativi consentiti |
auth.session.revoked | Revoca forzata di una sessione attiva |
Utenti, ruoli e permessi
| Evento | Descrizione |
|---|---|
user.invited | Invito inviato, con ruolo assegnato |
user.activated | Invito accettato e utenza attivata |
user.updated | Modifica dei dati anagrafici dell'utenza |
user.disabled | Disattivazione dell'utenza |
user.deleted | Rimozione dell'utenza dal tenant |
role.created / role.updated / role.deleted | Gestione dei ruoli personalizzati |
role.assigned / role.revoked | Assegnazione o revoca di un ruolo a un utente |
permission.granted / permission.revoked | Modifica puntuale dei permessi |
Configurazione
| Evento | Descrizione |
|---|---|
project.created / project.updated / project.published | Ciclo di vita dei progetti |
model.config.updated | Modifica del modello, della temperatura o del prompt di sistema |
knowledge.document.uploaded / knowledge.document.deleted | Gestione dei documenti |
knowledge.index.rebuilt | Rigenerazione dell'indice semantico |
tool.created / tool.updated / tool.disabled | Gestione degli strumenti richiamabili dal modello |
webhook.created / webhook.updated / webhook.deleted | Gestione degli endpoint |
widget.domain.allowlist.updated | Modifica dei domini autorizzati |
tenant.settings.updated | Modifica delle impostazioni di tenant, inclusa la retention |
Dati e privacy
| Evento | Descrizione |
|---|---|
contact.viewed | Apertura della scheda di un contatto |
contact.updated | Rettifica di dati anagrafici, con valori precedente e nuovo |
contact.restricted | Attivazione o revoca della limitazione del trattamento |
session.transcript.exported | Esportazione della trascrizione di una conversazione |
privacy.request.created | Apertura di una richiesta di esercizio dei diritti |
privacy.request.completed | Completamento della richiesta, con esito |
data.export.requested / data.export.downloaded | Esportazioni massive |
data.retention.changed | Modifica dei tempi di conservazione |
data.erasure.executed | Esecuzione di una cancellazione |
Credenziali e integrazioni
| Evento | Descrizione |
|---|---|
apikey.created | Creazione di una chiave API, con ambito e scadenza |
apikey.revoked | Revoca di una chiave |
apikey.rotated | Rotazione con periodo di sovrapposizione |
integration.connected / integration.disconnected | Attivazione o disattivazione di un'integrazione |
sso.config.updated | Modifica della configurazione SSO |
secret.rotated | Rotazione di un segreto condiviso, senza esporne il valore |
Fatturazione e contratto
| Evento | Descrizione |
|---|---|
billing.details.updated | Modifica dei dati di fatturazione |
billing.plan.changed | Cambio di piano o di quote |
invoice.issued / invoice.downloaded | Ciclo delle fatture |
Che cosa NON viene registrato
L'audit log non contiene password, segreti, chiavi API in chiaro, token, né il testo integrale dei messaggi delle conversazioni. Riporta riferimenti agli oggetti, non il loro contenuto sensibile.
Struttura del record
{
"id": "evt_01JQ8M4Z5T7C2B9K",
"timestamp": "2026-09-04T09:41:07.812Z",
"tenant": { "id": "tnt_9f2c41a", "slug": "acme-srl" },
"action": "role.assigned",
"category": "identity",
"severity": "high",
"outcome": "success",
"actor": {
"type": "user",
"id": "usr_01JQ2A7F3D",
"email": "mario.rossi@acme.it",
"displayName": "Mario Rossi",
"roles": ["tenant-admin"]
},
"target": {
"type": "user",
"id": "usr_01JQ5B8G1H",
"email": "laura.bianchi@acme.it"
},
"changes": [
{ "field": "roles", "from": ["operator"], "to": ["operator", "supervisor"] }
],
"context": {
"ip": "93.45.112.7",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
"geo": { "country": "IT", "region": "Lombardia" },
"channel": "console",
"traceId": "4bf92f3577b34da6a3ce929d0e0e4736",
"requestId": "req_01JQ8M4Z5T"
},
"integrity": {
"sequence": 1048221,
"previousHash": "9f2c41a7b3e8d05c6a1f4b29e07d3c8a5e6f1b0d",
"hash": "c8a5e6f1b0d9f2c41a7b3e8d05c6a1f4b29e07d3"
}
}Campi principali
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
id | string | Sì | — | Identificativo univoco e ordinabile della voce. |
timestamp | string | Sì | — | Data e ora in UTC, ISO 8601 con millisecondi. |
action | string | Sì | — | Codice dell’azione, in formato risorsa.verbo. |
category | string | Sì | — | Ambito: identity, configuration, data, billing, security. |
severity | string | Sì | — | low, medium, high oppure critical. Guida gli alert. |
outcome | string | Sì | — | success, failure oppure denied. |
actor | object | Sì | — | Chi ha eseguito l’azione: utente, chiave API, servizio interno o automazione. |
target | object | No | — | Oggetto su cui l’azione è stata eseguita. |
changes | array | No | — | Elenco delle differenze, con valore precedente e nuovo. |
context.ip | string | Sì | — | Indirizzo IP di origine della richiesta. |
context.traceId | string | Sì | — | Correlatore distribuito, utile per il supporto. |
integrity.hash | string | Sì | — | Impronta della voce, concatenata alla precedente. |
Immutabilità e integrità
- Le voci sono scritte in modalità append-only: non esistono API né funzioni di interfaccia per modificarle o eliminarle, nemmeno per gli amministratori del tenant.
- Ogni voce contiene un
sequenceprogressivo e unhashcalcolato includendo l'hash della voce precedente: si forma una catena verificabile. La rimozione o l'alterazione di una voce interrompe la catena e viene rilevata. - Le copie di lungo periodo sono archiviate su storage immutabile con blocco temporale.
- La verifica dell'integrità può essere richiesta su un intervallo di date e produce un rapporto di verifica firmato.
Nemmeno il supporto può cancellare l'audit log
Se ricevi una richiesta di cancellazione di voci di audit, sappi che non è tecnicamente eseguibile. Le uniche voci che escono dal registro sono quelle che superano il periodo di conservazione configurato, tramite eliminazione automatica dell'intera finestra temporale.
Conservazione
| Piano | Conservazione predefinita | Estensione disponibile |
|---|---|---|
| Standard | 12 mesi | fino a 24 mesi |
| Business | 24 mesi | fino a 36 mesi |
| Enterprise | 36 mesi | su accordo contrattuale |
La conservazione non può essere ridotta sotto i 12 mesi: è il minimo necessario a garantire la tracciabilità richiesta dalle procedure di sicurezza. L'aumento è immediato e si applica anche alle voci già presenti; la riduzione avvia una cancellazione irreversibile della coda più vecchia.
Chi può accedere all'audit log
| Ruolo | Accesso |
|---|---|
| Amministratore tenant | Lettura completa ed esportazione |
Ruolo con permesso identity:audit:read | Lettura completa, senza esportazione |
Ruolo con permesso identity:audit:export | Esportazione dei risultati filtrati |
| Supervisore / Operatore | Nessun accesso predefinito |
| Personale Blu Pantheon | Accesso solo su richiesta esplicita del Cliente, tracciato a sua volta |
Anche leggere lascia traccia
L'accesso all'audit log e ogni esportazione generano a loro volta una voce
(audit.viewed, audit.exported). È utile in fase ispettiva per dimostrare chi ha consultato
le evidenze.
Per creare un ruolo di sola lettura dedicato al DPO, vedi Ruoli e permessi.
Consultazione e filtri
Apri l'audit log
Imposta l'intervallo temporale
Usa il selettore in alto a destra. L'intervallo massimo per una singola query è di 90 giorni; per periodi più ampi usa l'esportazione.
Applica i filtri
Puoi filtrare per attore (email o chiave API), azione, categoria, esito, severità, indirizzo IP e oggetto. I filtri sono combinabili.
Apri il dettaglio di una voce
Il pannello laterale mostra il record completo, incluse le differenze campo per campo e il
traceId da comunicare al supporto.
Esportazione per ispezioni e verifiche
Definisci l'ambito
Applica i filtri desiderati, poi premi Esporta. Sono disponibili i formati CSV (analisi in foglio di calcolo) e JSON Lines (importazione in un SIEM).
Scegli se includere il manifesto di integrità
L'opzione Includi manifesto aggiunge un file con gli hash di inizio e fine intervallo e il numero di voci: consente al verificatore di dimostrare che l'estrazione è completa.
Scarica il pacchetto
Il collegamento firmato scade dopo 7 giorni. Il download è a sua volta tracciato.
Archivia secondo le tue procedure
Conserva il pacchetto e il manifesto insieme: separati perdono valore probatorio.
/console/v1/audit-logsBearer JWTElenca le voci di audit con filtri e paginazione a cursore.
/console/v1/audit-logs/exportsBearer JWTAvvia un'esportazione asincrona su un intervallo esteso.
curl -X GET "https://api.blupantheon.com/console/v1/audit-logs?from=2026-06-01T00:00:00Z&to=2026-08-31T23:59:59Z&action=role.assigned&limit=200" \
-H "Authorization: Bearer $BP_TOKEN" \
-H "Accept: application/json"Integrazione con un SIEM
Per una vigilanza continua puoi inoltrare gli eventi verso il tuo SIEM.
Sono supportati l'inoltro via webhook (evento audit.entry.created, consigliato per la
severità alta e critica) e l'estrazione periodica via API. Per firma e verifica della consegna
vedi Firma HMAC.
Correlazione con il traceId
Ogni operazione della piattaforma genera un traceId che compare:
- nella voce di audit (
context.traceId); - nell'header di risposta
X-BP-Trace-Iddelle chiamate API; - nei messaggi di errore mostrati in Console;
- nei log di consegna dei webhook.
Come usarlo con il supporto
Comunicando il traceId il supporto ricostruisce l'intero percorso della richiesta senza
chiederti ulteriori informazioni. Vedi
Contattare il supporto.
Alert su eventi sensibili
Puoi ricevere una notifica via email o webhook quando si verificano eventi rilevanti. Regole consigliate:
| Regola | Condizione | Priorità |
|---|---|---|
| Assegnazione di ruolo amministrativo | role.assigned con ruolo tenant-admin | Alta |
| Disattivazione di MFA | auth.mfa.disabled | Alta |
| Creazione di chiave API | apikey.created | Media |
| Modifica della retention | data.retention.changed | Alta |
| Cancellazione massiva | data.erasure.executed | Critica |
| Accessi falliti ripetuti | più di 10 eventi auth.login.failed in 5 minuti dallo stesso IP | Alta |
| Accesso da paese inatteso | auth.login.succeeded con geo.country diverso da IT | Media |
| Modifica della configurazione SSO | sso.config.updated | Alta |
| Modifica dei domini autorizzati del widget | widget.domain.allowlist.updated | Media |