Aller au contenu

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 ?

{app="akko-postgres"} |= "AUDIT" |= "nom_table_ici"

Qui a exécuté des requêtes dans la dernière heure ?

{app="akko-ai-service"} |= "TRINO_QUERY" | json | user != "unknown"

Connexions échouées ?

{app="akko-keycloak"} |= "LOGIN_ERROR"

Qui a téléchargé des fichiers depuis object storage ?

{app="akko-ai-service"} |= "MINIO_ACCESS" |= "GetObject"

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