Permissions (ReBAC)
L'écran Permissions (ReBAC) permet de lister, d'écrire et de supprimer les tuples de relation du tenant : qui (sujet) détient quelle relation sur quel objet, par exemple user:alice can_assume service_identity:billing. Chemin dans le portail : /security/permissions, menu Sécurité et gouvernance > Permissions (ReBAC). Il sert aux administrateurs de tenant et aux responsables sécurité qui accordent des accès fins, et à tout utilisateur du tenant qui vérifie une relation.
Ce que montre l'écran
L'écran (Permissions dans portal/src/screens/security-kit.tsx) comporte deux sections.
- Tableau Tuples de relation, lu dans
GET /v1/authz/tuples(jusqu'à 1000 lignes, triées par objet, relation, sujet) : colonnes Sujet, Relation, Objet, Créé. Filtres Sujet (exempleuser:alice) et Objet (exempleservice_identity:billing), correspondance exacte. Un clic sur une ligne affiche la ligne. - Formulaire Supprimer un tuple : « Retire une relation du moteur de relations ; le changement est audité. », avec Sujet, Relation et Objet (tous obligatoires).
Tableau vide : « Aucun tuple », « Écrivez une relation, par exemple can_assume sur une identité de service, pour un utilisateur ou un groupe nommé. »
Actions
| Bouton ou action | Effet | Appel API | Rôles |
|---|---|---|---|
| Nouveau tuple (puis Créer) | Écrit un tuple Sujet, Relation, Objet dans le moteur de relations (OpenFGA s'il est configuré, sinon les tuples intégrés) ; audité sous authz.write. | POST /v1/authz/tuples | tenant_admin, security_officer (bouton masqué pour les autres) |
| Exécuter (Supprimer un tuple) | Après une confirmation, supprime le tuple ; le résultat montre deleted (0 si le tuple n'existe pas) et le moteur ; audité sous authz.delete. | DELETE /v1/authz/tuples | tenant_admin, security_officer (formulaire masqué pour les autres) |
| Filtrer | Applique les filtres Sujet et Objet. | GET /v1/authz/tuples (paramètres subject, object) | Tout utilisateur du tenant |
| Clic sur une ligne ou Voir le détail | Affiche la ligne. | Aucun | Tout utilisateur du tenant |
| Icône d'actualisation | Relit la liste. | GET /v1/authz/tuples | Tout utilisateur du tenant |
Le corps d'une écriture ou d'une suppression est un tuple :
{"subject": "user:alice", "relation": "can_assume", "object": "service_identity:billing"}
Rôles
Le portail affiche Nouveau tuple et le formulaire de suppression à ROLES.delegationAdmins (tenant_admin, security_officer, portal/src/lib/kit.ts) ; les autres utilisateurs voient « Nécessite l'un de ces rôles » à la place du formulaire. Le Control Plane (services/control-plane/src/eai/domains/authz/__init__.py) liste les tuples pour tout utilisateur du tenant et exige tenant_admin ou security_officer pour écrire ou supprimer ; platform_admin passe tous les contrôles de rôle. La relation can_assume n'est accordée qu'à des sujets nommés : un sujet générique tel que user:* est refusé.
Tâches courantes
Permettre à un utilisateur d'endosser une identité de service
- Ouvrir le formulaire. La relation
can_assumepermet à un utilisateur nommé d'agir comme une identité de service. Cliquez Nouveau tuple. Résultat attendu : un panneau latéral avec Sujet, Relation, Objet. En cas d'échec : sans bouton, vous n'êtes nitenant_adminnisecurity_officer. - Remplir le tuple. Sujet
user:alice, Relationcan_assume, Objetservice_identity:billing. Résultat attendu : les trois champs remplis. En cas d'échec : rien à relancer à cette étape. - Créer. Cliquez Créer. Résultat attendu : le message Créé et le tuple dans le tableau. En cas d'échec :
authz_wildcard_not_allowed(HTTP 422) pour un sujet finissant par:*;authz_backend_error(HTTP 502) quand OpenFGA est injoignable. - Vérifier. Filtre Sujet
user:alice, Filtrer. Résultat attendu : le nouveau tuple. En cas d'échec : un tableau vide signifie que le texte du sujet diffère (la correspondance est exacte).
Retirer un accès
- Trouver le tuple. Filtre Objet avec l'objet, Filtrer. Résultat attendu : les tuples sur cet objet. En cas d'échec : un tableau vide signifie qu'aucune relation n'y est accordée.
- Le supprimer. Formulaire Supprimer un tuple : recopiez Sujet, Relation, Objet depuis la ligne, Exécuter, acceptez la confirmation. Résultat attendu : le résultat montre
deleted: 1; cliquez l'icône d'actualisation pour mettre à jour le tableau. En cas d'échec :deleted: 0signifie que les trois valeurs ne correspondent pas exactement à un tuple.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
authz_wildcard_not_allowed (HTTP 422) | La relation n'est accordée qu'à des sujets nommés : un sujet générique est refusé. | Nommez l'utilisateur ou le groupe dans Sujet. |
authz_backend_error (HTTP 502) | Le service d'autorisation (OpenFGA) a échoué. | Vérifiez OpenFGA, puis réessayez ; l'écran Politiques montre son état sous Moteurs de politiques. |
forbidden (HTTP 403) avec required_roles | L'écriture et la suppression exigent tenant_admin ou security_officer. | Demandez l'un de ces rôles. |
| « Nécessite l'un de ces rôles » | Le portail masque le formulaire de suppression pour vos rôles. | Utilisez un compte avec l'un des rôles listés. |
validation_error (HTTP 422) | Un champ du tuple manque ou est mal formé. | Remplissez Sujet, Relation et Objet. |
tenant_required (HTTP 403) | Le compte agit sans tenant. | Connectez-vous avec un compte du tenant. |