Log d'audit - SocialGouv/egapro GitHub Wiki
Logs d'audit
Les logs d'audit sont stockés dans la table audit.action_log (PostgreSQL, schéma dédié audit).
Colonnes stockées
| Colonne | Type | Description |
|---|---|---|
id |
varchar(255) |
Identifiant unique de l'entrée |
created_at |
timestamptz |
Horodatage de l'action |
user_id |
varchar(255) |
ID utilisateur (session) |
user_email |
varchar(255) |
Email utilisateur |
siren |
varchar(9) |
SIREN de l'entreprise concernée |
action |
varchar(100) |
Clé d'action (AUDIT_ACTIONS.*) |
category |
varchar(20) |
read_sensitive, auth, mutation, export, system |
resource_type |
varchar(50) |
Type de ressource (ex: declaration, cse_opinion) |
resource_id |
varchar(255) |
ID de la ressource ciblée |
status |
varchar(20) |
success / failure |
error_message |
text |
Message d'erreur (si échec) |
metadata |
jsonb |
Contexte métier libre (year, fileName…) — secrets auto-strippés |
ip_address |
varchar(45) |
IP source (colonne dédiée, jamais dans metadata) |
user_agent |
text |
User-Agent HTTP |
duration_ms |
integer |
Durée de l'action |
Durées de rétention (conformité CNIL)
| Catégorie | Rétention | Usage |
|---|---|---|
read_sensitive |
180 jours | Lectures sensibles (données GIP, PDF, PII) — gros volume, contient IP |
auth |
365 jours | Login, logout, échecs de connexion |
mutation |
365 jours | Toute écriture de données métier |
export |
365 jours | Exports de données et API tierces |
system |
365 jours | Actions cron / admin |
La purge est appliquée par le cron cleanup.ts via la route /api/audit/cleanup. Clés automatiquement supprimées du metadata : password, token, refresh_token, secret, client_secret, authorization, apikey, api_key, accesskey, access_key, private_key.
Conforme ✅
| Règle CNIL | Implémentation egapro |
|---|---|
| Durée standard 6 mois pour logs d'accès | read_sensitive = 180 jours ✅ |
| Jusqu'à 12 mois si justification sécurité | auth, mutation, export, system = 365 jours ✅ (justifié : traçabilité conformité égalité pro) |
| Purge automatique obligatoire | Cron /api/audit/cleanup → cleanupAuditLogs ✅ |
| Minimisation des données | Sanitizer strip les secrets du metadata ✅ |
| Sécurité des logs (accès restreint) | Schéma audit séparé en base ✅ |
Points à vérifier ⚠️
-
Information des utilisateurs (RGPD art. 13) : la politique de confidentialité / mentions légales doivent mentionner explicitement la journalisation, les durées, et la finalité. → À vérifier dans les pages
/mentions-legaleset/politique-confidentialite. -
Registre des traitements : l'activité de journalisation doit figurer dans le registre RGPD de la DGT/DSS.
-
Accès aux logs tracé : la CNIL recommande que la consultation des logs soit elle-même journalisée. Actuellement il n'y a pas d'interface de consultation interne → neutre pour le moment, mais à prévoir si une UI admin est ajoutée.
-
IP = donnée personnelle : conserver une IP 365 jours pour un
mutationest dans la limite haute. La justification (preuve de dépôt de déclaration réglementaire) est solide, mais doit être documentée dans l'AIPD si une analyse d'impact existe. -
Droit d'accès / effacement : un utilisateur peut demander l'accès à ses logs. Il n'y a pas actuellement de procédure outillée → à traiter manuellement via DPO.