Files
OmniRoute/docs/i18n/fr/docs/security/COMPLIANCE.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

17 KiB
Raw Blame History

Compliance & Audit (Français)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Source de référence : src/lib/compliance/, src/app/api/compliance/ Dernière mise à jour : 2026-06-28 — v3.8.40

OmniRoute enregistre les actions administratives, les événements dauthentification, les modifications du cycle de vie des identifiants des fournisseurs et les invocations doutils MCP dans des tables daudit basées sur SQLite. Cette page décrit les éléments journalisés, leur emplacement, leur durée de conservation, la manière dont les clés API peuvent désactiver la journalisation et la façon dinterroger les données.

Limplémentation se trouve dans src/lib/compliance/index.ts (T-43 — « Contrôles de conformité ») et src/lib/compliance/providerAudit.ts. Les écritures daudit ne lèvent jamais dexception : en cas déchec, lappel est silencieusement ignoré afin que la journalisation daudit ne puisse pas interrompre le flux principal de la requête.

Éléments journalisés

Événements daudit administratifs (audit_log)

Chaque appel à logAuditEvent({ action, actor, target, details, ... }) produit une ligne. Les chaînes daction suivent un modèle domain.verb (ou domain.verb.outcome). Les types dactions confirmés dans larborescence du code comprennent :

Action Source
auth.login.success src/app/api/auth/login/route.ts
auth.login.failed src/app/api/auth/login/route.ts
auth.login.locked src/app/api/auth/login/route.ts
auth.login.error src/app/api/auth/login/route.ts
auth.login.misconfigured src/app/api/auth/login/route.ts
auth.login.setup_required src/app/api/auth/login/route.ts
auth.logout.success src/app/api/auth/logout/route.ts
provider.credentials.created src/app/api/providers/route.ts
provider.credentials.updated src/app/api/providers/[id]/route.ts
provider.credentials.revoked src/app/api/providers/[id]/route.ts
provider.credentials.batch_revoked src/app/api/providers/route.ts
sync.token.created src/app/api/sync/tokens/route.ts
sync.token.revoked src/app/api/sync/tokens/[id]/route.ts
compliance.cleanup src/lib/compliance/index.ts

