Aller au contenu principal

Politiques

L'écran Politiques permet de gérer les règles de politique du tenant, d'évaluer une requête Policy Contract contre elles, de publier les politiques OPA en bundle signé et de vérifier la révision que chaque moteur de politiques exécute réellement. Chemin dans le portail : /security/policies, menu Sécurité et gouvernance > Politiques. Il sert aux responsables sécurité et aux administrateurs de tenant qui écrivent les règles, aux auditeurs qui les lisent et aux développeurs qui testent une requête.

Ce que montre l'écran​

L'écran (Policies dans portal/src/screens/security.tsx) comporte quatre sections, de haut en bas.

  • Tableau Politiques, lu dans GET /v1/policies (sans pagination) : colonnes Nom, Version, Moteur, Priorité, Statut, Mis à jour. Un clic sur une ligne ouvre un panneau de détail chargé par GET /v1/policies/{policy_id} (le JSON de la politique). Tableau vide : « Aucune politique », « Les politiques intégrées s'appliquent tant que vous n'ajoutez pas les vôtres. »
  • Évaluer une requête Policy Contract : un formulaire avec un champ JSON Requête, prérempli avec un exemple (un agent qui invoque un modèle). Le résultat montre un grand badge Autorisé ou Refusé, l'identifiant de décision, la liste des raisons, un badge par obligation et la réponse JSON complète.
  • Tableau Bundles OPA signés, lu dans GET /v1/policies/bundles : colonnes Révision, SHA-256, Signé, Créé par, Créé. Un clic sur une ligne affiche la ligne.
  • Moteurs de politiques : la réponse JSON de GET /v1/policies/engines, « Révision réellement exécutée par chaque bundle OPA et état du moteur de relations » (OPA : configuré, mode de livraison, révision attendue, joignable, synchronisé ; OpenFGA : configuré, joignable).

Le formulaire de création et de modification d'une politique comporte ces champs :

ChampTypeDéfautObligatoireDescription
NomtexteouiMinuscules, chiffres, _, . et -, jusqu'à 100 caractères (deny-restricted-external).
DescriptiontextenonTexte libre.
Moteurbuiltin ou opaouiopa exige un texte Rego (OPA).
Prioriténombre100nonLes valeurs basses sont évaluées en premier.
Statutactive, draft, disablednonL'API enregistre active quand le champ est vide.
RèglesJSONune règle deny sur model.invoke pour les données restricted et secretnonListe de règles : effect, actions, resource_types, conditions, reason.
Rego (OPA)textepour opaModule tel que package eai.model_invocation.

Actions​

Bouton ou actionEffetAppel APIRôles
Nouvelle politique (puis Créer)Crée une politique depuis le formulaire ; une révision est enregistrée et le changement est audité (policy.create).POST /v1/policiestenant_admin, security_officer
Clic sur une ligne ou Voir le détailOuvre le panneau de détail de la politique.GET /v1/policies/{policy_id}Tout utilisateur du tenant
Modifier (menu de la ligne, puis Modifier)Remplace la politique par les valeurs du formulaire, prérempli depuis la ligne ; une nouvelle révision est enregistrée (policy.update).PUT /v1/policies/{policy_id}tenant_admin, security_officer
Supprimer (menu de la ligne)Ouvre la confirmation destructive (impact, dépendants, risques) ; vous saisissez le nom de la politique puis Confirmer.GET /v1/lineage/graph, puis DELETE /v1/policies/{policy_id}tenant_admin, security_officer
Exécuter (Évaluer une requête Policy Contract)Évalue la requête et affiche la décision.POST /v1/policies/evaluateTout utilisateur du tenant
Publier un bundle (puis Créer)Construit et publie un bundle signé des politiques OPA, avec une Révision facultative et un JSON Données.POST /v1/policies/bundlestenant_admin, security_officer (bouton masqué pour les autres)
Clic sur une ligne (Bundles OPA signés)Affiche la ligne du bundle.AucunLecteurs des bundles
Icône d'actualisation d'un tableauRelit la liste.GET /v1/policies ou GET /v1/policies/bundlesLecteurs de la liste
remarque

Le formulaire de modification ne porte pas la Version de la politique : l'API enregistre sa version par défaut 1.0.0 à chaque enregistrement depuis cet écran. Passez par l'API pour fixer une version explicite.

Exemple de requête pour Évaluer une requête Policy Contract (le sujet est facultatif : sans lui, la requête est évaluée pour vous) :

