Profils de stockage
L'écran Profils de stockage permet de déclarer le stockage objet du client (S3, Azure Blob, GCS, IBM COS, SeaweedFS
ou compatible S3), de vérifier ses capacités par de vrais appels, de lister et supprimer des objets, et d'émettre des
URL présignées. Chemin du portail : /data/storage. Les administrateurs du tenant gèrent les profils du tenant, les
administrateurs de la plateforme les profils de plateforme ; les responsables sécurité les vérifient ; les
développeurs et les agents utilisent les URL présignées.
Ce que montre l'écran
Un avertissement en haut rappelle qu'un profil ne contient jamais de secret : credential_ref pointe vers OpenBao ou
une variable d'environnement, et le WORM exige le verrouillage d'objet et la rétention vérifiés. Trois onglets :
- Profils : la table avec Nom, Portée, Fournisseur, Bucket, Usages, Statut, WORM,
Capacités manquantes, Vérifié le. WORM est calculé par le portail :
not_wormsans l'usageaudit_worm,qualifiedquandobject_locketretentionsont vérifiés,missing_capabilitysinon. Filtres : Portée (tenant,platform), Fournisseur et Finalité (audit_worm,evidence,documents,media,exports,backups,general). Un clic sur une ligne ouvre le profil. - Objets d'un profil : un champ Profil avec Appliquer, puis la table Objets avec Clé, Taille
(octets), Type, Classe de stockage, Version de l'objet, ETag, Dernière modification, et un
filtre Préfixe (exemple
docs/). - URL présignée : un formulaire avec Profil (obligatoire), Portée (
readouwrite, obligatoire), Clé (obligatoire), Expiration (secondes) (900) et Type, et son panneau de résultat.
Le formulaire Nouveau profil contient Nom (obligatoire, minuscules, chiffres et -), Fournisseur
(obligatoire), Bucket (obligatoire), Portée, Point d'accès, Région, Préfixe de clé,
Authentification (JSON, par défaut {"method": "sigv4"}), Référence d'identifiant (exemple
openbao://storage/s3), Usages et Description.
Actions
| Bouton ou action | Ce qu'il fait | Appel API | Rôles |
|---|---|---|---|
| Icône d'actualisation, Filtrer | Recharge les profils | GET /v1/storage/profiles | tenant_admin, security_officer, developer, auditor, platform_admin |
| Nouveau profil > Créer | Crée le profil (aucun secret accepté) | POST /v1/storage/profiles | tenant_admin ; platform_admin pour la portée platform |
| Clic sur une ligne | Ouvre le profil | GET /v1/storage/profiles/{profile_id} | comme la liste |
| Vérifier la signature (menu de ligne) | Ouvre une boîte de dialogue avec Écriture de test (décochée), puis teste les capacités par de vrais appels | POST /v1/storage/profiles/{profile_id}/verify | tenant_admin, security_officer ; platform_admin pour la portée plateforme |
| Vérifications (menu de ligne) | Affiche l'historique des contrôles de capacités | GET /v1/storage/profiles/{profile_id}/checks | comme la liste |
| Désactiver (menu de ligne, profil actif) | Demande une confirmation, puis pose le statut disabled | PATCH /v1/storage/profiles/{profile_id} | tenant_admin ; platform_admin pour la portée plateforme |
| Activer (menu de ligne, profil désactivé) | Pose le statut active | PATCH /v1/storage/profiles/{profile_id} | comme Désactiver |
| Supprimer (menu de ligne) | Affiche la confirmation d'impact, puis supprime le profil | DELETE /v1/storage/profiles/{profile_id} | comme Désactiver |
| Appliquer (Objets) | Liste les objets sous les préfixes présignés | GET /v1/storage/profiles/{profile_id}/objects | tenant_admin, developer, agent, auditor |
| Supprimer (menu d'un objet) | Demande une confirmation, puis supprime l'objet (et sa version si elle est connue) | POST /v1/storage/profiles/{profile_id}/objects/delete | serveur : tenant_admin, developer, agent ; affiché pour tenant_admin, platform_admin |
| Exécuter (URL présignée) | Émet une URL de lecture (GET) ou d'écriture (PUT), affichée une seule fois | POST /v1/storage/profiles/{profile_id}/presign | tenant_admin, developer, agent ; platform_admin pour la portée plateforme |
Rôles
Le portail masque les boutons avec les listes de portal/src/lib/kit.ts : ROLES.storageManagers (tenant_admin,
platform_admin) pour Nouveau profil, Désactiver, Activer, Supprimer et la suppression d'objet,
ROLES.storageVerifiers (tenant_admin, security_officer, platform_admin) pour Vérifier la signature, et
ROLES.storagePresign (tenant_admin, developer, agent, platform_admin) pour le formulaire de présignature ;
les autres utilisateurs voient « Nécessite l'un de ces rôles ». Le Control Plane décide dans
services/control-plane/src/eai/domains/storage/routes.py ; chaque action passe aussi par la décision de politique et
est auditée.
Tâches courantes
Déclarer et vérifier un profil
-
Créer le profil. Le profil ne fait que nommer l'endroit où vit le secret. Cliquez sur Nouveau profil, remplissez Nom, Fournisseur, Bucket, Point d'accès si besoin et Référence d'identifiant, puis Créer.
Résultat attendu : le message « Créé » et la ligne dans Profils.
En cas d'échec :
storage_secret_in_profilesignifie qu'un secret a été saisi dans Authentification ; déplacez-le dans OpenBao. -
Le vérifier. Les capacités sont découvertes par de vrais appels, jamais déclarées. Ouvrez le menu de la ligne, choisissez Vérifier la signature, cochez Écriture de test pour tester aussi l'écriture, puis confirmez.
Résultat attendu : un panneau latéral avec
status,capabilitiesetmissing_capabilities; Vérifié le est rempli.En cas d'échec : le bloc
errorde la réponse donne l'erreur du fournisseur ;storage_credential_invaliddésigne la référence d'identifiant.
Donner un lien de téléchargement à une application
-
Émettre l'URL. Une URL de lecture ne peut pas écrire et inversement. Ouvrez URL présignée, remplissez Profil, Portée
read, Clé, puis Exécuter.Résultat attendu : la réponse contient
url,methodGETetexpires_at. Copiez l'URL tout de suite : elle n'est affichée qu'une fois.En cas d'échec :
storage_key_out_of_scopesignifie que la clé est hors des préfixes présignés du profil.
Nettoyer un objet
-
Lister les objets. Ouvrez Objets d'un profil, collez l'identifiant du profil, puis Appliquer.
Résultat attendu : la table Objets.
En cas d'échec :
storage_prefix_requiredsignifie que le profil a plusieurs préfixes présignés ; remplissez Préfixe et cliquez sur Filtrer. -
Le supprimer. Ouvrez le menu de l'objet, choisissez Supprimer et confirmez.
Résultat attendu : le message « Terminé ».
En cas d'échec :
storage_object_protectedsignifie que le profil contient des exports d'audit WORM ou des preuves ; la rétention s'applique.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
forbidden (403) avec required_roles | Votre rôle n'est pas autorisé pour cette action | Voir la section Rôles |
storage_scope_forbidden (403) | Un profil de plateforme n'est géré que par platform_admin | Connectez-vous en administrateur de la plateforme |
storage_profile_exists (409) | Le nom est déjà utilisé | Choisissez un autre nom |
storage_profile_disabled (409) | Le profil est désactivé | Activer le profil d'abord |
storage_secret_in_profile (422) | Un champ secret a été envoyé dans le profil | Rangez le secret dans OpenBao et utilisez Référence d'identifiant |
storage_credential_ref_invalid (422) | La référence n'est ni openbao:// ni env:// | Corrigez Référence d'identifiant |
storage_endpoint_required (422) | Le fournisseur exige un point d'accès | Remplissez Point d'accès |
storage_presign_expiry_invalid (422) | Expiration (secondes) dépasse le maximum autorisé | Réduisez l'expiration |
storage_key_out_of_scope (403) | Clé hors des préfixes présignés | Utilisez une clé sous un préfixe autorisé |
storage_object_protected (409) | Profil d'audit WORM ou de preuves | L'objet n'est jamais supprimé par l'API |