Mode d'isolation
L'écran Mode d'isolation permet de lire et de régler le mode d'isolation du tenant ou d'un projet : connected, local_only ou air_gapped. Quand le mode n'est pas connected, la passerelle refuse toute route externe et tout appel sortant vers un hôte qui n'est ni local ni déclaré interne. Chemin dans le portail : /llm/isolation. Il est utilisé par les administrateurs du tenant et les responsables sécurité. L'écran est construit dans portal/src/screens/kit-data.tsx (Isolation, isolationCfg).
Ce que montre l'écran
- La section Mode actuel (« Laissez le projet vide pour le mode du locataire. ») : le champ Projet avec Appliquer, puis le mode effectif en badge (neutre pour
connected, avertissement sinon) et le JSON{"project_id", "mode", "internal_hosts"}lu parGET /v1/llm/isolation. Le mode effectif est la ligne du projet si elle existe, sinon celle du tenant, sinonconnected. - Le panneau Définir le mode d'isolation (« S'applique au locataire ou à un projet. ») : les champs Mode (
connected,local_only,air_gapped, obligatoire), Projet (vide : le tenant) et Hôtes internes (séparés par des virgules, par exemple<vllm-host>, <ollama-host>), le bouton Exécuter et le Résultat JSON.
En local_only et air_gapped, un modèle n'est routable que si son fournisseur est un moteur local (vllm, ollama, lm_studio) ou si son adresse fait partie des Hôtes internes ; la barrière de sortie laisse aussi passer 127.0.0.1, localhost et les services d'exploitation comme le proxy LiteLLM.
Actions
| Bouton ou action | Ce qu'il fait | Appel d'API | Rôles |
|---|---|---|---|
| Appliquer (Mode actuel) | Lit le mode effectif du projet saisi, ou du tenant si le champ est vide. | GET /v1/llm/isolation | tenant_admin, platform_admin, security_officer, finops, developer, auditor, viewer |
| Exécuter (Définir le mode d'isolation) | Après la confirmation « Définir le mode d'isolation ? Cette action sensible est consignée dans le journal d'audit. », écrit le mode et les hôtes internes du tenant ou du projet. | PUT /v1/llm/isolation | portail : tenant_admin, security_officer ; serveur : tenant_admin, platform_admin, security_officer |
Rôles
- Lecture
GET /v1/llm/isolation: les rôlesREADdeservices/control-plane/src/eai/domains/llm/lifecycle.py:tenant_admin,platform_admin,security_officer,finops,developer,auditor,viewer. - Écriture
PUT /v1/llm/isolation:ADMINplussecurity_officerdans le même fichier (tenant_admin,platform_admin,security_officer). Le portail affiche le formulaire auxROLES.isolationWritersdeportal/src/lib/kit.ts(tenant_admin,security_officer) ; les autres rôles voient « Nécessite l'un de ces rôles ». - Chaque changement est enregistré dans le journal d'audit (
llm.isolation.set). Les routes demandent un tenant (tenant_requiredsinon).
Tâches courantes
Passer un projet en mode local uniquement
- Lire le mode actuel. Saisissez le projet dans Projet et cliquez sur Appliquer, pour savoir d'où vous partez. Résultat attendu : le badge montre le mode effectif,
connectedsi rien n'est réglé. En cas d'échec : un panneau d'erreur avec Réessayer donne la cause. - Déclarer les hôtes internes. Dans Définir le mode d'isolation, choisissez Mode
local_only, saisissez le même Projet, et listez les Hôtes internes qui servent les modèles locaux (hôte ouhost:port, par exemple<vllm-host>:8000). Résultat attendu : le formulaire est valide. En cas d'échec : Obligatoire sous Mode. - Appliquer le mode. Cliquez sur Exécuter et confirmez. Résultat attendu : le Résultat montre le mode et les hôtes triés, en minuscules. En cas d'échec : « Le paramètre
internal_hostsest invalide. » signifie qu'un hôte a un mauvais format. - Vérifier l'effet. Appelez un modèle externe depuis le Playground passerelle avec ce projet. Résultat attendu : « Mode
local_only: le modèle<model_id>du fournisseur<fournisseur>est externe et ne peut pas être routé. » En cas d'échec : le modèle est peut-être local ou servi par un hôte interne, ce qui est permis.
Revenir en mode connecté
- Régler le mode. Dans Définir le mode d'isolation, choisissez Mode
connected, saisissez le Projet (ou laissez vide pour le tenant), cliquez sur Exécuter et confirmez. Résultat attendu : le Résultat montreconnected. En cas d'échec : « Nécessite l'un de ces rôles » signifie que votre rôle ne peut pas changer le mode. - Le relire. Cliquez sur Appliquer dans Mode actuel. Résultat attendu : le badge montre
connected. En cas d'échec : une ligne de projet l'emporte sur celle du tenant ; réglez le projet lui-même.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
« Le paramètre mode est invalide. » (parameter_invalid, 422) | Mode hors de connected, local_only, air_gapped. | Choisissez l'une des trois valeurs. |
« Le paramètre internal_hosts est invalide. » (parameter_invalid, 422) | Un hôte contient un schéma, un chemin ou des caractères autres que lettres, chiffres, point et tiret : le format est host ou host:port. | Saisissez seulement le nom d'hôte et le port facultatif. |
« Mode <mode> : le modèle <model_id> du fournisseur <fournisseur> est externe et ne peut pas être routé. » (isolation_external_route, 403) à l'appel | Le mode refuse les fournisseurs externes. | Utilisez un modèle local, ajoutez son hôte aux Hôtes internes, ou revenez à connected. |
« Mode <mode> : appel sortant vers <hôte> refusé, seuls les points d'accès locaux et internes sont autorisés. » (isolation_egress_denied, 403) | L'adresse sortante du modèle n'est pas interne. | Ajoutez l'hôte aux Hôtes internes. |
« Cette opération nécessite un contexte de locataire. » (tenant_required, 400) | Pas de tenant. | Connectez-vous sur un tenant. |
Le mode du tenant est réglé mais un projet reste connected | Le projet a sa propre ligne. | Réglez aussi le mode du projet. |