Log Streaming
Auris enregistre des logs d’audit pour chaque événement significatif dans ton tenant : connexions, modifications d’utilisateurs, assignations de rôles, vérifications de permissions, appels API et actions administratives. Le log streaming te permet d’exporter ces événements en temps réel vers des services externes de logging et d’analyse, t’offrant une vue unifiée de l’activité d’authentification avec les logs de ton application.
Ce guide couvre les destinations supportées, comment configurer chacune, le format des logs et comment vérifier la livraison.
Pourquoi le Log Streaming
Bien que la Console Auris fournisse un visualiseur de logs d’audit intégré avec recherche et filtres, les organisations ont souvent besoin de :
- Centraliser les logs de tous les systèmes (application, infrastructure, authentification) dans un seul SIEM
- Conserver les logs au-delà de la période de rétention par défaut (Auris conserve les logs 90 jours par défaut)
- Créer des tableaux de bord et des alertes personnalisés basés sur les événements d’authentification
- Satisfaire les exigences de conformité (SOC 2, HIPAA, RGPD) qui nécessitent l’export des logs vers un système d’archivage contrôlé
- Corréler les événements d’authentification avec les événements d’application pour les investigations d’incidents
Le log streaming envoie les événements dès qu’ils se produisent avec une latence minimale (typiquement inférieure à 5 secondes).
Destinations Supportées
Auris supporte quatre types de destinations pour le log streaming :
| Destination | Transport | Authentification | Idéal pour |
|---|---|---|---|
| Webhook | HTTPS POST | Signature HMAC-SHA256 | Intégrations personnalisées, Elasticsearch, SIEM auto-hébergé |
| Amazon S3 | AWS S3 API | Access key + Secret key | Archivage long terme, conformité, data lake |
| Datadog | Datadog Log API | Clé API | Surveillance et alertes en temps réel |
| Splunk | HTTP Event Collector (HEC) | Token HEC | SIEM enterprise et analyses de sécurité |
Format des Logs
Tous les logs partagent le même schéma JSON indépendamment de la destination :
{
"id": "log_abc123def456",
"timestamp": "2026-01-15T10:30:00.000Z",
"type": "login.succeeded",
"severity": "info",
"actor": {
"id": "usr_xyz789",
"email": "[email protected]",
"type": "user"
},
"target": {
"id": "app_web123",
"type": "application",
"name": "Application Web de Production"
},
"action": "login.succeeded",
"description": "L'utilisateur s'est connecté avec succès",
"metadata": {
"ipAddress": "203.0.113.42",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...",
"location": "Paris, France",
"authMethod": "password",
"mfaUsed": true,
"mfaMethod": "totp",
"sessionId": "sess_abc123"
},
"tenant": "votre-tenant-id",
"source": "auris"
}Référence des Champs
| Champ | Type | Description |
|---|---|---|
id | string | Identifiant unique de l’événement |
timestamp | ISO 8601 | Quand l’événement s’est produit |
type | string | Type d’événement (ex. login.succeeded, user.created, role.assigned) |
severity | string | info, warn ou error |
actor | object | Qui a effectué l’action (utilisateur, admin, système ou client M2M) |
target | object | La ressource affectée (utilisateur, application, rôle, organisation) |
action | string | L’action effectuée |
description | string | Description lisible par l’humain |
metadata | object | Contexte supplémentaire (IP, user agent, localisation, paramètres spécifiques) |
tenant | string | L’ID du tenant |
source | string | Toujours auris |
Configuration de la Destination Webhook
La destination Webhook envoie les logs comme des requêtes HTTPS POST à ton endpoint, signées avec HMAC-SHA256 pour la vérification.
Configuration
- Va sur Console puis Paramètres puis Log Streaming
- Clique Ajouter un Stream
- Sélectionne Webhook comme type de destination
- Saisis la configuration :
| Champ | Requis | Description |
|---|---|---|
| Nom | Oui | Un nom descriptif pour ce stream |
| URL | Oui | L’URL de ton endpoint HTTPS |
| Événements | Non | Filtre quels types d’événements transmettre (vide = tous les événements) |
- Clique Créer
Auris génère un secret de signature pour le webhook. Le format de la requête est :
POST /votre-endpoint-log HTTP/1.1
Host: api.votreentreprise.com
Content-Type: application/json
X-Webhook-Signature: <hmac-sha256-hex>
X-Webhook-Timestamp: <unix-seconds>
{
"events": [
{ "id": "log_abc123", "type": "login.succeeded", ... },
{ "id": "log_def456", "type": "user.updated", ... }
]
}Les événements sont regroupés (jusqu’à 100 par requête) et livrés en quelques secondes. Utilise la même logique de vérification de signature décrite dans le guide Webhooks.
Exemple de Récepteur
import express from 'express'
import crypto from 'crypto'
const app = express()
app.post(
'/logs/auris',
express.raw({ type: 'application/json' }),
(req, res) => {
const signature = req.headers['x-webhook-signature'] as string
const timestamp = req.headers['x-webhook-timestamp'] as string
const secret = process.env.AURIS_LOG_STREAM_SECRET!
// Vérifier la signature
const payload = `${timestamp}.${req.body.toString()}`
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex')
if (
!crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
)
) {
return res.status(401).send('Signature invalide')
}
const { events } = JSON.parse(req.body.toString())
for (const event of events) {
console.log(`[${event.severity}] ${event.type}: ${event.description}`)
}
res.status(200).json({ received: events.length })
}
)Configuration de la Destination Amazon S3
La destination S3 écrit les logs comme des fichiers JSON dans un bucket S3. Les fichiers sont organisés par date et regroupés pour un archivage efficace.
Configuration
- Va sur Console puis Paramètres puis Log Streaming
- Clique Ajouter un Stream
- Sélectionne Amazon S3 comme type de destination
- Saisis la configuration :
| Champ | Requis | Description |
|---|---|---|
| Nom | Oui | Un nom descriptif pour ce stream |
| Bucket | Oui | Nom du bucket S3 (ex. my-company-auris-logs) |
| Région | Oui | Région AWS (ex. eu-west-1) |
| Access Key ID | Oui | Clé d’accès IAM AWS avec permission s3:PutObject |
| Secret Access Key | Oui | Secret key correspondante |
| Préfixe | Non | Préfixe de clé d’objet (ex. auris/production/) |
| Événements | Non | Filtre quels types d’événements transmettre |
- Clique Créer
Structure des Objets S3
Les fichiers de log sont écrits avec le pattern de clé suivant :
{préfixe}yyyy/MM/dd/HH/auris-logs-{timestamp}-{uuid}.jsonChaque fichier contient un tableau JSON de logs :
[
{ "id": "log_abc123", "type": "login.succeeded", "timestamp": "..." },
{ "id": "log_def456", "type": "user.created", "timestamp": "..." }
]Politique IAM Requise
Crée un utilisateur ou rôle IAM avec la politique minimale suivante :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::my-company-auris-logs/auris/*"
}
]
}Suis le principe du moindre privilège. N’accorde que la permission PutObject sur le préfixe spécifique qu’Auris utilisera. N’accorde pas s3:* ou un accès à tout le bucket.
Configuration de la Destination Datadog
La destination Datadog envoie les logs à l’API Logs de Datadog, où ils apparaissent dans le Log Explorer et peuvent être utilisés dans des monitors, tableaux de bord et alertes.
Configuration
- Va sur Console puis Paramètres puis Log Streaming
- Clique Ajouter un Stream
- Sélectionne Datadog comme type de destination
- Saisis la configuration :
| Champ | Requis | Description |
|---|---|---|
| Nom | Oui | Un nom descriptif pour ce stream |
| Clé API | Oui | Clé API Datadog (depuis Organization Settings) |
| Site | Oui | Ton site Datadog : datadoghq.com (US), datadoghq.eu (EU), etc. |
| Tag Source | Non | Tag source pour le filtrage dans Datadog (défaut : auris) |
| Événements | Non | Filtre quels types d’événements transmettre |
- Clique Créer
Création de Monitors Datadog
Après que le log streaming est actif, crée des monitors dans Datadog pour les alertes sur les événements critiques :
Pic de connexions échouées :
logs("source:auris @auris.event_type:login.failed").index("main").rollup("count").last("5m") > 50Blocage de compte :
logs("source:auris @auris.event_type:user.blocked").index("main").rollup("count").last("1h") > 5Connexion suspecte détectée :
logs("source:auris @auris.event_type:login.suspicious").index("main").rollup("count").last("15m") > 0Configuration de la Destination Splunk
La destination Splunk envoie les logs à un endpoint Splunk HTTP Event Collector (HEC).
Prérequis
- Active HTTP Event Collector dans Splunk (Paramètres > Entrées de données > HTTP Event Collector)
- Crée un nouveau token HEC
- Note l’URL HEC et le token
Configuration
- Va sur Console puis Paramètres puis Log Streaming
- Clique Ajouter un Stream
- Sélectionne Splunk comme type de destination
- Saisis la configuration :
| Champ | Requis | Description |
|---|---|---|
| Nom | Oui | Un nom descriptif pour ce stream |
| URL HEC | Oui | Endpoint Splunk HEC (ex. https://splunk.votreentreprise.com:8088) |
| Token | Oui | Token HEC |
| Index | Non | Index Splunk de destination |
| Événements | Non | Filtre quels types d’événements transmettre |
- Clique Créer
Exemples de Recherche Splunk
Après ingestion, recherche les événements Auris avec SPL :
# Tous les échecs d'authentification dans la dernière heure
sourcetype="auris:audit" type="login.failed" earliest=-1h
# Nombre de connexions par pays
sourcetype="auris:audit" type="login.succeeded"
| spath path=metadata.location
| stats count by metadata.location
# Détecter les voyages impossibles
sourcetype="auris:audit" type="login.suspicious"
| where metadata.reason="impossible_travel"Filtrage des Événements
Par défaut, un stream reçoit tous les événements d’audit. Tu peux filtrer par type d’événement lors de la création ou de la mise à jour d’un stream.
Catégories d’Événements Disponibles
| Catégorie | Exemples d’événements |
|---|---|
| Authentification | login.succeeded, login.failed, login.mfa_required, login.suspicious |
| Cycle de vie utilisateur | user.created, user.updated, user.deleted, user.blocked |
| Mot de passe | user.password_changed, user.password_reset_requested |
| Rôles et permissions | role.created, role.assigned, permission.changed |
| Organisation | organization.created, organization.member_added, organization.invitation_sent |
| Application | application.created, application.secret_rotated |
| Session | session.created, session.revoked |
| Admin | admin.settings_changed, admin.user_impersonated |
Exemple : Stream uniquement des événements d’authentification et de sécurité :
curl -X POST https://auth.votredomaine.com/api/log-streams \
-H "Authorization: Bearer $AURIS_ACCESS_TOKEN" \
-H "x-tenant: votre-tenant-id" \
-H "Content-Type: application/json" \
-d '{
"name": "Événements de sécurité sur Datadog",
"type": "DATADOG",
"config": {
"apiKey": "dd-api-key-ici",
"site": "datadoghq.eu",
"sourceTag": "auris"
},
"events": [
"login.failed",
"login.suspicious",
"user.blocked",
"user.unblocked",
"user.password_changed",
"session.revoked",
"role.assigned",
"role.unassigned"
]
}'Vérification de la Livraison
Après avoir créé un stream, vérifie qu’il fonctionne :
Vérification dans la Console
- Va sur Paramètres puis Log Streaming
- Clique sur ton stream pour en afficher les détails
- L’indicateur Statut montre si les livraisons récentes ont réussi
- Le timestamp Dernière Livraison montre quand le dernier batch a été envoyé
Déclencher un Événement de Test
Génère un événement de test en effectuant une action dans la Console (ex. crée un utilisateur de test puis supprime-le). Dans quelques secondes, l’événement devrait apparaître dans ta destination.
Vérifier les Échecs de Livraison
Si les livraisons échouent, la page de détails du stream affiche :
- Message d’erreur — Le code de statut HTTP ou l’erreur retournée par la destination
- Échecs consécutifs — Combien de livraisons ont échoué d’affilée
- Dernière livraison réussie — Quand le stream a fonctionné pour la dernière fois
Si un stream accumule trop d’échecs consécutifs, Auris le met en pause automatiquement et notifie les administrateurs du tenant. Corrige le problème sous-jacent (credentials, réseau, disponibilité de l’endpoint) et réactive le stream depuis la Console.
Résolution des Problèmes
Webhook : Erreurs 401 ou 403
- Vérifie que le secret de signature correspond entre Auris et ton endpoint
- Assure-toi que ton endpoint ne nécessite pas de headers d’authentification supplémentaires
- Vérifie que l’horloge du serveur est synchronisée (NTP) — la vérification du timestamp échoue si les horloges diffèrent de plus de 5 minutes
S3 : Accès Refusé
- Vérifie que l’access key et la secret key IAM sont corrects
- Assure-toi que la politique IAM accorde
s3:PutObjectsur le bucket et le préfixe corrects - Vérifie que le bucket S3 existe dans la région spécifiée
Datadog : Événements Non Visibles
- Vérifie que la clé API est valide
- Assure-toi d’avoir sélectionné le bon site Datadog (US, EU, US3, US5)
- Vérifie dans la configuration des Logs Datadog les pipelines de traitement qui pourraient supprimer les événements
Splunk : Connexion Refusée
- Vérifie que l’URL HEC est correcte et inclut le port (typiquement 8088)
- Assure-toi que HEC est activé dans Splunk (Paramètres > Entrées de données > HTTP Event Collector > Paramètres globaux)
- Vérifie que le token HEC est valide et a les permissions correctes sur l’index
- Vérifie les certificats SSL si tu utilises HTTPS — Auris nécessite un certificat valide
Guides Associés
- Configuration des Webhooks — Notifications d’événements en temps réel à ton application
- Protection contre les Attaques — Comprendre les événements générés par le pipeline de sécurité
- Gestion des Sessions — Événements de session dans le log d’audit