Secrets
L'écran Secrets permet de stocker un identifiant du tenant (clé de fournisseur, mot de passe de connecteur, jeton) dans le coffre de secrets, de remplacer sa valeur et de le supprimer. Les valeurs sont en écriture seule : l'écran ne liste que les métadonnées. Chemin dans le portail : /security/secrets, menu Sécurité et gouvernance > Secrets. Il sert aux administrateurs de tenant, aux responsables sécurité et aux développeurs qui branchent un fournisseur ou un connecteur.
Ce que montre l'écran
L'écran (Secrets dans portal/src/screens/security.tsx) montre un bandeau Écriture seule, puis un tableau, Secrets, lu dans GET /v1/secrets (sans pagination), trié par chemin.
| Colonne | Contenu |
|---|---|
| Chemin | Chemin du secret, par exemple providers/openai/api_key. |
| Version | Augmentée à chaque écriture du même chemin. |
| Coffre | openbao quand OpenBao est configuré, sinon local (chiffré dans la base). |
| Mis à jour | Dernière écriture. |
Tableau vide : « Aucun secret », « Stockez un identifiant : sa valeur n'est jamais renvoyée. »
Actions
| Bouton ou action | Effet | Appel API | Rôles |
|---|---|---|---|
| Nouveau secret (puis Créer) | Stocke un Chemin (obligatoire, exemple providers/openai/api_key) et une Valeur (obligatoire, masquée). Un chemin existant reçoit une nouvelle version. Audité sous secret.write. | POST /v1/secrets | tenant_admin, security_officer, developer |
| Remplacer (menu de la ligne, puis Remplacer) | Écrit une nouvelle Valeur pour le chemin de la ligne ; la version augmente de un. | POST /v1/secrets | tenant_admin, security_officer ; developer pour les secrets qu'il a écrits |
| Supprimer (menu de la ligne) | Ouvre la confirmation destructive ; vous saisissez le chemin, puis Confirmer. Le secret est retiré de la base et d'OpenBao. Audité sous secret.delete. | GET /v1/lineage/graph, puis DELETE /v1/secrets/{path} | tenant_admin, security_officer ; developer pour les secrets qu'il a écrits |
| Icône d'actualisation | Relit la liste. | GET /v1/secrets | Tout utilisateur du tenant |
Un secret supprimé ne peut pas être relu : tout fournisseur, connecteur ou agent qui référence son chemin échoue tant qu'une nouvelle valeur n'est pas stockée.
Rôles
Le portail ne masque aucun bouton sur cet écran. Le Control Plane (services/control-plane/src/eai/domains/secrets/__init__.py) laisse tout utilisateur du tenant lister les métadonnées, et exige tenant_admin, security_officer ou developer pour écrire ou supprimer (WRITER_ROLES). Un developer ne peut remplacer ou supprimer que les secrets qu'il a écrits ; les administrateurs gèrent tous les secrets. platform_admin passe tous les contrôles de rôle. Aucune route ne renvoie une valeur : la plateforme ne lit un secret que côté serveur.
Tâches courantes
Stocker une clé de fournisseur
- Ouvrir le formulaire. La configuration du fournisseur référence le secret par son chemin, jamais par sa valeur. Cliquez Nouveau secret. Résultat attendu : un panneau latéral avec Chemin et Valeur. En cas d'échec : sans bouton, la liste ne s'est pas chargée ; cliquez Réessayer.
- Le remplir. Saisissez un Chemin tel que
providers/openai/api_keyet collez la clé dans Valeur. Résultat attendu : la valeur est masquée. En cas d'échec : rien à relancer à cette étape. - Créer. Cliquez Créer. Résultat attendu : le message Créé et une ligne avec Version
1et le coffre utilisé. En cas d'échec :validation_error(HTTP 422) signale un chemin avec des caractères interdits (permis : lettres, chiffres,_,.,/,-, jusqu'à 255 caractères, sans commencer par.,/ou-) ;secret_backend_error(HTTP 502) signale qu'OpenBao a refusé l'écriture.
Faire tourner un identifiant
- Trouver le chemin. Le chemin reste le même, seule la valeur change. Repérez la ligne. Résultat attendu : la Version actuelle. En cas d'échec : « Aucun secret » signifie qu'il n'a jamais été stocké pour ce tenant.
- Remplacer. Menu de la ligne > Remplacer, collez la nouvelle Valeur, puis Remplacer. Résultat attendu : le message Terminé et la Version augmentée de un. En cas d'échec :
forbidden(HTTP 403) avecrequired_rolessignifie que vous êtesdeveloperet qu'une autre personne a écrit ce secret. - Révoquer l'ancienne valeur chez le fournisseur. La plateforme n'appelle pas le fournisseur. Révoquez la clé précédente dans la console du fournisseur. Résultat attendu : seule la nouvelle clé fonctionne.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
validation_error (HTTP 422) à la création | Le chemin ne suit pas ^[A-Za-z0-9_][A-Za-z0-9_./-]{0,254}$, ou la valeur est vide ou dépasse 65536 caractères. | Corrigez le chemin ou la valeur. |
invalid_request (HTTP 400) avec path | Le chemin contient un segment ... | Retirez le segment ... |
forbidden (HTTP 403) avec required_roles | Vos rôles ne permettent pas d'écrire de secret, ou vous êtes developer et le secret a été écrit par quelqu'un d'autre. | Demandez à un tenant_admin ou à un security_officer. |
secret_backend_error (HTTP 502) | OpenBao est injoignable ou a refusé l'opération. | Vérifiez OpenBao, puis réessayez. |
not_found sur Supprimer | Le secret a déjà été supprimé. | Actualisez le tableau. |
tenant_required (HTTP 403) | Le compte agit sans tenant. | Connectez-vous avec un compte du tenant. |