Skip to main content

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

┌──────────────┐   DSN + auth token   ┌──────────────┐
│    Vault     │─────────────────────▶│instrumentation│
│  mssp/plat.  │                      │     .ts       │
└──────────────┘                      └──────┬────────┘
                                             │ Sentry.init()
                   ┌─────────────────────────┼────────────────────────┐
                   ▼                         ▼                        ▼
           sentry.client.config.ts   sentry.server.config.ts   sentry.edge.config.ts
                 (navigateur)           (API + workers)              (edge runtime)
  • 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 avec beforeSend scrubbing + beforeBreadcrumb filtrage console.

Scope de capture

SurfaceCapturéMécanisme
API routes (/app/api/**)AutoSDK Next.js instrumentation
Workers BullMQOuiSentry.captureException dans handlers audit-import-worker, monthly-digest-worker, alerts-worker
Webhook GitLabOuiCapture sur HMAC invalide, payload malformé, timeout
Génération GRCOuiSentry.withScope enrichi de { clientId, documentType, language }
Génération rapport audit (PDF/Excel/HTML)OuiSentry.withScope enrichi de { clientId, auditId, format }
Erreurs client (React)OuiErrorBoundary + auto

Scrubbing PII

Configuré dans beforeSend (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.email supprimé
  • event.user.ip_address supprimé (RGPD)

Env vars

Pattern regex appliqué aux env vars de event.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
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 normales
  • NEXT_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 | development
  • tracesSampleRate = 0.1 (10% des transactions tracées en prod)

Source maps

Upload automatique via @sentry/nextjs à l’étape build Docker :
  • SENTRY_AUTH_TOKEN injecté en build-arg depuis Vault
  • Source maps liées au release tag = commit SHA
  • Permet stack traces dé-minifiées sur erreurs client

Alertes (Sentry dashboard)

Configurées côté Sentry (pas dans le code) :
RègleConditionCanal
Prod error spike≥ 5 new events / 15 min sur environment:productionEmail MSSP_ADMIN
Worker failureAny event level:error avec tag job:*Email MSSP_ADMIN
GRC generation failedEvent avec tag feature:grc-pdfEmail MSSP_ADMIN

Vérification post-déploiement

  1. Erreur de test : throw new Error("sentry-test") dans un handler → event reçu avec release = <commit-sha>
  2. Scrubbing : inspecter le payload → aucun AUTH_SECRET, *_PASSWORD, VAULT_TOKEN ne doit apparaître
  3. Worker : throw dans monthly-digest-worker → event reçu avec contexte { clientId, jobId }
  4. 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
Voir roadmap-2026-Q2.md §7.1.