Référence de configuration du Control Plane
Cette page liste chaque réglage du Control Plane (API python -m eai.main, worker python -m eai.worker, worker média python -m eai.media_worker et migrations python -m eai.migrate) : la variable d'environnement qui le fixe, son type, sa valeur par défaut, les valeurs admises et son effet.
Cette page est générée par tools/docs/gen_platform_config.py à partir de services/control-plane/src/eai/config.py : ne la modifiez pas à la main.
215 réglages répartis en 25 groupes.
Lecture des réglages
Les réglages sont lus une fois par processus dans l'environnement, avec le préfixe EAI_ et sans tenir compte de la casse : le champ database_url est la variable EAI_DATABASE_URL. Un fichier .env du répertoire de travail est aussi lu ; une variable de l'environnement l'emporte sur le fichier. Les variables EAI_ inconnues sont ignorées par cette classe (des adaptateurs d'intégration en lisent certaines directement, voir la dernière section). Les listes acceptent un texte séparé par des virgules (a,b) ou un tableau JSON (["a","b"]). Les booléens acceptent true ou false, 1 ou 0, yes ou no, on ou off. Un processus lit ses réglages au démarrage : redémarrez-le après une modification.
Où les fixer
Paquets OS : /etc/navin-platform/platform.env (mode 0640, root:navin-platform), lu par chaque unité navin-platform-* ; vérifiez-le avec navin-platform check. Kubernetes : controlPlane.config du chart Helm pour les valeurs non secrètes (ConfigMap) et controlPlane.secrets.keys pour celles tirées d'OpenBao (référence des valeurs Helm). Docker Compose : deploy/compose/.env. Développement local avec make start : services/control-plane/local.env, créé par make docker-env.
Règles de production
Avec EAI_ENVIRONMENT=prod, l'API refuse de démarrer tant qu'une règle de eai.security.startup n'est pas respectée et affiche chaque règle en défaut ; avec staging, elle démarre et les journalise comme avertissements. Les règles figurent dans la description de chaque réglage ci-dessous (« Production : »). navin-platform check applique les mêmes règles sur un hôte installé par paquet, sans rien démarrer.
Groupes
Serveur HTTP et durcissement
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_ENVIRONMENT | chaîne | dev | dev, test, staging, prod | Environnement logique. prod refuse les réglages dangereux au démarrage (voir Règles de production), staging les journalise, dev et test autorisent les aides de développement. |
EAI_HOST | chaîne | 127.0.0.1 | | Adresse d'écoute de python -m eai.main. Les images de conteneur et les paquets OS fixent 0.0.0.0. |
EAI_PORT | entier | 8080 | | Port d'écoute de l'API. La variable PORT, si elle est définie, l'emporte (convention PaaS). |
EAI_ALLOWED_HOSTS | liste de chaînes | * | | Liste autorisée de l'en-tête Host. Production : doit lister les noms d'hôte publics, pas *. |
EAI_TRUSTED_PROXIES | liste de chaînes | 127.0.0.1/32,::1/128 | | Pairs (CIDR) autorisés à fixer X-Forwarded-For et X-SPIFFE-ID : la passerelle et le contrôleur d'ingress. Production : aucune plage universelle comme 0.0.0.0/0. |
EAI_CORS_ORIGINS | liste de chaînes | vide | | Origines autorisées à appeler l'API depuis un navigateur (URL du portail). Production : ne doit pas contenir *. |
EAI_DOCS_ENABLED | booléen | true | | Sert /docs, /redoc et /openapi.json. Production : doit être désactivé. |
EAI_SECURITY_HEADERS_ENABLED | booléen | true | | Ajoute les en-têtes de sécurité de l'API à chaque réponse. |
EAI_HSTS_ENABLED | booléen | false | | Envoie Strict-Transport-Security. Production : doit être activé. |
EAI_HSTS_MAX_AGE_SECONDS | entier | 31536000 | | max-age de l'en-tête HSTS (un an par défaut). |
EAI_MAX_BODY_BYTES | entier | 10485760 | | Taille maximale d'un corps de requête, en octets (10 Mio par défaut). |
EAI_MAX_UPLOAD_BYTES | entier | 104857600 | | Taille maximale d'un téléversement (médias, documents, imports de rapprochement), en octets (100 Mio par défaut). |
EAI_MAX_JSON_DEPTH | entier | 64 | | Profondeur d'imbrication maximale d'un corps JSON ; un corps plus profond est refusé. |
EAI_DEFAULT_LOCALE | chaîne | en | en, fr | Langue des messages d'erreur quand l'en-tête Accept-Language ne nomme aucune des langues disponibles. |
EAI_REPO_ROOT | chemin | racine du dépôt | | Dossier qui contient contracts, catalog et sql/postgres. Les paquets OS fixent /usr/share/navin-platform. |
EAI_PROMPT_INJECTION_DEFAULT_MODE | chaîne | detect | off, detect, block | Garde contre l'injection de prompt d'un tenant qui n'a pas son propre réglage ; le réglage du tenant l'emporte. |
Base de données
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_DATABASE_URL | chaîne | postgresql://eai:eai@localhost:5432/eai | | URL PostgreSQL du compte administrateur, utilisée par les migrations et par le worker. Production : doit utiliser sslmode=require, verify-ca ou verify-full. |
EAI_RUNTIME_DATABASE_URL | chaîne | vide | | URL PostgreSQL du compte d'exécution de l'API (membre de eai_runtime, sans droit DDL). Vide : EAI_DATABASE_URL. Production : TLS obligatoire comme ci-dessus. |
EAI_DB_POOL_MIN | entier | 1 | | Connexions gardées ouvertes par le pool de chaque processus. |
EAI_DB_POOL_MAX | entier | 10 | | Nombre maximal de connexions du pool de chaque processus. |
EAI_AUTO_MIGRATE | booléen | false | | Applique les migrations en attente au démarrage de l'API. Le hook Helm et l'unité systemd lancent plutôt python -m eai.migrate. |
Authentification et annuaire
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_AUTH_DEV | booléen | false | | Accepte les en-têtes de développement X-Dev-Tenant, X-Dev-User et X-Dev-Roles à la place d'un jeton. Production : doit être désactivé (ces en-têtes authentifient n'importe qui). |
EAI_AUTH_SPIFFE | booléen | false | | Accepte l'identité de charge de l'en-tête X-SPIFFE-ID posé par un proxy de confiance (EAI_TRUSTED_PROXIES). |
EAI_OIDC_ISSUER | chaîne (facultatif) | non défini | | Émetteur OpenID Connect dont l'API accepte les jetons (URL du realm Keycloak). |
EAI_OIDC_AUDIENCE | chaîne (facultatif) | non défini | | Audience exigée dans les jetons. |
EAI_OIDC_JWKS_URL | chaîne (facultatif) | non défini | | URL des clés de signature (JWKS) de l'émetteur. |
EAI_OIDC_GROUP_SYNC | booléen | true | | Applique les correspondances de groupes de l'annuaire (claims groups et entra_groups) à chaque authentification OIDC. |
EAI_OIDC_PLATFORM_ADMIN_GROUPS | liste de chaînes | navin-platform-admins | | Groupes de l'annuaire qui donnent platform_admin, comparés sans tenir compte de la casse. Vide : règle désactivée. |
EAI_OIDC_TENANT_ADMIN_GROUP_PREFIX | chaîne | navin-admins- | | Un groupe <préfixe><slug du tenant> donne tenant_admin sur ce tenant, qui est aussi le tenant d'un jeton sans claim de tenant quand l'utilisateur n'en administre qu'un. Vide : règle désactivée. |
EAI_JWT_ALGORITHMS | liste de chaînes | RS256,RS384,RS512,PS256,PS384,ES256,ES384 | | Algorithmes de signature acceptés dans les jetons. HS* et none sont toujours refusés. |
EAI_JWT_LEEWAY_SECONDS | entier | 30 | | Décalage d'horloge toléré sur exp, nbf et iat. |
Connexion locale
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_LOCAL_AUTH_ENABLED | booléen | true | | Connexion au portail par identifiant et mot de passe (POST /v1/auth/login). Désactivez-la une fois OIDC opérationnel. |
EAI_BOOTSTRAP_ADMIN_USERNAME | chaîne | vide | | Identifiant du premier administrateur, créé au démarrage de l'API s'il n'existe pas (rôles platform_admin et tenant_admin). Un démarrage ultérieur ne le réinitialise jamais. |
EAI_BOOTSTRAP_ADMIN_PASSWORD | chaîne | vide | | Mot de passe à usage unique du premier administrateur, à changer à la première connexion. Production : 12 caractères minimum, lettres et chiffres, ni l'identifiant ni un mot de passe connu ; retirez-le après usage. |
EAI_BOOTSTRAP_TENANT | chaîne | default | | Tenant du premier administrateur. |
EAI_LOCAL_SESSION_TTL_SECONDS | entier | 28800 | | Durée de vie d'une session locale (8 heures par défaut). |
EAI_LOCAL_AUTH_MAX_FAILURES | entier | 5 | | Mots de passe erronés consécutifs avant le verrouillage du compte. |
EAI_LOCAL_AUTH_LOCKOUT_SECONDS | entier | 900 | | Durée du verrouillage. |
EAI_LOCAL_PASSWORD_MIN_LENGTH | entier | 12 | | Longueur minimale d'un mot de passe. |
EAI_LOCAL_SCRYPT_N | entier | 32768 | | Paramètre de coût N de scrypt pour les empreintes de mot de passe. |
Secrets et clés
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_MASTER_KEY | chaîne (facultatif) | non défini | | Clé maîtresse de la plateforme (étirée par HKDF, jamais stockée en base). Production : EAI_MASTER_KEY ou EAI_OPENBAO_URL doit être défini. |
EAI_OPENBAO_URL | chaîne (facultatif) | non défini | | Adresse d'OpenBao. Production : obligatoire avec EAI_OPENBAO_TOKEN (les exports d'audit WORM sont signés par Transit). |
EAI_OPENBAO_TOKEN | chaîne (facultatif) | non défini | | Jeton OpenBao, ou le jeton d'un agent sidecar. |
EAI_OPENBAO_KV_MOUNT | chaîne | secret | | Point de montage du moteur KV v2 (secrets des tenants sous <montage>/data/tenants/<tenant>/). |
EAI_OPENBAO_TRANSIT_MOUNT | chaîne | transit | | Point de montage du moteur Transit. |
EAI_KMS_PROVIDER | chaîne | none | none, openbao, pkcs11 | Gestionnaire de clés de eai.crypto.kms : OpenBao Transit ou un HSM client en PKCS#11. |
EAI_KMS_PKCS11_MODULE | chaîne (facultatif) | non défini | | Chemin de la bibliothèque PKCS#11 cliente (.so). Obligatoire avec pkcs11. |
EAI_KMS_PKCS11_TOKEN_LABEL | chaîne (facultatif) | non défini | | Libellé du jeton HSM. Obligatoire avec pkcs11. |
EAI_KMS_PKCS11_PIN_FILE | chaîne (facultatif) | non défini | | Fichier contenant le PIN utilisateur (secret monté), jamais le PIN lui-même. Obligatoire avec pkcs11. |
Autorisation et politiques
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_OPENFGA_URL | chaîne (facultatif) | non défini | | Adresse d'OpenFGA (autorisation par relations). |
EAI_OPENFGA_STORE_ID | chaîne (facultatif) | non défini | | Store OpenFGA, écrit dans OpenBao par l'amorçage d'OpenFGA. |
EAI_OPENFGA_MODEL_ID | chaîne (facultatif) | non défini | | Modèle d'autorisation OpenFGA, écrit dans OpenBao par l'amorçage d'OpenFGA. |
EAI_OPA_URL | chaîne (facultatif) | non défini | | Adresse d'OPA. |
EAI_OPA_DELIVERY | chaîne | push | push, bundle | push envoie les politiques opa à OPA à l'écriture ; bundle laisse OPA interroger les bundles signés de POST /v1/policies/bundles et n'envoie rien. |
EAI_POLICY_BUNDLE_SIGNING_KEY_FILE | chaîne (facultatif) | non défini | | Clé privée RSA PEM qui signe les bundles (RS256). Obligatoire avec bundle. |
EAI_POLICY_BUNDLE_KEY_ID | chaîne | eai-policy | | keyid de .signatures.json, égal à l'entrée keys d'OPA. |
EAI_POLICY_DEFAULT | chaîne | allow | allow, deny | Décision quand aucune politique active du tenant ne s'applique ; le réglage policy_default du tenant l'emporte. Toute valeur autre que deny autorise. |
Passerelle de modèles et embeddings
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_LITELLM_URL | chaîne (facultatif) | non défini | | Adresse de LiteLLM utilisée par la passerelle de modèles. |
EAI_LITELLM_MASTER_KEY | chaîne (facultatif) | non défini | | Clé maîtresse de LiteLLM, utilisée quand EAI_LITELLM_MASTER_KEY_REF n'est pas défini. Jamais journalisée ni renvoyée. |
EAI_LITELLM_ADMIN_URL | chaîne (facultatif) | non défini | | API d'administration de LiteLLM (équipes, clés virtuelles). Non défini : EAI_LITELLM_URL. |
EAI_LITELLM_MASTER_KEY_REF | chaîne (facultatif) | non défini | | Référence de la clé maîtresse : openbao:<chemin kv>#<champ> ou env://<VARIABLE>. |
EAI_LITELLM_ADMIN_TIMEOUT_SECONDS | nombre | 15.0 | | Délai maximal d'un appel à l'API d'administration de LiteLLM. |
EAI_RAG_EMBEDDING_MODEL | chaîne | local-hash-256 | | Modèle du registre doté de la capacité embeddings, défaut d'une nouvelle base de connaissances. Production : pas local-hash-256 (embedder par hachage pour dev et test), par exemple bge-m3-vllm. |
EAI_MEMORY_EMBEDDING_MODEL | chaîne | local-hash-256 | | Modèle d'embedding de la mémoire des agents. Production : pas local-hash-256. |
EAI_RAG_RERANK_MODEL | chaîne | vide | | Modèle du registre doté de la capacité rerank, utilisé par "rerank": true. Vide : pas de reclassement. |
EAI_EMBEDDINGS_BATCH_SIZE | entier | 64 | | Textes par appel à la passerelle lors de l'ingestion et de la réindexation. |
Limites de débit et Redis
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_RATE_LIMIT_ENABLED | booléen | true | | Active les limites de débit de l'API. |
EAI_RATE_LIMIT_PER_MINUTE | entier | 1200 | | Requêtes par minute par principal, ou par IP cliente en anonyme. |
EAI_RATE_LIMIT_GATEWAY_PER_MINUTE | entier | 600 | | Requêtes par minute par principal sur /v1/gateway/*. |
EAI_RATE_LIMIT_AUTH_FAILURES_PER_MINUTE | entier | 20 | | Échecs d'authentification par minute et par IP cliente avant 429. |
EAI_REDIS_URL | chaîne (facultatif) | non défini | | Redis qui partage les compteurs de limite de débit entre réplicas. Production : rediss:// (TLS). |
EAI_REDIS_USERNAME | chaîne (facultatif) | non défini | | Utilisateur ACL de Redis. |
EAI_REDIS_PASSWORD_FILE | chaîne (facultatif) | non défini | | Fichier contenant le mot de passe ACL, jamais le mot de passe lui-même. Production : obligatoire quand EAI_REDIS_URL ne porte pas d'identifiants. |
EAI_REDIS_TLS_CA_FILE | chaîne (facultatif) | non défini | | Bundle d'autorités pour rediss://. |
Garde des appels sortants
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_EGRESS_PRIVATE_ALLOWLIST | liste de chaînes | vide | | Destinations privées autorisées pour les appelants de la plateforme seulement : hôte ou hôte:port exact, *.suffixe ou CIDR. Gardez-la étroite. |
EAI_EGRESS_ALLOWED_PORTS | liste d'entiers | 80,443,8443 | | Ports autorisés vers les destinations publiques. |
EAI_EGRESS_ALLOW_HTTP | booléen | false | | Autorise http en clair vers les destinations publiques. Production : doit être désactivé. |
EAI_EGRESS_DNS_TIMEOUT_SECONDS | nombre | 3.0 | | Délai maximal de la résolution DNS qui vérifie une destination. |
Observabilité et SLO
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_OTEL_ENABLED | booléen | false | | Exporte les traces OpenTelemetry (point OTLP : EAI_OTEL_EXPORTER_OTLP_ENDPOINT ou OTEL_EXPORTER_OTLP_ENDPOINT). |
EAI_METRICS_TOKEN | chaîne (facultatif) | non défini | | Jeton Bearer de GET /metrics, obligatoire hors dev et test. Production : 32 caractères minimum. |
EAI_WORKER_METRICS_PORT | entier | 9464 | | Port des métriques de python -m eai.worker. 0 : désactivé. |
EAI_MEDIA_WORKER_METRICS_PORT | entier | 9465 | | Port des métriques de python -m eai.media_worker. 0 : désactivé. |
EAI_SLO_AVAILABILITY_TARGETS | chaîne | control_plane_api=0.995,model_gateway=0.995,tool_gateway=0.995,realtime=0.995 | | Objectif de disponibilité par service (service=ratio, séparés par des virgules) pour GET /v1/telemetry/slo. Services : control_plane_api, model_gateway, tool_gateway, realtime. Production : une valeur invalide est refusée. |
EAI_SLO_LATENCY_TARGETS_SECONDS | chaîne | control_plane_api=1,model_gateway=1,tool_gateway=1,realtime=1 | | Objectif de latence par service, en secondes, même format. |
EAI_SLO_LATENCY_OBJECTIVE | nombre | 0.95 | | Part des requêtes qui doit rester sous l'objectif de latence. |
EAI_SLO_RETENTION_MINUTES | entier | 1440 | | Minutes de mesures gardées en mémoire par chaque réplica de l'API. |
EAI_TELEMETRY_SPAN_MAX_DAYS | entier | 90 | | Plafond de conservation des résumés de spans (eai.telemetry_spans), purgés par la tâche de rétention. |
Worker de fond
Tâches périodiques de python -m eai.worker. Un verrou consultatif PostgreSQL garde un seul réplica actif par plan. Intervalles en secondes.
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_WORKER_TICK_SECONDS | nombre | 5.0 | | Pause entre deux boucles du worker. |
EAI_WORKER_LOCK_KEY | entier | 7310442001 | | Clé de base du verrou consultatif PostgreSQL du leader. |
EAI_WORKER_SCHEDULER_INTERVAL_SECONDS | entier | 30 | | Intervalle de la tâche du planificateur (exécutions planifiées). |
EAI_WORKER_OUTBOX_INTERVAL_SECONDS | entier | 10 | | Intervalle de la vidange de la boîte d'envoi des événements. |
EAI_WORKER_QUOTA_EXPIRY_INTERVAL_SECONDS | entier | 60 | | Intervalle de l'expiration des réservations de quota. |
EAI_WORKER_HEARTBEAT_INTERVAL_SECONDS | entier | 60 | | Intervalle de la tâche heartbeats, qui signale les exécutions dont le battement de cœur est périmé. |
EAI_WORKER_HEARTBEAT_TIMEOUT_SECONDS | entier | 1800 | | Âge du dernier battement de cœur au-delà duquel une exécution active passe en timed_out (jamais moins que le seuil de péremption EAI_HEARTBEAT_STALE_SECONDS). |
EAI_WORKER_APPROVAL_EXPIRY_INTERVAL_SECONDS | entier | 60 | | Intervalle de l'expiration des demandes d'approbation. |
EAI_WORKER_RETENTION_INTERVAL_SECONDS | entier | 86400 | | Intervalle de la tâche de rétention (un jour par défaut). |
EAI_WORKER_BATCH_SIZE | entier | 100 | | Lignes traitées par tâche et par boucle. |
EAI_WORKER_VERIFY_CHAIN_INTERVAL_SECONDS | entier | 3600 | | Intervalle de la vérification de la chaîne de hachage de l'audit (verify_chain). |
EAI_WORKER_GAUGES_INTERVAL_SECONDS | entier | 30 | | Intervalle du rafraîchissement des jauges de métriques. |
EAI_WORKER_EMBEDDINGS_REINDEX_INTERVAL_SECONDS | entier | 60 | | Intervalle des tâches de réindexation des bases de connaissances et des éléments de mémoire d'un autre modèle. |
EAI_WORKER_INBOX_PURGE_SECONDS | entier | 3600 | | Intervalle de la tâche inbox_purge. |
EAI_INBOX_RETENTION_DAYS | nombre | 7.0 | | Jours de conservation d'une ligne traitée de la boîte de réception des consommateurs (eai.inbox_events). |
Workers média
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_WORKER_MEDIA_REQUEUE_SECONDS | entier | 60 | | Intervalle de la tâche media_requeue de python -m eai.worker. |
EAI_MEDIA_JOB_LEASE_SECONDS | entier | 900 | | Une tâche en cours dont updated_at est plus ancien est remise en file. |
EAI_MEDIA_JOB_MAX_ATTEMPTS | entier | 3 | | Prises d'une tâche avant que media_requeue la passe en échec. |
EAI_MEDIA_WORKER_POLL_SECONDS | nombre | 2.0 | | Intervalle d'interrogation de la base par un worker média sans NATS. |
EAI_MEDIA_WORKER_HEARTBEAT_SECONDS | nombre | 60.0 | | Rafraîchissement de updated_at pendant l'exécution d'une tâche. |
Temps réel
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_REALTIME_WS_TOKEN_TTL_SECONDS | entier | 300 | | Durée de vie d'un ws_token (usage unique, lié au tenant et à la session) de /v1/realtime/ws/{id}. |
EAI_REALTIME_WS_MAX_MESSAGE_BYTES | entier | 1048576 | | Taille maximale d'un message WebSocket ; au-delà : fermeture 1009. |
EAI_REALTIME_WS_MAX_EVENTS_PER_SECOND | nombre | 50.0 | | Débit soutenu d'événements client, puis fermeture 4429. |
EAI_REALTIME_WS_BURST | entier | 100 | | Événements client admis en rafale au-dessus du débit soutenu. |
EAI_REALTIME_WS_MAX_SESSION_SECONDS | entier | 3600 | | Durée maximale d'une connexion, puis fermeture 4408. |
EAI_REALTIME_WS_IDLE_TIMEOUT_SECONDS | entier | 120 | | Aucun événement client pendant cette durée : fermeture 4408. |
EAI_REALTIME_CONSENT_REQUIRED | booléen (facultatif) | non défini | | Transcription vocale refusée sans consentement actif du participant. Non défini : exigé partout sauf en dev et test. Production : false est refusé. L'enregistrement exige toujours le consentement. |
EAI_STREAM_DLP_HOLDBACK_CHARS | entier | 128 | | Caractères retenus en fin de flux pour qu'une valeur coupée entre deux morceaux soit tout de même détectée par la DLP de sortie. |
Export analytique
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_WORKER_ANALYTICS_EXPORT_SECONDS | entier | 60 | | Intervalle de la tâche analytics_export vers ClickHouse (quand EAI_CLICKHOUSE_URL est défini). |
EAI_ANALYTICS_EXPORT_BATCH | entier | 5000 | | Lignes par insertion ClickHouse. |
EAI_ANALYTICS_EXPORT_MAX_BATCHES | entier | 20 | | Insertions par source et par passage. |
EAI_ANALYTICS_EXPORT_LAG_SECONDS | nombre | 5.0 | | Les lignes plus récentes attendent le passage suivant (validations en cours). |
Envoi au SIEM et export d'audit WORM
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_WORKER_SIEM_FORWARD_SECONDS | entier | 30 | | Intervalle de la tâche siem_forward (événements d'audit après un repère par tenant). |
EAI_SIEM_FORWARD_BATCH | entier | 500 | | Événements d'audit lus par tenant et par passage. |
EAI_SIEM_FORWARD_ACTIONS | chaîne | security.*,policy.*,incident.*,approval.*,secret.*,api_key.*,audit.*,dlp.*,authz.write,authz.delete,member.*,provider.disable,model.disable,agent.kill,agent.suspend,multimodal.dlp | | Motifs d'actions envoyés (préfixe.* ou nom exact, séparés par des virgules), * pour toute la piste d'audit. Les refus et les échecs sont toujours envoyés. |
EAI_WORKER_AUDIT_WORM_SECONDS | entier | 3600 | | Intervalle de la tâche audit_worm : un NDJSON signé et son manifeste par tenant et par jour UTC. |
EAI_AUDIT_WORM_RETENTION_DAYS | entier | 365 | | Conservation des exports WORM, en jours. |
EAI_AUDIT_SIGNING | chaîne | auto | auto, transit, hmac | Signature des exports : auto utilise Transit quand OpenBao est configuré, sinon HMAC ; hmac est réservé à dev et test. Production : pas hmac. |
EAI_OPENBAO_AUDIT_SIGNING_KEY | chaîne | eai-audit-export | | Clé Transit qui signe les exports (type ed25519 ou ecdsa-p256). |
EAI_AUDIT_WORM_STORAGE_PROFILE | chaîne (facultatif) | non défini | | Profil de stockage de la plateforme pour l'export quand le tenant n'a pas de profil de finalité audit_worm. Non défini : le stockage historique EAI_S3_*. |
Stockage objet
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_STORAGE_CA_BUNDLE | chaîne (facultatif) | non défini | | Fichier PEM de l'autorité de certification d'un point d'accès sur site. Production : doit être lisible s'il est défini. |
EAI_STORAGE_REQUEST_TIMEOUT_SECONDS | nombre | 30.0 | | Délai maximal d'une requête de stockage. |
EAI_STORAGE_PRESIGN_MAX_SECONDS | entier | 3600 | | Durée maximale d'une URL présignée émise. Production : entre 1 et 86400. |
EAI_STORAGE_CAPABILITY_MAX_AGE_SECONDS | entier | 86400 | | Vérification de capacité plus ancienne : refusée jusqu'à une nouvelle vérification. Production : entre 60 et 604800. |
Audit Gateway et preuves
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_WORKER_AUDIT_GATEWAY_SECONDS | entier | 10 | | Intervalle de la tâche audit_gateway qui vide la boîte d'envoi vers le webhook SIEM et NATS JetStream. |
EAI_AUDIT_GATEWAY_BATCH | entier | 500 | | Lignes envoyées par passage. |
EAI_AUDIT_GATEWAY_MAX_ATTEMPTS | entier | 12 | | Tentatives au-delà desquelles la ligne reste en attente et une alerte d'intégrité est ouverte. |
EAI_AUDIT_GATEWAY_BACKOFF_SECONDS | nombre | 2.0 | | Base du délai exponentiel (base * 2^(tentatives-1), plafonné à 900 secondes). |
EAI_AUDIT_GATEWAY_NATS_SUBJECT | chaîne | audit.events | | Suffixe du sujet NATS : les événements vont vers eai.<tenant>.<sujet>. |
EAI_AUDIT_GATEWAY_NATS_STREAM | chaîne | EAI_AUDIT | | Flux JetStream, créé s'il manque (sujets eai.*.audit.>). |
EAI_AUDIT_GATEWAY_HTTP_URL | chaîne (facultatif) | non défini | | Collecteur HTTP du SIEM : un POST par événement, Idempotency-Key égal à l'identifiant de l'événement. |
EAI_WORKER_AUDIT_RETENTION_SECONDS | entier | 86400 | | Intervalle de la tâche de rétention de l'audit. |
EAI_AUDIT_SEAL_SIGNING_KEY | chaîne (facultatif) | non défini | | Clé PEM Ed25519 des sceaux, pour dev et test seulement. |
EAI_AUDIT_SEAL_SIGNING_KEY_REF | chaîne (facultatif) | non défini | | Référence OpenBao de la clé des sceaux, openbao:<chemin kv>#<champ>. Production : obligatoire. |
EAI_WORKER_AUDIT_SEAL_SECONDS | entier | 300 | | Intervalle de la tâche de scellement. |
EAI_AUDIT_SEAL_MAX_EVENTS | entier | 10000 | | Nombre maximal d'événements sous un même sceau. |
EAI_WORKER_AUDIT_INTEGRITY_SECONDS | entier | 900 | | Intervalle du contrôle d'intégrité des sceaux. |
EAI_AUDIT_CLOCK_SKEW_SECONDS | entier | 300 | | Avance maximale admise de event_time sur l'horloge de la base. Production : entre 0 et 3600. |
EAI_AUDIT_PAYLOAD_KEK | chaîne (facultatif) | non défini | | Clé d'enveloppe des contenus d'audit : openbao-transit ou une clé base64 de 32 octets (dev et test seulement). Production : openbao-transit. |
EAI_AUDIT_PAYLOAD_RETENTION_DAYS | entier | 365 | | Les contenus chiffrés plus anciens sont purgés sauf gel. |
FinOps
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_FINOPS_ALERT_THRESHOLDS | chaîne | 50,80,100 | | Seuils d'alerte des budgets et quotas, en pourcentage de la limite, séparés par des virgules, chacun dans ]0, 1000]. |
SOC et AI-SDR
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_SOC_WEBHOOK_SECRET | chaîne | vide | | Secret HMAC des webhooks signés Falco, Tetragon et OpenSearch et des accusés de confinement. Vide : ces routes refusent toute livraison. Production : 32 caractères minimum s'il est défini. |
EAI_SOC_CORRELATION_WINDOW_SECONDS | entier | 900 | | Fenêtre de corrélation du corrélateur d'événements. Production : entre 60 et 86400. |
EAI_WORKER_SOC_VERIFY_SECONDS | entier | 120 | | Intervalle du vérificateur de confinement (soc_verify). |
EAI_WORKER_SOC_SCAN_SECONDS | entier | 30 | | Intervalle de l'analyseur d'audit (soc_scan). |
Licences
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_LICENSE_PUBLIC_KEYS | chaîne | vide | | Clés publiques Ed25519 de l'éditeur habilitées à signer les licences, <kid>:<clé base64url> séparés par des virgules (plusieurs pour une rotation). Production : les kid test-* sont refusés. |
EAI_LICENSE_EXPIRING_SOON_DAYS | entier | 30 | | Jours avant valid_until où l'état devient expiring_soon. Production : entre 1 et 365. |
EAI_LICENSE_WARNING_DAYS | chaîne | 30,7,1 | | Seuils d'avertissement de la tâche license_check, en jours, séparés par des virgules. |
EAI_WORKER_LICENSE_CHECK_SECONDS | entier | 3600 | | Intervalle de la tâche license_check. |
Context Authority et délégations
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_CONTEXT_SIGNING_KEY | chaîne (facultatif) | non défini | | Clé PEM (Ed25519 ou ECDSA P-256) de la Context Authority, pour dev et test seulement. Jamais journalisée. |
EAI_CONTEXT_SIGNING_KEY_REF | chaîne (facultatif) | non défini | | Référence OpenBao de la clé, openbao:<chemin kv>#<champ>. Sans clé, l'autorité refuse de signer. Production : obligatoire. |
EAI_CONTEXT_ISSUER | chaîne | urn:eai:context-authority | | Émetteur des contextes signés. |
EAI_CONTEXT_AUDIENCES | chaîne | eai-control-plane | | Audiences acceptées par POST /v1/context/verify, séparées par des virgules. |
EAI_CONTEXT_TTL_SECONDS | entier | 900 | | Durée de vie par défaut d'un ExecutionContext signé. |
EAI_CONTEXT_MAX_TTL_SECONDS | entier | 3600 | | Borne supérieure de la durée de vie d'un contexte et de la fenêtre d'une clé retirée. |
EAI_CONTEXT_LEEWAY_SECONDS | entier | 30 | | Décalage d'horloge toléré à la vérification d'un contexte. |
EAI_CONTEXT_REQUIRED | booléen | false | | Chaque exécution exige un contexte signé. Production : doit être activé. |
EAI_DELEGATION_DEFAULT_TTL_SECONDS | entier | 28800 | | Durée de vie de la délégation implicite d'une exécution. |
EAI_DELEGATION_MAX_TTL_SECONDS | entier | 86400 | | Durée maximale d'une délégation. |
EAI_MANDATE_MAX_TTL_DAYS | entier | 365 | | Durée maximale d'un mandat, en jours. |
EAI_BREAK_GLASS_MAX_SECONDS | entier | 3600 | | Durée maximale d'un accès d'urgence (break glass). |
EAI_WORKLOAD_SERVICE_ID | chaîne | eai-control-plane | | Identité technique de cette charge dans les contextes d'exécution. |
EAI_WORKLOAD_SPIFFE_ID | chaîne (facultatif) | non défini | | SPIFFE ID de cette charge quand SPIRE en délivre un. |
Sécurité des fichiers
Chaque fichier est mis en quarantaine, analysé par ClamAV (passerelle HTTPS devant clamd) et YARA-X (worker HTTPS), validé, puis seulement transmis à Docling, à l'OCR, au stockage média ou à la transcription.
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_FILE_SCAN_MODE | chaîne | dev | dev, enforce | enforce : les deux moteurs sont exigés, aucun joignable donne 503 (échec fermé). dev : un moteur non configuré est noté not_configured. Toute valeur autre que dev vaut enforce. Production : enforce. |
EAI_CLAMAV_URLS | chaîne | vide | | URL HTTPS de chaque passerelle ClamAV, séparées par des virgules (bascule entre toutes). Production : chaque URL en https. |
EAI_CLAMAV_API_KEY | chaîne | vide | | Clé Bearer des passerelles ClamAV. Production : obligatoire. |
EAI_YARAX_URLS | chaîne | vide | | URL HTTPS de chaque worker YARA-X, séparées par des virgules. Production : chaque URL en https. |
EAI_YARAX_API_KEY | chaîne | vide | | Clé Bearer des workers YARA-X. Production : obligatoire. |
EAI_FILE_SCAN_CA_FILE | chaîne (facultatif) | non défini | | PEM de l'autorité qui a signé les certificats des moteurs. Production : fichier lisible obligatoire. |
EAI_FILE_SCAN_TIMEOUT_SECONDS | nombre | 60.0 | | Délai maximal par analyse et par moteur. |
EAI_FILE_SCAN_MAX_BYTES | entier | 52428800 | | Plafond de la plateforme pour un fichier analysé (50 Mio) ; une politique de tenant ne peut que l'abaisser. |
EAI_FILE_SCAN_ARCHIVE_MAX_MEMBER_BYTES | entier | 104857600 | | Taille déclarée d'un membre d'un conteneur ZIP (clamd MaxFileSize, 100 Mio). |
EAI_FILE_SCAN_ARCHIVE_MAX_TOTAL_BYTES | entier | 419430400 | | Total déclaré d'une arborescence d'archive (clamd MaxScanSize, 400 Mio). |
EAI_FILE_SCAN_ENDPOINT_DOWN_SECONDS | nombre | 30.0 | | Un point d'accès en échec est essayé en dernier pendant cette durée. |
EAI_WORKER_FILE_SCAN_PROBE_SECONDS | entier | 60 | | Intervalle de la tâche file_scan_probe (jauges des moteurs et âge des signatures). |
Téléphonie
Connexions du Control Plane aux moteurs de téléphonie des pools PBX (ADR-0173) : AMI et ARI d'Asterisk, JSONRPC de Kamailio et Twirp SIP de LiveKit.
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_TELEPHONY_CA_FILE | chaîne (facultatif) | non défini | | Fichier PEM de l'autorité qui a signé les certificats des moteurs (la CA du Navin Manager), approuvée en plus des autorités par défaut pour l'AMI en TLS, l'ARI, le JSONRPC de Kamailio et le Twirp de LiveKit en https. Non défini : les autorités par défaut seules. Un pool dont tls_verify est désactivé ne vérifie aucun certificat. |
EAI_TELEPHONY_EPHEMERAL_ALGORITHM | chaîne | sha256 | | Empreinte du HMAC des identifiants éphémères des softphones WebRTC (sha1, sha256, sha384 ou sha512). Elle doit égaler le paramètre ephemeral_algorithm du service kamailio du Navin Manager (sha256 par défaut), sinon Kamailio refuse tous les softphones. |
Moteurs de mémoire
Instances Mem0 et Cognee installées et exploitées par le Navin Manager (ADR-0174), jointes par eai.domains.memory.engines. Leurs adresses viennent des bindings mem0 et cognee ; leurs clés d'API sont EAI_CRED_MEMORY_MEM0_API_KEY et EAI_CRED_MEMORY_COGNEE_API_KEY du fichier d'environnement sensible, jamais ces réglages.
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_MEMORY_MEM0_URL | chaîne | vide | | Adresse de l'instance Mem0 de la plateforme, rendue depuis le binding mem0. Vide : pas de moteur Mem0. |
EAI_MEMORY_COGNEE_URL | chaîne | vide | | Adresse de l'instance Cognee de la plateforme, rendue depuis le binding cognee. Vide : pas de moteur Cognee. |
EAI_MEMORY_COGNEE_ACCESS_CONTROL | booléen | true | | ENABLE_BACKEND_ACCESS_CONTROL de l'instance Cognee, tel que le Navin Manager le rend. |
EAI_MEMORY_ENGINES_CA_FILE | chaîne (facultatif) | non défini | | Fichier PEM de l'autorité des certificats des moteurs (la CA du Navin Manager). Non défini : les autorités par défaut seules. |
EAI_MEMORY_ENGINES_ALLOW_HTTP | booléen | false | | Autorise le HTTP en clair vers un moteur en recette et en production ; refusé par défaut. |
EAI_MEMORY_ENGINE_TIMEOUT_SECONDS | nombre | 10.0 | | Délai maximal d'un appel à un moteur de mémoire, en secondes. |
Runtime MCP et serveurs MCP
Instances MCP isolées par tenant, projet et utilisateur (ToolHive Operator), créées à la demande et détruites après usage par le contrôleur de cycle de vie. Voir Runtime MCP.
| Variable | Type | Défaut | Valeurs admises | Description |
|---|
EAI_MCP_RUNTIME_ENABLED | booléen | false | | Active le Runtime MCP. |
EAI_MCP_RUNTIME_KUBE_URL | chaîne | vide | | Adresse de l'API Kubernetes. Vide : dans le cluster (KUBERNETES_SERVICE_HOST et le jeton du compte de service). |
EAI_MCP_RUNTIME_KUBE_TOKEN_FILE | chaîne | /var/run/secrets/kubernetes.io/serviceaccount/token | | Fichier du jeton du compte de service. |
EAI_MCP_RUNTIME_KUBE_CA_FILE | chaîne | /var/run/secrets/kubernetes.io/serviceaccount/ca.crt | | Fichier d'autorité de l'API Kubernetes. |
EAI_MCP_RUNTIME_ISSUER | chaîne | https://control-plane.eai-platform.svc.cluster.local/mcp-runtime | | iss du JWT que la passerelle remet à un proxy ToolHive. |
EAI_MCP_RUNTIME_JWKS_URL | chaîne | vide | | JWKS lu par les proxys ToolHive (GET /v1/mcp/runtime/jwks de ce Control Plane). |
EAI_MCP_RUNTIME_GATEWAY_NAMESPACE | chaîne | eai-platform | | Namespace des pods du Control Plane, autorisé en entrée par Cilium. |
EAI_MCP_RUNTIME_SERVICE_SUFFIX | chaîne | .svc.cluster.local | | Seules les URL de proxy se terminant par ce suffixe (dans le cluster) sont appelées. |
EAI_MCP_RUNTIME_TOKEN_TTL_SECONDS | entier | 300 | | Durée de vie du JWT remis à un proxy ToolHive. |
EAI_MCP_RUNTIME_PROVISIONING_TIMEOUT_SECONDS | entier | 600 | | Durée maximale de création d'une instance. |
EAI_MCP_RUNTIME_QUOTA_CPU | chaîne | 8 | | CPU de la ResourceQuota d'un namespace de projet. |
EAI_MCP_RUNTIME_QUOTA_MEMORY | chaîne | 16Gi | | Mémoire de la ResourceQuota d'un namespace de projet. |
EAI_MCP_RUNTIME_REAPER_SECONDS | entier | 60 | | Intervalle de la boucle de cycle de vie dans les pods de l'API (fin de vie, mise en veille, états, sondes de santé, nettoyages, révocations). |
EAI_MCP_INTERNAL_HOSTS | liste de chaînes | vide | | Hôtes internes où l'entreprise héberge ses propres serveurs MCP (hôte exact, hôte:port, *.suffixe ou CIDR). Les serveurs MCP sont internes uniquement : tout autre hôte est refusé. |
EAI_MCP_CATALOG_STORAGE_PROFILE | chaîne | vide | | Profil de stockage de la plateforme du catalogue d'entreprise dans SeaweedFS. Vide : les modèles de catalog/mcp-runtime (dev et test seulement, refusé en production). |
EAI_MCP_CATALOG_KEY | chaîne | mcp-runtime/templates.yaml | | Clé d'objet du fichier des modèles. |
EAI_MCP_CATALOG_REFRESH_SECONDS | entier | 300 | | Période de rafraîchissement du catalogue. |
EAI_MCP_RUNTIME_IMAGE_REGISTRIES | liste de chaînes | harbor.example.internal | | Registres d'où peut venir l'image d'un modèle. |
EAI_MCP_RUNTIME_WAKE_TIMEOUT_SECONDS | entier | 90 | | Durée d'attente d'un appel pour une instance en veille ou recréée. |
EAI_MCP_RUNTIME_FAILURE_LIMIT | entier | 3 | | Échecs dans la fenêtre avant que l'instance attende un démarrage explicite. |
EAI_MCP_RUNTIME_FAILURE_WINDOW_SECONDS | entier | 900 | | Fenêtre du décompte des échecs. |
EAI_MCP_RUNTIME_HEALTH_TIMEOUT_SECONDS | nombre | 3.0 | | Délai maximal de la sonde de santé d'un proxy ToolHive (GET /health). |
EAI_MCP_RUNTIME_OTEL_ENDPOINT | chaîne | otel-collector.observability.svc.cluster.local:4318 | | Point OTLP/HTTP (TLS, hôte:port sans schéma) de la télémétrie des proxys. |
EAI_MCP_RUNTIME_OTEL_SAMPLING_RATE | chaîne | 1.0 | | Taux d'échantillonnage des traces entre 0 et 1.0 ; chaque requête MCP est tracée par défaut. |
EAI_MCP_RUNTIME_OTEL_CA_FILE | chaîne | /etc/eai/ca/ca.crt | | Fichier d'autorité interne copié dans chaque namespace de projet. |
Variables lues hors de cette classe
Des adaptateurs d'intégration lisent directement quelques autres variables EAI_ (par exemple EAI_QDRANT_URL, EAI_NATS_URL, EAI_TEMPORAL_URL, EAI_LIVEKIT_URL, EAI_CLICKHOUSE_URL, EAI_S3_ENDPOINT, EAI_OPIK_URL, EAI_OTEL_EXPORTER_OTLP_ENDPOINT). Elles sont décrites avec leur composant dans les pages configuration des composants et intégration de la plateforme ; celles que fixe le chart Helm figurent dans la référence des valeurs Helm.