Clés de chiffrement
L'écran Clés de chiffrement permet de créer les clés d'enveloppe qui chiffrent les données du tenant, de les faire tourner et de lire les métadonnées publiques des clés qui signent les contextes d'exécution (avec leur révocation par un administrateur de la plateforme). Chemin dans le portail : /security/encryption-keys, menu Sécurité et gouvernance > Clés de chiffrement. Il sert aux administrateurs de tenant et aux responsables sécurité, et aux administrateurs de la plateforme pour les clés de signature.
Ce que montre l'écran
L'écran (EncryptionKeys dans portal/src/screens/encryption.tsx) contient deux tableaux.
Clés de chiffrement, lu dans GET /v1/encryption/keys (sans pagination), trié par nom :
| Colonne | Contenu |
|---|---|
| Nom | Nom de la clé, par exemple customer-data. |
| Finalité | Usage de la clé, data par défaut. |
| Algorithme | Algorithme de chiffrement. |
| Coffre | openbao-transit quand OpenBao est configuré, sinon local. |
| Version | Version courante ; chaque rotation en ajoute une. |
| Statut | Statut de la clé, par exemple active. |
| Rotation | Date de la dernière rotation. |
| Créé | Date de création. |
Tableau vide : « Aucune clé de chiffrement », « Créez une clé pour chiffrer les données du tenant ; la rotation ajoute une version. »
Clés de signature des contextes, lu dans GET /v1/context/keys : métadonnées publiques seulement, jamais le matériel de clé.
| Colonne | Contenu |
|---|---|
| Identifiant de clé | kid de la clé de signature. |
| Algorithme | Algorithme de signature. |
| Statut | Par exemple active ou revoked. |
| Première utilisation, Dernière utilisation | Premier et dernier usage de la clé. |
| Retrait après | Date après laquelle la clé est retirée. |
| Révoqué le, Révoquée par | Date et auteur de la révocation. |
Un clic sur une ligne de l'un ou l'autre tableau affiche la ligne dans un panneau latéral.
Actions
| Bouton ou action | Effet | Appel API | Rôles |
|---|---|---|---|
| Nouvelle clé (puis Créer) | Crée une clé avec Nom (obligatoire, exemple customer-data) et Finalité (par défaut data) ; la version 1 est générée. Audité sous encryption.key.create. | POST /v1/encryption/keys | tenant_admin, security_officer (bouton masqué pour les autres) |
Rotation (menu de la ligne, affiché quand la clé est active) | Après une confirmation, ajoute une nouvelle version de la clé ; les données chiffrées avec les versions précédentes restent lisibles. Audité sous encryption.key.rotate. | POST /v1/encryption/keys/{key_id}/rotate | tenant_admin, security_officer (masqué pour les autres) |
| Révoquer (menu de la ligne d'une clé de signature non révoquée) | Ouvre un formulaire avec Raison (obligatoire), puis Révoquer : les contextes d'exécution signés par cette clé ne sont plus acceptés. Audité sous context.key.revoke. | POST /v1/context/keys/{kid}/revoke | platform_admin (masqué pour les autres) |
| Clic sur une ligne ou Voir le détail | Affiche la ligne. | Aucun | Lecteurs du tableau |
| Icône d'actualisation d'un tableau | Relit la liste. | GET /v1/encryption/keys ou GET /v1/context/keys | Lecteurs du tableau |
Révoquer une clé de signature refuse aussitôt chaque contexte d'exécution qu'elle a signé : les agents et applications en cours qui détiennent un tel contexte doivent en obtenir un nouveau.
Rôles
Le portail affiche la création et la rotation à ROLES.encryptionAdmins (tenant_admin, security_officer) et la révocation à ROLES.platformAdmins (platform_admin), d'après portal/src/lib/kit.ts. Le Control Plane applique les mêmes rôles : la liste des clés de chiffrement exige seulement un tenant, la création et la rotation exigent tenant_admin ou security_officer (services/control-plane/src/eai/domains/privacy/__init__.py) ; la liste des clés de signature exige security_officer ou auditor, la révocation platform_admin (services/control-plane/src/eai/domains/context/routes.py). platform_admin passe tous les contrôles de rôle.
Tâches courantes
Créer une clé pour un domaine de données
- Ouvrir le formulaire. Une clé par domaine de données limite l'impact d'une rotation. Cliquez Nouvelle clé. Résultat attendu : un panneau latéral avec Nom et Finalité. En cas d'échec : sans bouton, vous n'êtes ni
tenant_adminnisecurity_officer. - La nommer. Saisissez un Nom en minuscules, par exemple
customer-data, gardez Finalitédata. Résultat attendu : le formulaire accepte le nom. 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 statutactive. En cas d'échec :invalid_request(HTTP 400) avecnamesignale un nom hors de[a-z0-9][a-z0-9._-]{0,62};conflict(HTTP 409) signale un nom existant.
Faire tourner une clé
- Trouver la clé. Seule une clé
activepeut tourner. Repérez sa ligne et notez Version. Résultat attendu : la version courante. En cas d'échec : sans Rotation dans le menu, la clé n'est pasactiveou le rôle vous manque. - Faire tourner. Menu de la ligne > Rotation, puis acceptez la confirmation. Résultat attendu : le message Terminé, la Version augmentée de un et une nouvelle date Rotation. En cas d'échec :
key_not_found(HTTP 404) signifie que la clé a été retirée ; actualisez le tableau.
Révoquer une clé de signature compromise
- Trouver la clé. La révocation porte sur un
kid. Repérez la ligne par son Identifiant de clé dans Clés de signature des contextes. Résultat attendu : la clé avec son statut et son dernier usage. En cas d'échec :forbiddensur ce tableau signifie que vous n'êtes nisecurity_officer, niauditor, niplatform_admin. - Révoquer. Menu de la ligne > Révoquer, saisissez la Raison, puis Révoquer. Résultat attendu : le message Terminé et le statut
revokedavec Révoqué le et Révoquée par. En cas d'échec :signing_key_not_found(HTTP 404) signale une clé inconnue ou déjà révoquée ;validation_errorsignale une raison de moins de 3 caractères.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
Clés de signature des contextes affiche forbidden (HTTP 403) | La liste exige security_officer ou auditor (ou platform_admin) ; un tenant_admin seul ne peut pas la lire. | Demandez l'un de ces rôles. |
invalid_request (HTTP 400) avec name | Le nom ne suit pas [a-z0-9][a-z0-9._-]{0,62}. | Utilisez des minuscules, des chiffres, ., _ et -. |
conflict (HTTP 409) | Une clé de ce nom existe déjà. | Choisissez un autre nom, ou faites tourner la clé existante. |
key_not_found (HTTP 404) | La clé n'existe pas pour ce tenant. | Actualisez le tableau. |
signing_key_not_found (HTTP 404) | Clé de signature introuvable ou déjà révoquée. | Actualisez le tableau. |
tenant_required (HTTP 403) | Le compte agit sans tenant. | Connectez-vous avec un compte du tenant. |