Délégations
L'écran Délégations permet d'accorder une délégation de vos droits à un agent, une application ou un service, de la révoquer avec toutes ses descendantes, de gérer les mandats qui permettent à un agent planifié d'agir par une identité de service, de tester une autorisation à travers chaque couche et de révoquer d'un coup toutes les délégations issues d'un utilisateur. Chemin dans le portail : /security/delegations, menu Sécurité et gouvernance > Délégations. Il sert aux utilisateurs et aux développeurs qui délèguent à un agent, et aux responsables sécurité et administrateurs de tenant qui supervisent et révoquent.
Ce que montre l'écran
L'écran (Delegations dans portal/src/screens/security-kit.tsx) comporte quatre sections.
- Tableau Délégations, lu dans
GET /v1/delegations(pagination par curseur) : colonnes Délégation, Délégataire (par exempleagent:invoice-assistant), Principal racine, Portées, Profondeur, Profondeur maximale, Statut (active,expired,revoked), Expire. Filtres Statut et Principal racine. Un clic sur une ligne ouvre la délégation chargée parGET /v1/delegations/{delegation_id}, avec la vérification de sa chaîne. - Tableau Mandats, lu dans
GET /v1/mandates(50 lignes) : colonnes Mandat, Agent, Identité de service, Portées, Finalité, Statut, Approbation, Expire. Filtre Agent. Un clic sur une ligne ouvre le mandat depuisGET /v1/mandates/{mandate_id}. - Formulaire Autoriser une action : « Vérifie chaque couche : chaîne, session, utilisateur, agent, délégation, ressource et politique. »
- Formulaire Révoquer un principal : « Révoque toutes les délégations issues de cet utilisateur. »
Formulaire Nouvelle délégation :
| Champ | Défaut | Remarques |
|---|---|---|
| Délégataire | Obligatoire, agent:, app:, service: ou subagent: suivi d'un nom, par exemple agent:invoice-assistant. | |
| Portées | Séparées par des virgules, par exemple rag:query, tools:invoke ; jamais plus que ce que vous détenez. | |
| Audience, Ressources | Listes séparées par des virgules. | |
| Classification max | public, internal, confidential, restricted, secret ; jamais au-dessus de votre habilitation. | |
| Profondeur maximale | 1 | De 0 à 10. |
| Redélégation autorisée | désactivé | Permet au délégataire de restreindre et de transmettre la délégation. |
| Durée de vie (secondes) | 3600 | Au moins 60, au plus la limite de la plateforme (delegation_max_ttl_seconds, 86400 par défaut). |
| Finalité | Texte libre. |
Formulaire Nouveau mandat : Agent (obligatoire), Identité de service (obligatoire), Finalité (obligatoire, au moins 3 caractères), Portées, Audience, Ressources, Classification max, Profondeur maximale (0), Durée de vie (jours) (30, au plus mandate_max_ttl_days, 365 par défaut), Planification.
Actions
| Bouton ou action | Effet | Appel API | Rôles |
|---|---|---|---|
| Nouvelle délégation (puis Créer) | Crée une délégation racine de vous vers le délégataire ; portées et classification sont plafonnées par les vôtres. | POST /v1/delegations | Tout utilisateur du tenant (un agent ne peut pas créer de délégation racine) |
Révoquer (menu de la ligne d'une délégation active) | Ouvre un formulaire avec Raison (obligatoire), puis Révoquer : la délégation, chaque descendante et leurs contextes d'exécution sont révoqués. | POST /v1/delegations/{delegation_id}/revoke | Principal racine, créateur ou mandant ; tenant_admin, security_officer pour toutes |
| Clic sur une ligne (Délégations) | Ouvre la délégation avec sa chaîne. | GET /v1/delegations/{delegation_id} | Parties de la délégation ; tenant_admin, security_officer, auditor, agent |
| Nouveau mandat (puis Créer) | Demande un mandat ; il attend une approbation décidée par une autre personne. | POST /v1/mandates | tenant_admin, developer, security_officer (bouton masqué pour les autres) |
Révoquer (menu de la ligne d'un mandat approved ou pending) | Ouvre un formulaire avec Raison (obligatoire), puis Révoquer. | POST /v1/mandates/{mandate_id}/revoke | Demandeur ; tenant_admin, security_officer pour tous |
| Clic sur une ligne (Mandats) | Ouvre le mandat. | GET /v1/mandates/{mandate_id} | Tout utilisateur du tenant |
| Exécuter (Autoriser une action) | Contrôle une Action (obligatoire, par exemple tool.invoke) pour une Délégation ou un Identifiant d'exécution, avec Portée, Ressource (tool:crm.lookup), Relation, Classification des données facultatives ; affiche la décision. | POST /v1/delegations/authorize | Tout utilisateur du tenant |
| Exécuter (Révoquer un principal) | Après une confirmation, révoque toutes les délégations issues de Principal, avec une Raison (tous deux obligatoires). | POST /v1/delegations/revoke-principal | tenant_admin, security_officer (formulaire masqué pour les autres) |
| Filtrer, icône d'actualisation | Appliquent les filtres, relisent une liste. | GET /v1/delegations ou GET /v1/mandates | Tout utilisateur du tenant |
Rôles
Le portail masque Nouveau mandat aux rôles autres que tenant_admin, developer, security_officer, et le formulaire Révoquer un principal aux rôles autres que ROLES.delegationAdmins (tenant_admin, security_officer, portal/src/lib/kit.ts). Le Control Plane (services/control-plane/src/eai/domains/delegation/routes.py, services/control-plane/src/eai/domains/delegation/service.py, services/control-plane/src/eai/domains/delegation/mandates.py) décide le reste :
- chacun dans le tenant peut déléguer ses propres droits, jamais plus que ce qu'il détient ;
tenant_admin,security_officeretauditorvoient toutes les délégations ; les autres utilisateurs ne voient que celles dont ils sont la racine, le créateur ou le mandant ;- un mandat est approuvé par une autre personne que son demandeur, dans la boîte des approbations ;
platform_adminpasse tous les contrôles de rôle.
Tâches courantes
Déléguer un accès en lecture à un agent
- Ouvrir le formulaire. Une délégation permet à l'agent d'agir pour vous dans des limites. Cliquez Nouvelle délégation. Résultat attendu : un panneau latéral avec Profondeur maximale
1et Durée de vie (secondes)3600. En cas d'échec : sans tableau, la liste ne s'est pas chargée ; cliquez Réessayer. - Fixer les limites. Saisissez Délégataire
agent:<nom>, Portéesrag:query, Classification maxinternal, laissez Redélégation autorisée désactivé. Résultat attendu : le formulaire est complet. En cas d'échec : rien à relancer à cette étape. - Créer. Cliquez Créer. Résultat attendu : le message Créé et une ligne
activeavec son échéance. En cas d'échec :delegation_scope_exceeds(HTTP 403) oudelegation_classification_exceeds(HTTP 403) si vous demandez plus que ce que vous détenez ;delegation_ttl_exceeded(HTTP 400) au-delà de la limite de la plateforme ;invalid_request(HTTP 400) pour un délégataire sans préfixe connu. - La tester. Formulaire Autoriser une action : Action
rag.query, Délégation le nouvel identifiant, puis Exécuter. Résultat attendu : la décision de chaque couche. En cas d'échec :invalid_requestavec « delegation_id or run_id is required » quand les deux sont vides.
Gérer le départ d'un utilisateur
- Trouver ses délégations. Filtre Principal racine avec l'identifiant de l'utilisateur, Filtrer. Résultat attendu : chaque délégation issue de cet utilisateur. En cas d'échec : un tableau vide si vous n'êtes pas administrateur et que les délégations ne sont pas les vôtres.
- Tout révoquer. Formulaire Révoquer un principal : Principal l'identifiant de l'utilisateur, Raison, Exécuter, acceptez la confirmation. Résultat attendu : le résultat liste les délégations révoquées ; leurs lignes passent à
revokedaprès actualisation. En cas d'échec :forbidden(HTTP 403) si vous n'êtes nitenant_adminnisecurity_officer.
Donner un mandat à un agent planifié
- Le demander. Un agent planifié n'a pas d'utilisateur derrière lui : le mandat le lie à une identité de service. Cliquez Nouveau mandat, remplissez Agent, Identité de service, Finalité, Portées, Durée de vie (jours), puis Créer. Résultat attendu : une ligne
pendingavec son Approbation. En cas d'échec :service_identity_not_found(HTTP 404),service_identity_disabled(HTTP 409),delegation_scope_exceeds(HTTP 403) quand les portées dépassent celles de l'identité,mandate_ttl_exceeded(HTTP 400). - Le faire approuver. Une autre personne décide l'approbation dans la boîte des approbations. Résultat attendu : le statut
approved. En cas d'échec : le demandeur ne peut pas décider sa propre approbation.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
delegation_root_forbidden (HTTP 403) | Un agent ne peut pas créer de délégation racine : il peut seulement restreindre celle qu'il a reçue. | Créez la délégation depuis un utilisateur ou une application. |
delegation_scope_exceeds (HTTP 403) | Les droits demandés dépassent les droits détenus par le délégant. | Réduisez Portées. |
delegation_classification_exceeds (HTTP 403) | La classification demandée dépasse l'habilitation du délégant. | Abaissez Classification max. |
delegation_ttl_exceeded (HTTP 400) | La durée dépasse le maximum de la plateforme. | Réduisez Durée de vie (secondes). |
invalid_request (HTTP 400) avec max_depth | Profondeur maximale au-dessus de 10. | Choisissez une valeur de 0 à 10. |
forbidden (HTTP 403) sur Révoquer | Vous n'êtes pas partie de la délégation ni administrateur. | Demandez à un tenant_admin ou à un security_officer. |
delegation_not_found (HTTP 404) | Délégation inconnue, ou que vous ne pouvez pas voir. | Vérifiez l'identifiant et vos rôles. |
mandate_closed (HTTP 409) | Le mandat est déjà rejeté ou révoqué. | Demandez un nouveau mandat. |
validation_error (HTTP 422) sur Autoriser une action | Action doit ressembler à tool.invoke, Ressource à tool:crm.lookup. | Corrigez le format. |