Posture de sécurité
L'écran Posture de sécurité permet de lire les protections de la plateforme et ses contrôles automatiques (conforme, alerte, échec), de modifier les réglages de sécurité de votre tenant (injection de prompt, contenu non fiable, liens, sorties réseau) et de suivre les événements de sécurité récents. Chemin dans le portail : /security/posture, menu Sécurité et gouvernance > Posture de sécurité. Il sert aux responsables sécurité (security_officer) et aux administrateurs de tenant (tenant_admin).
Ce que montre l'écran
L'écran est construit par portal/src/screens/security-posture.tsx et lit quatre routes.
- Ligne d'en-tête : le badge Environnement (par exemple
prod) et la date Généré de la posture, tous deux lus dansGET /v1/security/posture. - Cartes de synthèse : trois compteurs, Conformes, Avertissements et En échec (champ
summaryde la posture). - Carte Contrôles : les contrôles regroupés par catégorie, triés par nom. Chaque ligne montre un badge d'état (OK, Alerte ou Échec), le message dans la langue du portail (
message_froumessage_en), l'identifiant du contrôle en police fixe et, s'il existe, un badge de gravité (Critique, Haute, Moyenne, Basse). Sans contrôle : « Aucun contrôle ». - Carte Protections : une tuile par protection de la plateforme (par exemple En-têtes de sécurité, HSTS, Hôtes autorisés, Proxys de confiance, Limites de taille, Limites de débit, Authentification, Origines CORS, Politique de sortie, Documentation API exposée). Un booléen affiche Activé ou Désactivé, une liste affiche un badge par valeur, un objet est affiché en JSON. Sans protection : « Aucune protection signalée ».
- Carte Réglages de sécurité du tenant (« Mise à jour partielle, auditée sous security.settings.update. »), chargée par
GET /v1/security/settings:
| Champ | Valeurs | Défaut | Signification |
|---|---|---|---|
| Mode anti-injection de prompt | Désactivé, Détecter, Bloquer | Détecter | off : aucun contrôle, detect : audit seulement, block : refuser la requête. |
| Liens dans les réponses du modèle | Autoriser, Retirer les non fiables | Retirer les non fiables | strip_untrusted retire les liens vers des hôtes hors liste. |
| Encadrer le contenu non fiable | interrupteur | activé | Les résultats d'outils et les documents sont délimités comme données non fiables. |
| Hôtes de liens autorisés | un hôte par ligne | vide | Hôtes dont les liens restent dans la réponse du modèle. |
| Hôtes de sortie autorisés | un hôte ou *.suffixe par ligne | vide | Hôtes que le tenant peut appeler. Vide : aucune restriction du tenant. |
- Carte Événements de sécurité récents : un tableau avec les colonnes Date, Action, Acteur et Résultat. Le portail lit les 200 derniers événements d'audit (
GET /v1/audit/events) et garde les 50 plus récents dont l'action commence parsecurity.. Sans événement : « Aucun événement de sécurité ».
Actions
| Bouton ou action | Effet | Appel API | Rôles |
|---|---|---|---|
| Actualiser (en-tête de page) | Relit la posture : synthèse, contrôles et protections. | GET /v1/security/posture | security_officer, tenant_admin |
| Réessayer (état d'erreur d'une carte) | Relit la carte en erreur. | La route de la carte | Ceux de la carte |
| Enregistrer | Envoie les cinq réglages du formulaire en mise à jour partielle, puis recharge la posture et les événements. Message « Réglages de sécurité enregistrés ». | PUT /v1/security/settings | tenant_admin, security_officer |
| Réinitialiser | Remet le formulaire aux dernières valeurs lues dans l'API, sans appel. | Aucun | Tout lecteur de l'écran |
| Chargement de Réglages de sécurité du tenant | Lit les réglages actuels du tenant. | GET /v1/security/settings | tenant_admin, security_officer |
| Chargement de Événements de sécurité récents | Lit les événements d'audit et filtre les actions security.*. | GET /v1/audit/events | auditor, security_officer, tenant_admin, platform_admin |
Rôles
Le portail ne masque aucune partie de cet écran : le Control Plane décide. Côté serveur (services/control-plane/src/eai/domains/security/__init__.py), la posture et les réglages exigent security_officer ou tenant_admin, et platform_admin passe tous les contrôles de rôle. Les réglages exigent un tenant : un principal sans tenant reçoit tenant_required. La carte des événements suit les lecteurs du journal d'audit (ROLES.auditReaders dans portal/src/lib/kit.ts : auditor, security_officer, tenant_admin, platform_admin). Chaque enregistrement est écrit dans le journal d'audit sous security.settings.update avec les champs modifiés.
Tâches courantes
Revoir la posture avant une mise en production
- Ouvrir l'écran. La posture réunit les contrôles de la plateforme en un seul endroit. Menu Sécurité et gouvernance > Posture de sécurité. Résultat attendu : l'en-tête montre l'environnement et la date de génération, puis les trois compteurs. En cas d'échec :
forbidden(HTTP 403) signifie que vous n'avez nisecurity_officernitenant_admin. - Lire d'abord les contrôles en échec. Un contrôle Échec est une protection absente ou mal configurée. Cherchez dans la carte Contrôles les badges Échec et notez leur identifiant. Résultat attendu : la liste des contrôles à corriger, avec leur gravité. En cas d'échec : « Aucun contrôle » signifie que l'API a renvoyé une liste vide ; cliquez Actualiser.
- Vérifier les protections. Elles montrent la configuration effective de l'API (en-têtes, hôtes, limites, CORS). Lisez la carte Protections. Résultat attendu : Activé sur les protections attendues, les hôtes autorisés et les origines CORS de votre déploiement. En cas d'échec : une protection Désactivé se change dans la configuration du Control Plane, pas depuis cet écran (voir la page de configuration de la sécurité).
- Actualiser après correction. La posture est calculée à chaque lecture. Cliquez Actualiser. Résultat attendu : le compteur En échec baisse. En cas d'échec : le changement de configuration n'a pas été appliqué au Control Plane en service.
Bloquer les injections de prompt du tenant
- Choisir le mode.
blockrefuse une requête dont le contenu ressemble à une injection,detectse contente de l'auditer. Dans Réglages de sécurité du tenant, réglez Mode anti-injection de prompt sur Bloquer. Résultat attendu : la liste affiche Bloquer. En cas d'échec : la carte affiche « Connectez-vous avec un tenant pour modifier ses réglages. » quand l'API répond 400 ou 404 ; connectez-vous avec un compte du tenant. - Garder le contenu non fiable encadré. L'encadrement délimite les résultats d'outils et les documents comme des données, pas comme des instructions. Laissez Encadrer le contenu non fiable activé. Résultat attendu : l'interrupteur est activé.
- Enregistrer. Cliquez Enregistrer. Résultat attendu : le message « Réglages de sécurité enregistrés » et une ligne
security.settings.updatedans Événements de sécurité récents. En cas d'échec :forbiddensignale un rôle manquant ; une erreur sous un champ signale que la valeur de ce champ a été refusée.
Restreindre les hôtes que le tenant peut appeler
- Lister les hôtes. Seuls les noms d'hôte publics sont acceptés, un par ligne, ou
*.suffixepour tout un domaine. Remplissez Hôtes de sortie autorisés, par exempleapi.openai.com. Résultat attendu : un hôte par ligne dans le champ. En cas d'échec : rien à faire à cette étape. - Enregistrer. Cliquez Enregistrer. Résultat attendu : « Réglages de sécurité enregistrés ». En cas d'échec : « Nom d'hôte public invalide » sous le champ signale une adresse IP,
localhostou un suffixe interne (.local,.internal,.svc,.corp...) ; « Liste d'au plus 200 noms d'hôte attendue. » signale une liste trop longue. - Vérifier. Un appel sortant vers un autre hôte est désormais refusé. Surveillez Événements de sécurité récents. Résultat attendu : les sorties refusées y apparaissent. En cas d'échec : cliquez Réessayer sur la carte des événements ;
forbiddensur cette carte signifie que vous ne lisez pas le journal d'audit.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
État d'erreur forbidden (HTTP 403) sur la posture | Vos rôles ne sont ni security_officer ni tenant_admin. | Demandez l'un de ces rôles à un administrateur du tenant. |
| « Connectez-vous avec un tenant pour modifier ses réglages. » | GET /v1/security/settings a répondu 400 ou 404 (par exemple unknown_tenant). | Connectez-vous avec un compte rattaché à un tenant. |
Erreur tenant_required dans la carte des réglages | Le principal agit sans tenant (HTTP 403). | Utilisez un compte ou une clé d'API du tenant. |
| Message rouge sous un champ après Enregistrer | validation_error (HTTP 422) avec details.field : réglage inconnu, valeur hors de off, detect, block ou allow, strip_untrusted, nom d'hôte public invalide, plus de 200 hôtes. | Corrigez le champ cité dans le message et enregistrez à nouveau. |
Événements de sécurité récents affiche forbidden | GET /v1/audit/events exige auditor, security_officer, tenant_admin ou platform_admin. | Demandez un rôle qui lit le journal d'audit. |
| « Aucun événement de sécurité » | Aucun événement d'audit d'action security.* parmi les 200 derniers. | Normal sur un tenant calme ; consultez le journal complet sur l'écran des événements d'audit. |
| « L'API Control Plane est injoignable » | L'API est arrêtée ou l'adresse de l'API du portail est fausse. | Vérifiez le Control Plane et le réglage NEXT_PUBLIC_EAI_API_URL du portail. |