Documentation Index
Fetch the complete documentation index at: https://docs.snakysec.com/llms.txt
Use this file to discover all available pages before exploring further.
OBSERVABILITY — Sentry wiring & scrubbing
Configuration Sentry full-pipeline (client / server / edge + workers BullMQ + webhook + génération GRC/rapport). DSN chargé depuis Vault, scrubbing PII actif par défaut.Architecture
platform/src/instrumentation.ts— lit les secrets Vault (incl.SENTRY_DSN,SENTRY_AUTH_TOKEN) avant d’initialiser Sentry. Exécuté une fois au démarrage serveur.platform/sentry.{client,server,edge}.config.ts— 3 configs séparées, toutes avecbeforeSendscrubbing +beforeBreadcrumbfiltrage console.
Scope de capture
| Surface | Capturé | Mécanisme |
|---|---|---|
API routes (/app/api/**) | Auto | SDK Next.js instrumentation |
| Workers BullMQ | Oui | Sentry.captureException dans handlers audit-import-worker, monthly-digest-worker, alerts-worker |
| Webhook GitLab | Oui | Capture sur HMAC invalide, payload malformé, timeout |
| Génération GRC | Oui | Sentry.withScope enrichi de { clientId, documentType, language } |
| Génération rapport audit (PDF/Excel/HTML) | Oui | Sentry.withScope enrichi de { clientId, auditId, format } |
| Erreurs client (React) | Oui | ErrorBoundary + auto |
Scrubbing PII
Configuré dansbeforeSend (server) :
Headers
- Denylist :
authorization,cookie,x-vault-token,x-gitlab-token,x-api-key - Remplacés par
[REDACTED]
Body
- Clés sensibles (
password,secret,token,apiKey,privateKey, etc.) →[REDACTED] - Body > 10 KB tronqué avec suffixe
…[TRUNCATED] - Cookies complets →
{ scrubbed: "[REDACTED]" }
User context
event.user.emailsuppriméevent.user.ip_addresssupprimé (RGPD)
Env vars
Pattern regex appliqué aux env vars deevent.contexts.runtime.env :
/AUTH_SECRET/i/ENCRYPTION_KEY/i/_PASSWORD$/i/VAULT_/i/GITLAB_TOKEN/i/ENTRA_.*_(SECRET|KEY|PEM)/i/SENTRY_AUTH_TOKEN/i
Breadcrumbs console
Les console logs matchant/vault|secret|token|password|AUTH_SECRET|ENCRYPTION_KEY/i sont droppés (retour null dans beforeBreadcrumb).
Ignore rules (réduction de bruit)
CredentialsSignin— 401 NextAuth routiniers (utilisateur non loggé)AccessDenied— redirections RBAC normalesNEXT_NOT_FOUND/NEXT_REDIRECT— contrôle de flux Next.js
Release & environment
SENTRY_RELEASE= commit SHA court (injecté build-arg Docker)SENTRY_ENVIRONMENT=production|preprod|developmenttracesSampleRate= 0.1 (10% des transactions tracées en prod)
Source maps
Upload automatique via@sentry/nextjs à l’étape build Docker :
SENTRY_AUTH_TOKENinjecté en build-arg depuis Vault- Source maps liées au
releasetag = commit SHA - Permet stack traces dé-minifiées sur erreurs client
Alertes (Sentry dashboard)
Configurées côté Sentry (pas dans le code) :| Règle | Condition | Canal |
|---|---|---|
| Prod error spike | ≥ 5 new events / 15 min sur environment:production | Email MSSP_ADMIN |
| Worker failure | Any event level:error avec tag job:* | Email MSSP_ADMIN |
| GRC generation failed | Event avec tag feature:grc-pdf | Email MSSP_ADMIN |
Vérification post-déploiement
- Erreur de test :
throw new Error("sentry-test")dans un handler → event reçu avecrelease = <commit-sha> - Scrubbing : inspecter le payload → aucun
AUTH_SECRET,*_PASSWORD,VAULT_TOKENne doit apparaître - Worker : throw dans
monthly-digest-worker→ event reçu avec contexte{ clientId, jobId } - Client : throw dans un composant React → stack trace dé-minifiée visible
Migration self-hosted (P3)
Planifiée Q3-Q4 2026, déclencheur = 1er client payant (données de sécurité en environnement tiers = risque).- VPS dédié 4 vCPU / 16 GB RAM / 40 GB NVMe
- Rotation DSN dans Vault uniquement (aucun changement code applicatif)
- Même scrubbing, même pipeline