{
"action": "model.invoke",
"resource": {"type": "model", "id": "claude-sonnet-eu"},
"context": {"data_classification": "confidential", "region": "eu-central-1"}
}

Rôles​

Le portail ne masque que le bouton Publier un bundle, affiché à ROLES.delegationAdmins (tenant_admin, security_officer dans portal/src/lib/kit.ts). Tous les autres contrôles sont affichés et le Control Plane décide (services/control-plane/src/eai/domains/policies/__init__.py) :

  • liste, détail et évaluation : tout utilisateur du tenant ;
  • création, modification, suppression, publication d'un bundle : tenant_admin, security_officer ;
  • liste des bundles et état des moteurs : tenant_admin, security_officer, auditor ;
  • platform_admin passe tous les contrôles de rôle.

Un tenant_admin ou un security_officer peut évaluer une requête pour le compte d'un autre sujet du tenant (simulation) : l'évaluation est alors auditée sous policy.simulate. Pour tout autre utilisateur, le sujet est toujours l'appelant.

Tâches courantes​

Ajouter une règle de refus pour les données restreintes​

  1. Ouvrir le formulaire. Une politique du tenant s'ajoute aux politiques intégrées. Cliquez Nouvelle politique. Résultat attendu : un panneau latéral avec les champs préremplis (règle deny sur model.invoke). En cas d'échec : sans tableau, la liste ne s'est pas chargée ; cliquez l'icône d'actualisation.
  2. Remplir la politique. Saisissez un Nom tel que deny-restricted-external, gardez Moteur builtin, réglez Priorité et adaptez Règles. Résultat attendu : le formulaire accepte le JSON. En cas d'échec : « JSON invalide » sous Règles signale un JSON illisible.
  3. Créer. Cliquez Créer. Résultat attendu : le message Créé et une nouvelle ligne au statut active. En cas d'échec : forbidden (HTTP 403) signale un rôle manquant ; conflict (HTTP 409) signale un nom déjà pris ; validation_error (HTTP 422) signale un nom hors des caractères permis, ou opa sans Rego (OPA).
  4. La tester. Dans Évaluer une requête Policy Contract, envoyez une requête avec "data_classification": "restricted" et cliquez Exécuter. Résultat attendu : un badge Refusé avec la raison de votre règle. En cas d'échec : un badge Autorisé signifie que la règle ne correspond pas (vérifiez actions, resource_types et conditions).

Publier les politiques OPA pour les moteurs​

  1. Publier. OPA récupère une archive signée au lieu de recevoir chaque module. Cliquez Publier un bundle, laissez Révision vide ou saisissez-en une, puis Créer. Résultat attendu : une nouvelle ligne dans Bundles OPA signés, Signé coché, avec son SHA-256. En cas d'échec : conflict signale une révision existante ; le bouton manque si vous n'êtes ni tenant_admin ni security_officer.
  2. Vérifier les moteurs. OPA doit exécuter la révision publiée. Lisez Moteurs de politiques. Résultat attendu : in_sync vaut true et expected_revision est la nouvelle révision. En cas d'échec : reachable: false montre l'erreur d'OPA ; attendez sa prochaine lecture et rechargez la page.

Dépannage​

SymptômeCauseCorrection
forbidden (HTTP 403) à la création, la modification ou la suppressionVos rôles ne sont ni tenant_admin ni security_officer.Demandez l'un de ces rôles.
validation_error (HTTP 422) à la créationNom hors de ^[a-z0-9][a-z0-9_.-]{0,99}$, ou « rego is required for engine opa ».Corrigez le nom ou remplissez Rego (OPA).
validation_error avec contract: policy-contract sur ExécuterLa requête ne suit pas le schéma Policy Contract.Repartez de l'exemple prérempli.
conflict (HTTP 409)Une politique de ce nom, ou un bundle de cette révision, existe déjà.Choisissez un autre nom ou une autre révision.
policy_engine_unavailable (HTTP 503)Le Control Plane n'a pas pu pousser le module Rego vers OPA, ou l'y retirer lors d'une suppression (rien n'est alors supprimé).Vérifiez qu'OPA tourne, ou utilisez la livraison par bundle.
not_found dans le panneau de détailLa politique a été supprimée, ou son identifiant n'est pas un UUID.Actualisez le tableau.
Moteurs de politiques ou Bundles OPA signés affichent forbiddenCes lectures exigent tenant_admin, security_officer ou auditor.Demandez l'un de ces rôles.
tenant_required (HTTP 403)Le compte agit sans tenant.Connectez-vous avec un compte du tenant.

Pages liées​