Guide d'audit — Qui a fait quoi, quand¶
AKKO capture les événements d'audit de 6 sources dans un stockage logs layer centralisé, interrogeable via Dashboards.
Sources d'audit¶
| Source | Ce qui est capturé | Label logs layer | Filtre LogQL |
|---|---|---|---|
| PostgreSQL (pgaudit) | SELECT, INSERT, UPDATE, DELETE avec utilisateur + requête | app="akko-postgres" |
\|= "AUDIT" |
| Keycloak | LOGIN, LOGOUT, LOGIN_ERROR, octroi de tokens | app="akko-keycloak" |
\|= "type=" |
| Trino | Chaque requête terminée (utilisateur, SQL, durée, lignes) | app="akko-ai-service" |
\|= "TRINO_QUERY" |
| object storage | Appels API S3 (GET, PUT, DELETE sur buckets/objets) | app="akko-ai-service" |
\|= "MINIO_ACCESS" |
| OPA | Décisions d'autorisation (allow/deny par politique) | app="akko-opa" |
\|= "decision" |
| Airflow/Superset | Événements d'authentification Flask-AppBuilder | app="akko-api-server" / app="superset" |
\|= "security" |
Dashboard Dashboards¶
Ouvrir Dashboards → Dashboards → AKKO Audit Trail (/d/akko-audit-trail/).
6 panneaux : 1. Événements d'authentification Keycloak 2. Audit des requêtes Trino 3. Audit PostgreSQL (pgaudit) 4. Audit d'accès object storage 5. Décisions d'autorisation OPA 6. Volume d'événements d'audit (graphique en barres empilées)
Requêtes courantes¶
Qui a accédé à la table X ?¶
Qui a exécuté des requêtes dans la dernière heure ?¶
Connexions échouées ?¶
Qui a téléchargé des fichiers depuis object storage ?¶
Rétention¶
Par défaut : 7 jours (stockage fichier logs layer). Configurer dans values-dev.yaml sous loki.loki.config.limits_config.retention_period.
Pour la production (90+ jours), utiliser un backend S3 pour le stockage logs layer.
Export vers SIEM¶
logs layer supporte le transfert vers des systèmes externes : - Elasticsearch : utiliser le plugin de sortie log shipper ou le ruler logs layer - Splunk : utiliser la sortie syslog de log shipper - Webhook : configurer les alertes du ruler logs layer pour POST vers n'importe quel endpoint