Configuration des composants
Tous les paramètres du control plane utilisent le préfixe EAI_ et sont définis dans services/control-plane/src/eai/config.py ou lus par un adaptateur d'intégration (voir platform-integration.md). Les valeurs non secrètes sont dans controlPlane.config (ConfigMap), les secrets dans OpenBao kv/eai/<env>/<service>. Les listes (EAI_CORS_ORIGINS) s'écrivent en JSON.
| Composant | Fichier | Points clés |
|---|---|---|
| Control Plane | deploy/helm/enterprise-ai/values.yaml (controlPlane) | EAI_AUTH_DEV=0 en prod, EAI_AUTH_SPIFFE=1, URLs des intégrations (EAI_OPENBAO_URL, EAI_TEMPORAL_URL, ...), job de migration pré-upgrade, GET /metrics scruté par le ServiceMonitor |
| Worker de fond | values.yaml (worker) | python -m eai.worker, une réplique, même image, ConfigMap et secrets que l'API, NetworkPolicy dédiée |
| Portal | values.yaml (portal) | NEXT_PUBLIC_EAI_API_URL, client OIDC public portal (PKCE S256) |
| LiteLLM | deploy/litellm/config.example.yaml, litellm.config | clés via os.environ/..., fallbacks routeur ; en prod généré par GET /v1/litellm/config et POST /v1/litellm/sync |
| vLLM | vllm.models | une entrée par modèle : gpus, args, minReplicas/maxReplicas, seuil KEDA |
| Workers multimodaux | workers.items | STT/TTS/vidéo, KEDA nats-jetstream sur le lag du consumer (stream et consumer passés en arguments) |
| Keycloak | deploy/keycloak/realm-enterprise-ai.json | clients portal (PKCE S256), control-plane (bearer, audience), cli (device flow), rôles realm, claims sub, tenant, clearance, roles |
| OpenFGA | deploy/policies/openfga/model.fga | relations owner, editor, viewer, can_use, member sur chaque type, objets préfixés par le tenant |
| OPA | deploy/policies/opa | paquets eai.model_invocation, eai.tool_invocation, eai.gateway_access, eai.data_access, eai.agent_autonomy sur l'entrée Policy Contract, kill switch et seuils dans data.json |
| Kyverno | deploy/policies/kyverno/cluster-policies.yaml | signatures cosign, non-root, rootfs en lecture seule, limites, pas de latest, RuntimeClass sandbox, labels tenant/owner |
| SPIRE | deploy/spire | trust domain enterprise-ai.internal, attestation k8s_psat, UpstreamAuthority OpenBao |
| OpenBao | deploy/openbao | politiques HCL par service (kv/data/tenants/*, clés transit tenant-<uuid>), rôles auth kubernetes |
| cert-manager | deploy/cert-manager | CA interne, émetteur OpenBao PKI, ACME pour la passerelle |
| Cilium | deploy/cilium | default deny, egress FQDN par fournisseur (étiquette eai.io/provider-<nom>=enabled sur LiteLLM) |
| APISIX | deploy/apisix/apisix.yaml | routes /v1, OIDC, limitation de débit Redis, suppression des en-têtes X-Dev-* et X-SPIFFE-ID ; /metrics non publié |
| KEDA | deploy/keda | LiteLLM, workers agents |
| Observabilité | deploy/observability | OTel avec filtrage PII, règles SLO et coûts sur les métriques eai_*, journaux et SIEM OpenSearch, traces Jaeger, traces IA Opik ; pas de serveur de tableaux de bord (Navin Manager et portail, ADR-0169) |
| PostgreSQL | deploy/data/postgres/cluster.yaml | CNPG 3 instances, anti-affinité par zone, WAL vers S3 |
| Velero | deploy/velero/schedules.yaml | quotidienne et horaire, hooks PostgreSQL, Qdrant, OpenBao |
| Wazuh | deploy/wazuh | décodeur JSON audit, règles 100800-100808 |
Activer un fournisseur externe
- Stocker la clé :
bao kv put kv/eai/prod/providers/openai OPENAI_API_KEY=.... - Ajouter la clé à
litellm.secrets.keyset le modèle dans la configuration générée. - Étiqueter les pods LiteLLM
eai.io/provider-openai=enabledpour ouvrir l'egress FQDN. - Autoriser fournisseur, modèle et région dans la politique du tenant (OPA
eai.model_invocation, surchargesdata.eai.config.tenants.<uuid>.model_invocation).
Supervision
SIEM, audit des mutations, export WORM signé et effacement dans Opik et ClickHouse : voir
siem-audit.md (EAI_SIEM_*, EAI_AUDIT_SIGNING, EAI_AUDIT_WORM_RETENTION_DAYS).
| Variable | Défaut | Rôle |
|---|---|---|
EAI_OPIK_URL | vide | backend Opik (traces IA, OTLP /v1/private/otel, effacement et rétention par l'API REST). En prod : https, ou http simple vers un Service *.svc uniquement, jamais d'identifiants dans l'URL (démarrage refusé sinon) |
EAI_OPIK_UI_URL | vide | interface Opik pour les liens de trace de GET /v1/telemetry/traces/{id} ; https exigé en prod |
EAI_GRAFANA_URL | vide | console Grafana exploitée par le client (apportée par le client, jamais déployée par la plateforme à cause de sa licence AGPL, ADR-0101), lien profond de l'espace d'exploitation du portail (GET /v1/platform-manager/console) ; https sans identifiants, sinon le lien n'est pas montré |
EAI_KEYCLOAK_CONSOLE_URL | vide | console d'administration Keycloak, lien profond du portail ; https sans identifiants |
EAI_LITELLM_UI_URL | vide | interface d'administration du proxy LiteLLM, lien profond du portail ; https sans identifiants |
EAI_OPENSEARCH_DASHBOARDS_URL | vide | OpenSearch Dashboards, lien profond du portail ; https sans identifiants |
EAI_PLATFORM_MANAGER_CONSOLE_URL | vide (alors EAI_PLATFORM_MANAGER_URL) | console du Platform Manager vers laquelle pointent les liens profonds de l'espace Platform Manager (ADR-0162) |
EAI_OPIK_WORKSPACE | default | espace de travail Opik (en-tête Comet-Workspace) |
EAI_OPIK_PROJECT | eai-platform | projet Opik des spans de la plateforme |
EAI_OPIK_API_KEY | vide | clé d'API, seulement si le déploiement Opik authentifie son API (secret OpenBao) |
EAI_METRICS_TOKEN | vide | jeton porteur de GET /metrics, exigé hors dev et test (32 caractères minimum) |
EAI_WORKER_METRICS_PORT | 9464 | port des métriques de python -m eai.worker (0 désactive) |
EAI_MEDIA_WORKER_METRICS_PORT | 9465 | port des métriques de python -m eai.media_worker (0 désactive) |
EAI_WORKER_GAUGES_INTERVAL_SECONDS | 30 | intervalle du job gauges (jauges globales calculées depuis la base) |
EAI_WORKER_VERIFY_CHAIN_INTERVAL_SECONDS | 3600 | intervalle du job verify_chain (chaîne d'audit de chaque tenant) |
Traces et journaux :
| Variable | Rôle |
|---|---|
EAI_OTEL_ENABLED | Active les traces OpenTelemetry. Si un paquet OpenTelemetry manque, l'API refuse de démarrer. |
EAI_SLO_AVAILABILITY_TARGETS | Cible de disponibilité par service, service=valeur séparés par des virgules, valeurs dans [0,5 ; 1). Défaut control_plane_api=0.995,model_gateway=0.995,tool_gateway=0.995,realtime=0.995. Valeur invalide refusée au démarrage en production. |
EAI_SLO_LATENCY_TARGETS_SECONDS | Seuil de latence par service en secondes, dans (0 ; 300]. Défaut 1 pour chaque service. |
EAI_SLO_LATENCY_OBJECTIVE | Part des requêtes qui doit rester sous le seuil de latence, dans [0,5 ; 1). Défaut 0.95. |
EAI_SLO_RETENTION_MINUTES | Durée de conservation en mémoire des mesures par réplique pour GET /v1/telemetry/slo, entre 60 et 10080. Défaut 1440. |
EAI_TELEMETRY_SPAN_MAX_DAYS | Durée maximale de conservation des résumés de spans (eai.telemetry_spans, ADR-0157) pour tous les tenants, appliquée par le job retention du worker, entre 1 et 3650 jours. La politique de rétention telemetry d'un tenant peut être plus courte. Défaut 90. |
EAI_OTEL_EXPORTER_OTLP_ENDPOINT | Collecteur OTLP/HTTP, port 4318 (/v1/traces est ajouté). |
EAI_OTEL_EXPORTER_OTLP_CERTIFICATE | CA interne d'un collecteur https (à défaut SSL_CERT_FILE). |
EAI_LOG_LEVEL | DEBUG, INFO, WARNING, ERROR ou CRITICAL ; journaux JSON sur stdout avec trace_id, span_id et request_id. |
Les clients du chemin IA (LiteLLM, vLLM, adaptateurs multimodaux, collecteur) ne joignent que les hôtes déclarés dans les réglages EAI_*_URL et EAI_*_ENDPOINT.
Voir Supervision et alertes.
Passerelle LiteLLM, versions de modèles et isolement
| Réglage | Rôle |
|---|---|
EAI_LITELLM_URL | Adresse du proxy LiteLLM OSS (1.106.5) ; vide, la passerelle appelle les fournisseurs elle-même. |
EAI_LITELLM_MASTER_KEY | Clé maîtresse du proxy, injectée depuis OpenBao, jamais exposée aux agents. |
EAI_LITELLM_VENV | Outillage de test seulement : venv du vrai proxy créé par bash tools/litellm/setup.sh (défaut /tmp/toolchains/litellm-venv). Sans lui, tests/test_llm_litellm_proxy_real.py échoue avec un message clair. |
Le mode isolé (local_only, air_gapped) n'est pas une variable d'environnement : il se règle par locataire ou par projet avec PUT /v1/llm/isolation et refuse toute route externe avant tout appel sortant. Les versions de modèles, leur déploiement progressif et le retour arrière se pilotent par l'API (voir B-04) ; aucun réglage n'active un modèle sans approbation.
RAG et embeddings
| Réglage | Défaut | Rôle |
|---|---|---|
EAI_RAG_EMBEDDING_MODEL | local-hash-256 | modèle d'embedding du registre (capacité embeddings) d'une nouvelle base de connaissances ; bge-m3-vllm en prod (values-prod.yaml, values-onprem-gpu.yaml) |
EAI_MEMORY_EMBEDDING_MODEL | local-hash-256 | modèle d'embedding de la mémoire des agents ; après un changement, le worker réencode les items |
EAI_RAG_RERANK_MODEL | vide | modèle de reranking (capacité rerank) utilisé par rerank: true sans rerank_model |
EAI_PADDLEOCR_URL | vide | point de service PaddleOCR (POST /ocr) pour les scans ; sinon Docling, sinon tesseract |
EAI_EMBEDDINGS_BATCH_SIZE | 64 | textes par appel du Model Gateway (ingestion, réindexation) |
EAI_QDRANT_SHARD_NUMBER, EAI_QDRANT_REPLICATION_FACTOR, EAI_QDRANT_WRITE_CONSISTENCY_FACTOR | vides (défauts de Qdrant) | shards, réplicas par shard et accusés d'écriture de chaque nouvelle collection Qdrant ; 3, 2 et 1 sur le cluster Qdrant de 3 nœuds (values.yaml, values-prod.yaml) : la perte d'un nœud ne perd aucun vecteur |
EAI_WORKER_EMBEDDINGS_REINDEX_INTERVAL_SECONDS | 60 | intervalle du job embeddings_reindex (réindexation des bases, réencodage de la mémoire) |
Les embeddings passent tous par le Model Gateway avec les contrôles du modèle choisi ; EAI_EMBEDDINGS_URL n'existe plus. local-hash-256 est un hachage de mots, pas un modèle sémantique : il n'est accepté qu'en dev et en test. En prod, le démarrage refuse ce modèle pour EAI_RAG_EMBEDDING_MODEL et EAI_MEMORY_EMBEDDING_MODEL, et hors dev et test la création d'une base qui l'utilise renvoie 422 embedding_model_invalid.
Temps réel et DLP en flux
| Réglage | Défaut | Rôle |
|---|---|---|
EAI_REALTIME_WS_TOKEN_TTL_SECONDS | 300 | Durée de vie d'un ws_token à usage unique |
EAI_REALTIME_WS_MAX_MESSAGE_BYTES | 1048576 | Taille maximale d'un message WebSocket (uvicorn ws_max_size et contrôle du handler, fermeture 1009) |
EAI_REALTIME_WS_MAX_EVENTS_PER_SECOND | 50 | Débit soutenu d'événements client (fermeture 4429) |
EAI_REALTIME_WS_BURST | 100 | Rafale autorisée au-dessus du débit |
EAI_REALTIME_WS_MAX_SESSION_SECONDS | 3600 | Durée maximale d'une connexion (fermeture 4408) |
EAI_REALTIME_WS_IDLE_TIMEOUT_SECONDS | 120 | Délai d'inactivité (fermeture 4408) |
EAI_REALTIME_CONSENT_REQUIRED | non défini (requis hors dev et test) | Transcription temps réel refusée sans consentement actif du participant (consent_required) ; false est refusé au démarrage en production. L'enregistrement exige toujours un consentement |
EAI_VAD_URL | non défini | Worker vocal HTTP (route /vad, Silero VAD) appelé par l'adaptateur http-vad via la garde de sortie |
EAI_SILERO_VAD_MODEL | non défini | Fichier ONNX Silero VAD (MIT) pour l'adaptateur en processus silero-onnx (onnxruntime) |
EAI_KOKORO_MODEL, EAI_KOKORO_VOICES, EAI_KOKORO_VOICE | non définis, af_heart | Fichiers Kokoro v1.0 (poids Apache-2.0) de l'adaptateur TTS de référence kokoro (kokoro-onnx) |
EAI_STREAM_DLP_HOLDBACK_CHARS | 128 | Caractères retenus par le tampon DLP glissant des flux |
Redis (cache et coordination)
Voir redis.md. Redis n'est qu'un cache et une aide à la coordination : permissions, suspensions, quotas et preuves restent lus dans PostgreSQL.
| Réglage | Défaut | Rôle |
|---|---|---|
EAI_REDIS_URL | vide | rediss://hôte:port/0 (TLS). Vide : compteurs de débit en mémoire, par réplica. En prod, le démarrage refuse redis:// sans TLS |
EAI_REDIS_USERNAME | vide | Utilisateur ACL Redis |
EAI_REDIS_PASSWORD_FILE | vide | Fichier contenant le mot de passe ACL (jamais le mot de passe lui-même). Obligatoire en prod quand EAI_REDIS_URL est défini |
EAI_REDIS_TLS_CA_FILE | vide | Bundle CA vérifiant le certificat du serveur rediss:// |
Licences
Voir licensing.md. Aucun de ces réglages ne limite les utilisateurs, agents, applications, cas d'usage ou plugins.
| Réglage | Défaut | Rôle |
|---|---|---|
EAI_LICENSE_PUBLIC_KEYS | vide | Clés publiques Ed25519 de l'éditeur, kid:x séparés par des virgules (plusieurs pour une rotation). En prod, le démarrage refuse une valeur mal formée, un kid dupliqué ou un kid test-* |
EAI_LICENSE_EXPIRING_SOON_DAYS | 30 | Jours avant valid_until où l'état passe à expiring_soon (1 à 365, contrôlé au démarrage en prod) |
EAI_LICENSE_WARNING_DAYS | 30,7,1 | Seuils d'avertissement du job license_check (jours avant valid_until) |
EAI_WORKER_LICENSE_CHECK_SECONDS | 3600 | Intervalle du job license_check du worker |
Context Authority, délégations, mandats et accès d'urgence
Voir ../security/identity-context-delegation.md. La clé privée de l'autorité de contexte n'est jamais journalisée, jamais renvoyée ni stockée en base : seule sa clé publique (JWK) est enregistrée.
| Réglage | Défaut | Rôle |
|---|---|---|
EAI_CONTEXT_SIGNING_KEY_REF | vide | Référence OpenBao de la clé privée, openbao:<chemin kv>#<champ> (PEM Ed25519 ou ECDSA P-256). Obligatoire en prod ; changer la clé vaut rotation (l'ancienne vérifie encore pendant EAI_CONTEXT_MAX_TTL_SECONDS) |
EAI_CONTEXT_SIGNING_KEY | vide | Clé PEM dans l'environnement, réservée au dev et aux tests : refusée au démarrage en prod |
EAI_CONTEXT_ISSUER | urn:eai:context-authority | Émetteur (iss) des contextes signés, vérifié à chaque verify |
EAI_CONTEXT_AUDIENCES | eai-control-plane | Audiences acceptées, séparées par des virgules ; la première est l'audience par défaut |
EAI_CONTEXT_TTL_SECONDS | 900 | Durée de vie par défaut d'un contexte |
EAI_CONTEXT_MAX_TTL_SECONDS | 3600 | Durée de vie maximale d'un contexte et fenêtre de vérification d'une clé retirée |
EAI_CONTEXT_LEEWAY_SECONDS | 30 | Tolérance d'horloge sur iat et exp |
EAI_CONTEXT_REQUIRED | 0 | Chaque run reçoit un contexte signé ; sans clé, le run est refusé (503). Doit valoir 1 en prod (contrôlé au démarrage) |
EAI_DELEGATION_DEFAULT_TTL_SECONDS | 28800 | Durée de la délégation implicite d'un run |
EAI_DELEGATION_MAX_TTL_SECONDS | 86400 | Durée maximale d'une délégation |
EAI_MANDATE_MAX_TTL_DAYS | 365 | Durée maximale d'un mandat d'agent planifié |
EAI_BREAK_GLASS_MAX_SECONDS | 3600 | Durée maximale d'un accès d'urgence |
EAI_WORKLOAD_SERVICE_ID | eai-control-plane | Identité technique de ce workload portée par les runs |
EAI_WORKLOAD_SPIFFE_ID | vide | SPIFFE ID de ce workload quand SPIRE en délivre un |
SOC, AI-SDR et Kill Switch
Voir ../security/soc-runbook.md. Les limites de la garde de proportionnalité (confiance, rayon d'impact, réactions soumises à approbation) sont dans deploy/policies/opa/data.json (soc_response), pas dans les réglages.
| Réglage | Défaut | Rôle |
|---|---|---|
EAI_SOC_WEBHOOK_SECRET | vide | Secret HMAC de POST /v1/soc/webhooks/{source} (Falco, Tetragon, OpenSearch) et de POST /v1/soc/receipts (vide : toute livraison refusée en 401). 32 caractères minimum en prod (contrôlé au démarrage) |
EAI_SOC_CORRELATION_WINDOW_SECONDS | 900 | Fenêtre du corrélateur d'événements (même utilisateur, agent ou tenant) ; 60 à 86400, contrôlée au démarrage en prod |
EAI_WORKER_SOC_SCAN_SECONDS | 30 | Intervalle du job soc_scan du worker (chaîne d'audit vers détections, références des politiques) |
EAI_WORKER_SOC_VERIFY_SECONDS | 120 | Intervalle du job soc_verify du worker (Containment Verifier, reçus, dérive réappliquée) |
EAI_MCP_RUNTIME_REAPER_SECONDS | 60 | Intervalle de la boucle du contrôleur du Runtime MCP, dans les pods de l'API (veille, pannes, sondes, nettoyages) |
EAI_MCP_INTERNAL_HOSTS | vide | Hôtes internes des serveurs MCP que la passerelle peut appeler (hôte, hôte:port, *.suffixe, CIDR) ; tout hôte public est refusé |
EAI_MCP_CATALOG_STORAGE_PROFILE | vide | Profil de stockage plateforme (SeaweedFS) du catalogue MCP de l'entreprise ; obligatoire en production |
EAI_MCP_CATALOG_KEY | mcp-runtime/templates.yaml | Clé de l'objet du catalogue MCP dans ce profil |
EAI_MCP_CATALOG_REFRESH_SECONDS | 300 | Période de relecture du catalogue MCP |
EAI_MCP_RUNTIME_IMAGE_REGISTRIES | <harbor-host> | Registres internes d'où une image de modèle peut venir |
EAI_MCP_RUNTIME_WAKE_TIMEOUT_SECONDS | 90 | Attente d'un appel pour une instance en veille ou recréée |
EAI_MCP_RUNTIME_FAILURE_LIMIT | 3 | Pannes dans la fenêtre avant l'état échec (redémarrage explicite) |
EAI_MCP_RUNTIME_FAILURE_WINDOW_SECONDS | 900 | Fenêtre de comptage des pannes d'une instance |
EAI_MCP_RUNTIME_HEALTH_TIMEOUT_SECONDS | 3.0 | Délai de la sonde GET /health d'un proxy ToolHive |
EAI_MCP_RUNTIME_OTEL_ENDPOINT | otel-collector.observability.svc.cluster.local:4318 | Collecteur OTLP/HTTP (TLS) des proxys ToolHive, hôte:port sans schéma |
EAI_MCP_RUNTIME_OTEL_SAMPLING_RATE | 1.0 | Échantillonnage des traces des proxys ToolHive |
EAI_MCP_RUNTIME_OTEL_CA_FILE | /etc/eai/ca/ca.crt | CA interne copiée dans chaque espace de noms du Runtime MCP ; obligatoire hors dev et test |
Stockage objet client (brique E-13)
Voir ../fr/guides/storage-administration.md. Le client choisit son stockage (AWS S3, Azure Blob, Google Cloud Storage, IBM COS, SeaweedFS ou autre service compatible S3) par un profil de stockage ; les secrets restent dans OpenBao (profils de tenant) ou dans des variables EAI_CRED_<NOM> (profils de plateforme), jamais dans le profil. Les points de terminaison privés (SeaweedFS ou appliance IBM COS sur site) doivent être listés dans EAI_EGRESS_PRIVATE_ALLOWLIST.
| Réglage | Défaut | Rôle |
|---|---|---|
EAI_AUDIT_WORM_STORAGE_PROFILE | vide | Nom du profil de plateforme qui reçoit les exports WORM d'audit des tenants sans profil audit_worm ; vide : stockage historique EAI_S3_* (manifeste worm.qualified: false) |
EAI_STORAGE_CA_BUNDLE | vide | Fichier PEM de l'autorité de certification d'un point de terminaison sur site ; la vérification TLS reste active. En prod, un fichier illisible est refusé au démarrage |
EAI_STORAGE_REQUEST_TIMEOUT_SECONDS | 30 | Délai d'un appel au stockage (connexion limitée à 5 s) |
EAI_STORAGE_PRESIGN_MAX_SECONDS | 3600 | Durée maximale d'une URL présignée délivrée ; 1 à 86400, contrôlée au démarrage en prod (une URL présignée vaut identifiant) |
EAI_STORAGE_CAPABILITY_MAX_AGE_SECONDS | 86400 | Âge maximal d'une vérification des capacités ; au-delà, l'usage est refusé (409 storage_capability_missing, raison stale) jusqu'à une nouvelle vérification ; 60 à 604800, contrôlé au démarrage en prod |
Hors des environnements dev et test, les points de terminaison de stockage, les points de jeton (IBM IAM, Microsoft Entra ID, Google OAuth2) et les URL présignées doivent être en https (422 storage_tls_required).
Bac à sable gVisor
| Variable | Défaut | Rôle |
|---|---|---|
EAI_SANDBOX_RUNSC | /tmp/toolchains/runsc | binaire runsc (gVisor) pour le code d'outil non fiable ; s'il est absent ou inutilisable, le code est refusé (fermeture par défaut) |
Audit Gateway et Evidence Service (section 11 du kit)
Voir siem-audit.md. Les contrôles de démarrage en prod refusent l'absence de EAI_AUDIT_SEAL_SIGNING_KEY_REF et toute valeur de EAI_AUDIT_PAYLOAD_KEK autre que openbao-transit.
| Variable | Défaut | Rôle |
|---|---|---|
EAI_AUDIT_GATEWAY_HTTP_URL | vide | Collecteur SIEM HTTP : un POST par événement, en-tête Idempotency-Key égal à l'identifiant de l'événement, via le client de sortie opérateur |
EAI_AUDIT_GATEWAY_NATS_SUBJECT | audit.events | Sujet JetStream eai.<tenant>.<sujet> (si EAI_NATS_URL est défini), en-tête Nats-Msg-Id pour la déduplication |
EAI_AUDIT_GATEWAY_NATS_STREAM | EAI_AUDIT | Flux JetStream créé s'il manque (sujets eai.*.audit.>) |
EAI_AUDIT_GATEWAY_BATCH | 500 | Lignes de la boîte d'envoi traitées par locataire et par passage |
EAI_AUDIT_GATEWAY_MAX_ATTEMPTS | 12 | Au-delà, la ligne reste en attente et une alerte d'intégrité outbox_missing est ouverte |
EAI_AUDIT_GATEWAY_BACKOFF_SECONDS | 2.0 | Base du recul exponentiel (base × 2^(tentatives-1), plafonné à 900 s) |
EAI_WORKER_AUDIT_GATEWAY_SECONDS | 10 | Période du job audit_gateway |
EAI_AUDIT_SEAL_SIGNING_KEY_REF | vide | Référence OpenBao openbao:<chemin kv>#<champ> de la clé privée Ed25519 des sceaux (obligatoire en prod) |
EAI_AUDIT_SEAL_SIGNING_KEY | vide | Clé PEM Ed25519 en clair, dev et test uniquement |
EAI_WORKER_AUDIT_SEAL_SECONDS | 300 | Période du job audit_seal |
EAI_AUDIT_SEAL_MAX_EVENTS | 10000 | Événements au plus par sceau |
EAI_WORKER_AUDIT_INTEGRITY_SECONDS | 900 | Période du job audit_integrity (chaînes, sceaux, signatures, horodatages, couverture de la boîte d'envoi) |
EAI_AUDIT_CLOCK_SKEW_SECONDS | 300 | Avance maximale admise de event_time sur l'horloge de la base ; 0 à 3600, contrôlé au démarrage en prod |
EAI_AUDIT_PAYLOAD_KEK | vide | Clé de chiffrement des charges utiles sensibles : openbao-transit (prod) ou clé de 32 octets en base64 (dev et test) ; vide : les charges sensibles sont refusées |
EAI_AUDIT_PAYLOAD_RETENTION_DAYS | 365 | Âge au-delà duquel le job audit_retention purge les charges chiffrées hors conservation légale |
EAI_WORKER_AUDIT_RETENTION_SECONDS | 86400 | Période du job audit_retention |
EAI_OPA_DELIVERY | push | push : les politiques engine=opa sont poussées dans OPA à l'écriture ; bundle : OPA charge les bundles signés publiés par POST /v1/policies/bundles (prod : clé de signature obligatoire) |
EAI_POLICY_BUNDLE_SIGNING_KEY_FILE | vide | Fichier PEM de la clé privée RSA qui signe les bundles (RS256) ; obligatoire avec EAI_OPA_DELIVERY=bundle, publication refusée en prod sans elle |
EAI_POLICY_BUNDLE_KEY_ID | eai-policy | keyid des signatures, identique à l'entrée keys de la configuration OPA |
EAI_KMS_PROVIDER | none | Gestion des clés eai.crypto.kms : openbao (Transit), pkcs11 (HSM du client) ou none |
EAI_KMS_PKCS11_MODULE | vide | Chemin de la bibliothèque PKCS#11 fournie par le client (obligatoire avec pkcs11) |
EAI_KMS_PKCS11_TOKEN_LABEL | vide | Libellé du token HSM (obligatoire avec pkcs11) |
EAI_KMS_PKCS11_PIN_FILE | vide | Fichier monté contenant le PIN utilisateur, jamais le PIN dans l'environnement (obligatoire avec pkcs11) |