Aller au contenu principal

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.

ComposantFichierPoints clés
Control Planedeploy/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 fondvalues.yaml (worker)python -m eai.worker, une réplique, même image, ConfigMap et secrets que l'API, NetworkPolicy dédiée
Portalvalues.yaml (portal)NEXT_PUBLIC_EAI_API_URL, client OIDC public portal (PKCE S256)
LiteLLMdeploy/litellm/config.example.yaml, litellm.configclés via os.environ/..., fallbacks routeur ; en prod généré par GET /v1/litellm/config et POST /v1/litellm/sync
vLLMvllm.modelsune entrée par modèle : gpus, args, minReplicas/maxReplicas, seuil KEDA
Workers multimodauxworkers.itemsSTT/TTS/vidéo, KEDA nats-jetstream sur le lag du consumer (stream et consumer passés en arguments)
Keycloakdeploy/keycloak/realm-enterprise-ai.jsonclients portal (PKCE S256), control-plane (bearer, audience), cli (device flow), rôles realm, claims sub, tenant, clearance, roles
OpenFGAdeploy/policies/openfga/model.fgarelations owner, editor, viewer, can_use, member sur chaque type, objets préfixés par le tenant
OPAdeploy/policies/opapaquets 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
Kyvernodeploy/policies/kyverno/cluster-policies.yamlsignatures cosign, non-root, rootfs en lecture seule, limites, pas de latest, RuntimeClass sandbox, labels tenant/owner
SPIREdeploy/spiretrust domain enterprise-ai.internal, attestation k8s_psat, UpstreamAuthority OpenBao
OpenBaodeploy/openbaopolitiques HCL par service (kv/data/tenants/*, clés transit tenant-<uuid>), rôles auth kubernetes
cert-managerdeploy/cert-managerCA interne, émetteur OpenBao PKI, ACME pour la passerelle
Ciliumdeploy/ciliumdefault deny, egress FQDN par fournisseur (étiquette eai.io/provider-<nom>=enabled sur LiteLLM)
APISIXdeploy/apisix/apisix.yamlroutes /v1, OIDC, limitation de débit Redis, suppression des en-têtes X-Dev-* et X-SPIFFE-ID ; /metrics non publié
KEDAdeploy/kedaLiteLLM, workers agents
Observabilitédeploy/observabilityOTel 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)
PostgreSQLdeploy/data/postgres/cluster.yamlCNPG 3 instances, anti-affinité par zone, WAL vers S3
Velerodeploy/velero/schedules.yamlquotidienne et horaire, hooks PostgreSQL, Qdrant, OpenBao
Wazuhdeploy/wazuhdécodeur JSON audit, règles 100800-100808

Activer un fournisseur externe​

  1. Stocker la clé : bao kv put kv/eai/prod/providers/openai OPENAI_API_KEY=....
  2. Ajouter la clé à litellm.secrets.keys et le modèle dans la configuration générée.
  3. Étiqueter les pods LiteLLM eai.io/provider-openai=enabled pour ouvrir l'egress FQDN.
  4. Autoriser fournisseur, modèle et région dans la politique du tenant (OPA eai.model_invocation, surcharges data.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).

VariableDéfautRôle
EAI_OPIK_URLvidebackend 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_URLvideinterface Opik pour les liens de trace de GET /v1/telemetry/traces/{id} ; https exigé en prod
EAI_GRAFANA_URLvideconsole 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_URLvideconsole d'administration Keycloak, lien profond du portail ; https sans identifiants
EAI_LITELLM_UI_URLvideinterface d'administration du proxy LiteLLM, lien profond du portail ; https sans identifiants
EAI_OPENSEARCH_DASHBOARDS_URLvideOpenSearch Dashboards, lien profond du portail ; https sans identifiants
EAI_PLATFORM_MANAGER_CONSOLE_URLvide (alors EAI_PLATFORM_MANAGER_URL)console du Platform Manager vers laquelle pointent les liens profonds de l'espace Platform Manager (ADR-0162)
EAI_OPIK_WORKSPACEdefaultespace de travail Opik (en-tête Comet-Workspace)
EAI_OPIK_PROJECTeai-platformprojet Opik des spans de la plateforme
EAI_OPIK_API_KEYvideclé d'API, seulement si le déploiement Opik authentifie son API (secret OpenBao)
EAI_METRICS_TOKENvidejeton porteur de GET /metrics, exigé hors dev et test (32 caractères minimum)
EAI_WORKER_METRICS_PORT9464port des métriques de python -m eai.worker (0 désactive)
EAI_MEDIA_WORKER_METRICS_PORT9465port des métriques de python -m eai.media_worker (0 désactive)
EAI_WORKER_GAUGES_INTERVAL_SECONDS30intervalle du job gauges (jauges globales calculées depuis la base)
EAI_WORKER_VERIFY_CHAIN_INTERVAL_SECONDS3600intervalle du job verify_chain (chaîne d'audit de chaque tenant)

Traces et journaux :

VariableRôle
EAI_OTEL_ENABLEDActive les traces OpenTelemetry. Si un paquet OpenTelemetry manque, l'API refuse de démarrer.
EAI_SLO_AVAILABILITY_TARGETSCible 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_SECONDSSeuil de latence par service en secondes, dans (0 ; 300]. Défaut 1 pour chaque service.
EAI_SLO_LATENCY_OBJECTIVEPart des requêtes qui doit rester sous le seuil de latence, dans [0,5 ; 1). Défaut 0.95.
EAI_SLO_RETENTION_MINUTESDuré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_DAYSDuré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_ENDPOINTCollecteur OTLP/HTTP, port 4318 (/v1/traces est ajouté).
EAI_OTEL_EXPORTER_OTLP_CERTIFICATECA interne d'un collecteur https (à défaut SSL_CERT_FILE).
EAI_LOG_LEVELDEBUG, 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églageRôle
EAI_LITELLM_URLAdresse du proxy LiteLLM OSS (1.106.5) ; vide, la passerelle appelle les fournisseurs elle-même.
EAI_LITELLM_MASTER_KEYClé maîtresse du proxy, injectée depuis OpenBao, jamais exposée aux agents.
EAI_LITELLM_VENVOutillage 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églageDéfautRôle
EAI_RAG_EMBEDDING_MODELlocal-hash-256modè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_MODELlocal-hash-256modèle d'embedding de la mémoire des agents ; après un changement, le worker réencode les items
EAI_RAG_RERANK_MODELvidemodèle de reranking (capacité rerank) utilisé par rerank: true sans rerank_model
EAI_PADDLEOCR_URLvidepoint de service PaddleOCR (POST /ocr) pour les scans ; sinon Docling, sinon tesseract
EAI_EMBEDDINGS_BATCH_SIZE64textes par appel du Model Gateway (ingestion, réindexation)
EAI_QDRANT_SHARD_NUMBER, EAI_QDRANT_REPLICATION_FACTOR, EAI_QDRANT_WRITE_CONSISTENCY_FACTORvides (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_SECONDS60intervalle 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églageDéfautRôle
EAI_REALTIME_WS_TOKEN_TTL_SECONDS300Durée de vie d'un ws_token à usage unique
EAI_REALTIME_WS_MAX_MESSAGE_BYTES1048576Taille maximale d'un message WebSocket (uvicorn ws_max_size et contrôle du handler, fermeture 1009)
EAI_REALTIME_WS_MAX_EVENTS_PER_SECOND50Débit soutenu d'événements client (fermeture 4429)
EAI_REALTIME_WS_BURST100Rafale autorisée au-dessus du débit
EAI_REALTIME_WS_MAX_SESSION_SECONDS3600Durée maximale d'une connexion (fermeture 4408)
EAI_REALTIME_WS_IDLE_TIMEOUT_SECONDS120Délai d'inactivité (fermeture 4408)
EAI_REALTIME_CONSENT_REQUIREDnon 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_URLnon définiWorker vocal HTTP (route /vad, Silero VAD) appelé par l'adaptateur http-vad via la garde de sortie
EAI_SILERO_VAD_MODELnon définiFichier ONNX Silero VAD (MIT) pour l'adaptateur en processus silero-onnx (onnxruntime)
EAI_KOKORO_MODEL, EAI_KOKORO_VOICES, EAI_KOKORO_VOICEnon définis, af_heartFichiers Kokoro v1.0 (poids Apache-2.0) de l'adaptateur TTS de référence kokoro (kokoro-onnx)
EAI_STREAM_DLP_HOLDBACK_CHARS128Caractè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églageDéfautRôle
EAI_REDIS_URLviderediss://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_USERNAMEvideUtilisateur ACL Redis
EAI_REDIS_PASSWORD_FILEvideFichier 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_FILEvideBundle 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églageDéfautRôle
EAI_LICENSE_PUBLIC_KEYSvideClé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_DAYS30Jours avant valid_until où l'état passe à expiring_soon (1 à 365, contrôlé au démarrage en prod)
EAI_LICENSE_WARNING_DAYS30,7,1Seuils d'avertissement du job license_check (jours avant valid_until)
EAI_WORKER_LICENSE_CHECK_SECONDS3600Intervalle 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églageDéfautRôle
EAI_CONTEXT_SIGNING_KEY_REFvideRé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_KEYvideClé PEM dans l'environnement, réservée au dev et aux tests : refusée au démarrage en prod
EAI_CONTEXT_ISSUERurn:eai:context-authorityÉmetteur (iss) des contextes signés, vérifié à chaque verify
EAI_CONTEXT_AUDIENCESeai-control-planeAudiences acceptées, séparées par des virgules ; la première est l'audience par défaut
EAI_CONTEXT_TTL_SECONDS900Durée de vie par défaut d'un contexte
EAI_CONTEXT_MAX_TTL_SECONDS3600Durée de vie maximale d'un contexte et fenêtre de vérification d'une clé retirée
EAI_CONTEXT_LEEWAY_SECONDS30Tolérance d'horloge sur iat et exp
EAI_CONTEXT_REQUIRED0Chaque 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_SECONDS28800Durée de la délégation implicite d'un run
EAI_DELEGATION_MAX_TTL_SECONDS86400Durée maximale d'une délégation
EAI_MANDATE_MAX_TTL_DAYS365Durée maximale d'un mandat d'agent planifié
EAI_BREAK_GLASS_MAX_SECONDS3600Durée maximale d'un accès d'urgence
EAI_WORKLOAD_SERVICE_IDeai-control-planeIdentité technique de ce workload portée par les runs
EAI_WORKLOAD_SPIFFE_IDvideSPIFFE 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églageDéfautRôle
EAI_SOC_WEBHOOK_SECRETvideSecret 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_SECONDS900Fenê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_SECONDS30Intervalle du job soc_scan du worker (chaîne d'audit vers détections, références des politiques)
EAI_WORKER_SOC_VERIFY_SECONDS120Intervalle du job soc_verify du worker (Containment Verifier, reçus, dérive réappliquée)
EAI_MCP_RUNTIME_REAPER_SECONDS60Intervalle de la boucle du contrôleur du Runtime MCP, dans les pods de l'API (veille, pannes, sondes, nettoyages)
EAI_MCP_INTERNAL_HOSTSvideHô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_PROFILEvideProfil de stockage plateforme (SeaweedFS) du catalogue MCP de l'entreprise ; obligatoire en production
EAI_MCP_CATALOG_KEYmcp-runtime/templates.yamlClé de l'objet du catalogue MCP dans ce profil
EAI_MCP_CATALOG_REFRESH_SECONDS300Pé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_SECONDS90Attente d'un appel pour une instance en veille ou recréée
EAI_MCP_RUNTIME_FAILURE_LIMIT3Pannes dans la fenêtre avant l'état échec (redémarrage explicite)
EAI_MCP_RUNTIME_FAILURE_WINDOW_SECONDS900Fenêtre de comptage des pannes d'une instance
EAI_MCP_RUNTIME_HEALTH_TIMEOUT_SECONDS3.0Délai de la sonde GET /health d'un proxy ToolHive
EAI_MCP_RUNTIME_OTEL_ENDPOINTotel-collector.observability.svc.cluster.local:4318Collecteur OTLP/HTTP (TLS) des proxys ToolHive, hôte:port sans schéma
EAI_MCP_RUNTIME_OTEL_SAMPLING_RATE1.0Échantillonnage des traces des proxys ToolHive
EAI_MCP_RUNTIME_OTEL_CA_FILE/etc/eai/ca/ca.crtCA 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églageDéfautRôle
EAI_AUDIT_WORM_STORAGE_PROFILEvideNom 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_BUNDLEvideFichier 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_SECONDS30Délai d'un appel au stockage (connexion limitée à 5 s)
EAI_STORAGE_PRESIGN_MAX_SECONDS3600Duré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_SECONDS86400Â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​

VariableDéfautRôle
EAI_SANDBOX_RUNSC/tmp/toolchains/runscbinaire 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.

VariableDéfautRôle
EAI_AUDIT_GATEWAY_HTTP_URLvideCollecteur 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_SUBJECTaudit.eventsSujet 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_STREAMEAI_AUDITFlux JetStream créé s'il manque (sujets eai.*.audit.>)
EAI_AUDIT_GATEWAY_BATCH500Lignes de la boîte d'envoi traitées par locataire et par passage
EAI_AUDIT_GATEWAY_MAX_ATTEMPTS12Au-delà, la ligne reste en attente et une alerte d'intégrité outbox_missing est ouverte
EAI_AUDIT_GATEWAY_BACKOFF_SECONDS2.0Base du recul exponentiel (base × 2^(tentatives-1), plafonné à 900 s)
EAI_WORKER_AUDIT_GATEWAY_SECONDS10Période du job audit_gateway
EAI_AUDIT_SEAL_SIGNING_KEY_REFvideRéférence OpenBao openbao:<chemin kv>#<champ> de la clé privée Ed25519 des sceaux (obligatoire en prod)
EAI_AUDIT_SEAL_SIGNING_KEYvideClé PEM Ed25519 en clair, dev et test uniquement
EAI_WORKER_AUDIT_SEAL_SECONDS300Période du job audit_seal
EAI_AUDIT_SEAL_MAX_EVENTS10000Événements au plus par sceau
EAI_WORKER_AUDIT_INTEGRITY_SECONDS900Période du job audit_integrity (chaînes, sceaux, signatures, horodatages, couverture de la boîte d'envoi)
EAI_AUDIT_CLOCK_SKEW_SECONDS300Avance maximale admise de event_time sur l'horloge de la base ; 0 à 3600, contrôlé au démarrage en prod
EAI_AUDIT_PAYLOAD_KEKvideClé 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_DAYS365Âge au-delà duquel le job audit_retention purge les charges chiffrées hors conservation légale
EAI_WORKER_AUDIT_RETENTION_SECONDS86400Période du job audit_retention
EAI_OPA_DELIVERYpushpush : 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_FILEvideFichier 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_IDeai-policykeyid des signatures, identique à l'entrée keys de la configuration OPA
EAI_KMS_PROVIDERnoneGestion des clés eai.crypto.kms : openbao (Transit), pkcs11 (HSM du client) ou none
EAI_KMS_PKCS11_MODULEvideChemin de la bibliothèque PKCS#11 fournie par le client (obligatoire avec pkcs11)
EAI_KMS_PKCS11_TOKEN_LABELvideLibellé du token HSM (obligatoire avec pkcs11)
EAI_KMS_PKCS11_PIN_FILEvideFichier monté contenant le PIN utilisateur, jamais le PIN dans l'environnement (obligatoire avec pkcs11)