Chaque entrée enregistre action, actor (valeur par défaut : "system"), target, details/metadata (JSON), ip_address, resource_type, status, request_id et timestamp. Les clés sensibles (apiKey, accessToken, refreshToken, password, tout élément correspondant à *token/*secret/*apikey, etc.) sont récursivement expurgées et remplacées par "[redacted]" avant lécriture de la ligne.

Appels doutils MCP (mcp_tool_audit)

Chaque invocation dun outil MCP écrit une ligne par lintermédiaire de open-sse/mcp-server/audit.ts. Schéma (provenant de src/lib/db/migrations/002_mcp_a2a_tables.sql) :

Colonne Remarques
id incrémentation automatique
tool_name identifiant de loutil MCP
input_hash sha256 de lentrée (aucune charge utile stockée)
output_summary résumé court et tronqué
duration_ms temps écoulé
api_key_id appelant (peut être nul)
success 1 / 0
error_code code derreur terminal en cas déchec
created_at horodatage ISO

Journaux des requêtes et de lutilisation

Il sagit de données de télémétrie opérationnelle (et non, à proprement parler, dun audit administratif), mais elles partagent le même pipeline de conservation :

  • usage_history — agrégat dutilisation par requête
  • call_logs — journal complet par requête (soumis à une limite de lignes, voir ci-dessous)
  • proxy_logs — journal du trafic du proxy (soumis à une limite de lignes)
  • request_detail_logs — ancien journal détaillé des requêtes (toujours purgé sil est présent)

Schéma de stockage

audit_log est créée à la demande par ensureAuditLogSchema() lors de la première utilisation :

CREATE TABLE IF NOT EXISTS audit_log (
  id            INTEGER PRIMARY KEY AUTOINCREMENT,
  timestamp     TEXT NOT NULL DEFAULT (datetime('now')),
  action        TEXT NOT NULL,
  actor         TEXT NOT NULL DEFAULT 'system',
  target        TEXT,
  details       TEXT,
  ip_address    TEXT,
  resource_type TEXT,
  status        TEXT,
  request_id    TEXT,
  metadata      TEXT
);

Des index sont créés sur timestamp, action, actor, resource_type, status et request_id. Les colonnes manquantes dans les anciennes bases de données sont ajoutées via ALTER TABLE à la demande.

Conservation et nettoyage

Deux périodes de conservation distinctes sont appliquées :

Variable d'environnement Valeur par défaut S'applique à
APP_LOG_RETENTION_DAYS 7 audit_log, mcp_tool_audit
CALL_LOG_RETENTION_DAYS 7 usage_history, call_logs, proxy_logs, request_detail_logs
CALL_LOGS_TABLE_MAX_ROWS 100000 Réduction au nombre maximal de lignes pour call_logs
PROXY_LOGS_TABLE_MAX_ROWS 100000 Réduction au nombre maximal de lignes pour proxy_logs

cleanupExpiredLogs() exécute le processus de conservation. Elle est appelée au démarrage du serveur depuis src/instrumentation-node.ts. Chaque exécution journalise un événement d'audit compliance.cleanup avec le nombre de suppressions par table. La réduction des journaux de proxy et d'appels est effectuée par lots (BATCH_SIZE = 5000) afin d'éviter les verrouillages prolongés en écriture.

Le nettoyage manuel de l'historique des requêtes est distinct de la conservation. La page des journaux de requêtes appelle POST /api/settings/purge-request-history, qui supprime call_logs, l'ancienne table request_detail_logs et les artefacts locaux des requêtes sous ${DATA_DIR}/call_logs/.

Les valeurs par défaut sont définies dans src/lib/logEnv.ts (DEFAULT_APP_LOG_RETENTION_DAYS = 7, DEFAULT_CALL_LOG_RETENTION_DAYS = 7).

Désactivation noLog (par clé API)

Les clés API peuvent être marquées afin que le trafic de leurs appels en aval ne soit pas journalisé. Le marqueur est stocké dans la table api_keys (no_log INTEGER DEFAULT 0) et est répliqué dans un ensemble en mémoire pour permettre des recherches rapides sur les chemins critiques.

# Créer une clé sans journalisation (authentification de gestion requise)
curl -X POST http://localhost:20128/api/keys \
  -H "Cookie: auth_token=..." \
  -H "Content-Type: application/json" \
  -d '{"name": "Privacy key", "noLog": true}'

Fonctions utilitaires (src/lib/compliance/index.ts) :

  • setNoLog(apiKeyId, true|false) — active ou désactive l'entrée en mémoire
  • isNoLog(apiKeyId) — vérifiée sur le chemin de la requête ; utilise en dernier recours une lecture de api_keys.no_log mise en cache pendant 30 s
  • NO_LOG_API_KEY_IDS (variable d'environnement, valeurs séparées par des virgules) — préchargée dans l'ensemble en mémoire au démarrage ; utile lorsque vous ne pouvez pas modifier directement la colonne

Les événements d'audit administratifs (connexion, modifications des fournisseurs, appels d'outils MCP, etc.) ne sont pas affectés par noLog — seule la journalisation du trafic par requête est désactivée.

API REST

Point de terminaison Méthode Description Authentification
/api/compliance/audit-log GET Entrées paginées du journal daudit administrateur avec filtres management
/api/mcp/audit GET Entrées paginées du journal daudit des outils MCP (open-sse)
/api/mcp/audit/stats GET Statistiques agrégées de laudit MCP (open-sse)

Aucun point de terminaison dexportation CSV nest actuellement fourni — effectuez lexportation depuis le tableau de bord ou interrogez directement la base de données SQLite.

Interrogation de /api/compliance/audit-log

Paramètres de requête pris en charge (tous facultatifs ; les filtres textuels utilisent tous la correspondance LIKE %value%) :

  • action, actor, target, resourceType (ou resource_type), status, requestId (ou request_id)
  • from / since, to / until — horodatages ISO
  • limit (50 par défaut, minimum 1, maximum 500)
  • offset (0 par défaut, maximum 10_000)

La réponse est un tableau JSON. Les métadonnées de pagination sont renvoyées dans les en-têtes : x-total-count, x-page-limit, x-page-offset.

curl "http://localhost:20128/api/compliance/audit-log?action=provider.credentials&from=2026-05-01" \
  -H "Cookie: auth_token=..."

Tableau de bord

Le tableau de bord expose les données daudit à ladresse /dashboard/audit (src/app/(dashboard)/dashboard/audit/page.tsx). La page comporte deux onglets :

  • Conformité (ComplianceTab.tsx) — événements daudit administrateur provenant de /api/compliance/audit-log. Filtrage par type dévénement, niveau de gravité (information / avertissement / critique, dérivé de laction et du statut) et plage de dates. Le niveau de gravité est calculé côté client à partir des chaînes daction et de statut.
  • MCP (McpAuditTab.tsx) — audit des outils MCP provenant de /api/mcp/audit, avec des filtres par nom doutil et par réussite/échec.

Les deux onglets utilisent une pagination avec des tailles de page de 50 (conformité) et de 25 (MCP).

Utilitaires daudit des identifiants de fournisseur

src/lib/compliance/providerAudit.ts fournit des utilitaires de mise en forme utilisés par les routes de gestion des fournisseurs lorsquelles émettent des événements relatifs aux identifiants :

  • summarizeProviderConnectionForAudit(connection) — supprime apiKey, accessToken, refreshToken, idToken et providerSpecificData.consoleApiKey avant que linstantané de connexion ne soit écrit dans details.
  • getProviderAuditTarget(connection) — compose une chaîne stable "<provider>:<name|id>" pour le champ target.
  • extractProviderWarnings(...payloads) — analyse les réponses du fournisseur à la recherche davertissements de politique/sécurité ([sanitizer], prompt injection detected, content has been filtered, safety filter, policy violation) et remonte jusquà 5 occurrences, chacune étant tronquée à 400 caractères.

Bonnes pratiques

  • Marquez avec noLog: true les clés dAPI traitant des données personnelles identifiables (juridiques, médicales, etc.).
  • Ajustez APP_LOG_RETENTION_DAYS / CALL_LOG_RETENTION_DAYS afin de respecter votre politique de conservation. Les valeurs par défaut de 7 jours sont prudentes.
  • Exportez la table daudit hors de la plateforme (sqlite3 dump) selon la fréquence requise par votre programme de conformité — aucun mécanisme darchivage intégré nexiste.
  • Suivez le nombre dévénements auth.login.failed et auth.login.locked afin de détecter les attaques par force brute.
  • Lors de lajout de nouveaux points de terminaison administrateur, appelez logAuditEvent({ ... }) avec une chaîne daction stable domain.verb.outcome et transmettez le contexte de la requête via getAuditRequestContext(request) afin que ladresse IP et le requestId soient capturés automatiquement.

Voir aussi