Profil S4 : scénarios de test du CTK¶
Version 0.3 · 31 octobre 2026 · draft · PDF
Cette note spécifie les scénarios du Compliance Test Kit (CTK) du profil S4, consacré à la réversibilité du stockage objet compatible S3. Chaque scénario vérifie des contrats comportementaux et alimente des critères de la scorecard. La note fixe aussi les jeux de données de référence, les verdicts, le format du rapport et celui du manifeste d'export.
Les scénarios CTK-01 à CTK-06 ont été retenus par l'atelier OpenInterop du 9 octobre 2026 ; ils restent soumis à la validation du groupe de travail. Une implémentation, le CTK S4, couvre déjà CTK-01 à CTK-05. Chaque scénario se termine ci-dessous par une courte ligne d'état ; la note sur le CTK S4 décrit l'implémentation, son usage et les résultats des premiers essais.
1. Principes¶
- Une exigence vaut par son test. Chaque scénario renvoie aux contrats et aux critères de la scorecard qu'il évalue.
- Structure commune : préconditions, action, données, résultat attendu, mesure, seuil, verdict.
- Une preuve reproductible. L'acheteur peut exécuter, ou faire exécuter, un test versionné sur un jeu de données connu, puis obtenir un rapport vérifiable. Le rapport identifie le service, sa version et les fonctions revendiquées, le profil et la version du CTK, le jeu de données et les conditions d'exécution, les résultats, écarts et limites, ainsi que la commande qui rejoue le test (§6).
- Un transfert par un outil indépendant. La migration passe par un outil qui n'appartient ni au fournisseur source (A) ni au fournisseur cible (B), par copie directe ou par un export intermédiaire. Le rapport décrit le chemin suivi.
- Une source figée. Les écritures sont suspendues pendant le test. La migration pendant les écritures relève d'un périmètre ultérieur.
- Assembler l'existant : s3-tests (Ceph) pour les tests unitaires de conformité, rclone ou un client de référence équivalent pour les transferts, enfin les composants propres au CTK S4 (générateur de données, manifeste, comparateur).
- Des cibles de référence pour le réimport : Ceph RGW et Garage, déployés dans des conteneurs aux versions fixées. Les essais croisés visent en outre au moins deux fournisseurs indépendants.
Le CTK produit une preuve technique, au sens de la doctrine OpenInterop (§5.3) : autoévaluation quand le fournisseur l'exécute lui-même, vérification quand un tiers l'exécute, essai croisé quand plusieurs fournisseurs l'exécutent les uns vers les autres. Son usage dans un contrat demande une clause rédigée à part ; une proposition d'annexe contractuelle est prévue pour décembre 2026 (§7).
1.1 Verdicts¶
Chaque critère reçoit l'un des quatre verdicts de la doctrine. Le rapport les code en anglais.
| Verdict | Code du rapport | Sens |
|---|---|---|
| Conforme | CONFORMANT |
Le critère est satisfait sur le périmètre testé |
| Non conforme | NON_CONFORMANT |
Le critère n'est pas satisfait. Une fonction revendiquée mais non prise en charge par le service produit aussi ce verdict |
| Non applicable | NOT_APPLICABLE |
Le critère sort du périmètre revendiqué (fonction optionnelle non déclarée) ou n'a pas été demandé |
| Non concluant | INCONCLUSIVE |
L'environnement de test a fait défaut (réseau, identifiants, quotas, outil) ; le test doit être rejoué |
Une règle s'applique à tous les scénarios : le service n'est pas conforme au profil testé si un objet manque, si un contenu est corrompu ou si un accès interdit devient autorisé. Les critères obligatoires ne se compensent pas et ne font l'objet d'aucune moyenne pondérée. Les performances et les coûts qualifient ensuite les conditions de la réversibilité sans racheter ces échecs. Le verdict global d'une exécution est non conforme dès qu'un critère l'est, non concluant dès qu'un critère l'est, conforme sinon.
1.2 Contenu de chaque fiche de test¶
Outre la structure commune, chaque fiche précise les versions, paramètres et commandes, les preuves conservées, les conditions d'arrêt ainsi que les fonctions obligatoires et optionnelles du périmètre.
2. Jeux de données de référence¶
Les jeux sont produits par le générateur du CTK à partir d'une graine publiée : même graine, mêmes clés, mêmes tailles, mêmes octets, mêmes métadonnées. Leur contenu et leurs sommes de contrôle sont donc connus à l'avance et identiques pour tous les fournisseurs. Ils sont synthétiques et ne contiennent aucune donnée personnelle. Chaque jeu est accompagné de son manifeste de référence (annexe A), qui sert d'oracle pour les comparaisons ; le rapport publie l'empreinte SHA-256 de ce manifeste.
2.1 Volumes¶
L'atelier a retenu deux volumes ; le CTK S4 en ajoute un troisième pour les exécutions rapides.
| Volume | Objets | Taille totale | Objets multipartie | Usage |
|---|---|---|---|---|
| Essai rapide | 60 | 20 Mio | 5 Mio + 1 octet, 12 Mio | Vérification de l'installation ; hors profil |
| Fonctionnel | 10 000 | 10 Go | 5 Mio + 1 octet, 12 Mio, 64 Mio, 256 Mio | CTK-01 à CTK-04 |
| Charge | 100 000 | 1 To | 5 Mio + 1 octet, 12 Mio, 4 × 1 Gio | CTK-05 et CTK-06 |
Le volume de charge reste à confirmer selon les moyens des essais croisés.
2.2 Familles de contenu¶
Chaque volume forme un seul jeu, qui mêle cinq familles de contenu. Le tableau décrit chaque famille et la part que couvre le générateur actuel.
| ID | Contenu visé | Sert à tester | Générateur actuel |
|---|---|---|---|
| DS-S (small) | Objets nombreux, de tailles tirées autour de la moyenne du volume (environ 1 Mo au volume fonctionnel), dont un objet vide et un objet d'un octet, sur une arborescence de préfixes | Pagination, listage, complétude | Couvert, sauf l'arborescence : deux préfixes seulement (objects/, keys/) ; une arborescence de profondeur variable est à ajouter pour le listage avec délimiteur |
| DS-L (large) | Objets déposés en multipartie, parties de 5 Mio : de 5 Mio + 1 octet (dernière partie d'un octet) à 256 Mio au volume fonctionnel, jusqu'à 1 Gio au volume de charge | Multipartie, intégrité des gros objets, reprise, débit | Couvert. Des tailles de parties variées (pour l'ETag) et des objets de plusieurs Gio sont prévus dans une version ultérieure |
| DS-M (metadata) | Toutes les métadonnées système fixables, métadonnées utilisateur (dont valeurs non ASCII et taille proche de la limite), étiquettes | Préservation des métadonnées | Couvert, sauf les tailles limites : Content-Type sur tous les objets ; Content-Encoding, Content-Language, Content-Disposition, Cache-Control et Expires sur un objet sur quatre ; deux métadonnées utilisateur par objet, dont une valeur non ASCII encodée selon la RFC 2047 sur un objet sur cinq ; étiquettes sur un objet sur trois quand la fonction est revendiquée |
| DS-K (keys) | Clés difficiles : Unicode NFC et NFD de même apparence, emoji, espaces de tête et de fin, //, segments . et .., clés finissant par /, clés de longueur maximale, clés ne différant que par la casse |
Restitution exacte des clés | Couvert : treize clés (NFC et NFD, emoji, espaces intérieur, de tête et de fin, //, segments . et .., / final, casse, clé de 1 024 octets) |
| DS-V (versioned) | Clés à plusieurs versions, marqueurs de suppression, sous-ensemble avec Object Lock et legal hold | Périmètre avancé (CTK-X3) | Absent |
L'objet de 5 Mio + 1 octet, dont la dernière partie fait un octet, a mis au jour un défaut de Ceph RGW (§3, CTK-02).
3. Scénarios retenus¶
Vue d'ensemble¶
| ID | Scénario | Volume | Critères de la scorecard | CTK S4 |
|---|---|---|---|---|
| CTK-01 | Export complet | Fonctionnel | A1, A5, A6, A7, A9 | Implémenté (A1, A6, A7) |
| CTK-02 | Intégrité | Fonctionnel | A2 | Implémenté |
| CTK-03 | Métadonnées et droits | Fonctionnel | A3, A4, A7, A10 | Implémenté (A3, A4, A10) |
| CTK-04 | Incident et reprise | Fonctionnel | A1, A2, A6 ; B9 | Implémenté pour les coupures de connexion (A1, A2 ; B9) |
| CTK-05 | Exploitation et charge | Charge | A8, A11 ; B10, B11 | Implémenté |
| CTK-06 | Performance de la migration | Charge | B1 à B3, B7 | Non implémenté (scénario à définir) |
CTK-01 : Export complet¶
- Préconditions : source figée, manifeste de référence connu ; un contrat avec B et une connexion entre A et B sont établis ; identifiants programmatiques avec droits de lecture complets chez A et d'écriture chez B ; outil de transfert de référence installé à une version fixée.
- Action
- Charger le jeu fonctionnel dans un bucket de A.
- Produire l'inventaire de A sur plusieurs pages de listage et le comparer au manifeste de référence.
- Migrer vers B avec l'outil de référence, sans intervention manuelle.
- Produire l'inventaire de B et le comparer au manifeste de A.
- Données : jeu fonctionnel, dont DS-K.
- Résultat attendu : tous les objets attendus sont présents chez B avec les mêmes clés ; aucun objet inattendu n'apparaît dans le périmètre ; aucune clé n'est listée deux fois.
- Mesure : comptage et correspondance des clés ; doublons et omissions de pagination ; étapes manuelles.
- Seuil : 100 % de correspondance ; zéro objet en plus ; zéro intervention pendant l'exécution nominale.
- Verdict : A1, A5, A6, A7 et A9.
- Contrats couverts : EXP-01, EXP-03, EXP-04, API-01, API-04, API-05.
- État : implémenté pour A1, A6 et A7. L'export de la configuration du bucket (A5) n'est pas évalué ; A9 est constaté (aucune intervention) sans recevoir de verdict.
CTK-02 : Intégrité¶
- Préconditions : celles de CTK-01 ; les corruptions sont injectées dans une copie de test ou dans la cible, puis réparées avant la suite des vérifications.
- Action
- Migrer un mélange de tailles comprenant des objets multipartie.
- Calculer, pour chaque objet, la taille et l'empreinte SHA-256 du contenu complet, chez A puis chez B, indépendamment des ETags.
- Corrompre quelques objets (octet modifié, troncature, objet remplacé) et rejouer la vérification.
- Données : jeu fonctionnel, dont DS-L.
- Résultat attendu : les contenus valides sont reconnus ; chaque corruption injectée est détectée et localisée (clé, nature de l'écart).
- Mesure : objets dont taille et empreinte correspondent ; corruptions détectées sur corruptions injectées.
- Seuil : 100 % d'empreintes conformes sur les objets valides ; 100 % des corruptions détectées ; aucun faux verdict positif.
- Verdict : A2.
- Contrats couverts : INT-01, INT-02, INT-03.
- État : implémenté. Les trois corruptions sont injectées dans la cible, détectées par clé, puis réparées. Les essais ont révélé un défaut de Ceph RGW (v19.2.7 puis v20.2.4, sur le backend
dbstore) : la lecture d'un objet multipartie dont la dernière partie fait un octet ne se termine pas. Ils ont aussi montré que boto3 (à partir de 1.36), avec sa validation des sommes de contrôle activée par défaut, rejette la réponse de Garage pour un objet multipartie. Le client de référence désactive donc cette validation et le CTK vérifie l'intégrité lui-même par SHA-256.
CTK-03 : Métadonnées et droits¶
- Préconditions : liste des champs obligatoires du profil arrêtée ; matrice d'accès définie, c'est-à-dire un ensemble d'identités (lecteur, rédacteur, administrateur, public anonyme) et, pour chacune, les opérations autorisées et interdites sur des objets désignés.
- Action
- Migrer le jeu fonctionnel, dont DS-M.
- Comparer, objet par objet, les champs obligatoires chez A et chez B.
- Reconstruire chez B les droits convenus, par les moyens propres au modèle IAM de B.
- Rejouer la matrice d'accès chez A puis chez B et comparer les décisions.
- Données : jeu fonctionnel, dont DS-M ; matrice d'accès.
- Résultat attendu : propriétés préservées ; valeurs d'origine non reproductibles (date de dernière modification, ETag) transportées ; mêmes décisions d'accès chez A et chez B ; aucune exposition publique involontaire.
- Mesure : champs obligatoires conformes sur champs attendus ; cas d'accès correctement appliqués sur cas prévus.
- Seuil : 100 % des champs et 100 % des cas d'accès obligatoires.
- Verdict : A3, A4, A7 et A10.
- Contrats couverts : MET-01 à MET-04, MET-06, SEC-01.
- État : implémenté pour A3, A4 et A10 (A7 est jugé dans CTK-01). Les valeurs d'origine de
Last-Modifiedet de l'ETag sont copiées chez B en métadonnées utilisateur préfixéesoi-orig-. La matrice d'accès est un fichier TOML (identités, opérations, décisions attendues) ; l'accès anonyme en lecture et en listage y est ajouté avec la décision attenduedeny. Sans matrice, A10 reçoit le verdict non applicable. Si la source s'écarte déjà de la matrice, A10 est non concluant. Sur Garage, revendiquer les étiquettes donne un verdict non conforme sur A3 (GetObjectTaggingnon implémenté).
Les droits se comparent par leur effet sur les accès, car les modèles IAM diffèrent d'un fournisseur à l'autre. La gestion des identités et les droits nécessaires à l'export et à l'import relèvent aussi du socle transverse.
CTK-04 : Incident et reprise¶
- Préconditions : celles de CTK-01 ; liste d'incidents définie (coupure réseau d'une durée donnée, erreurs 5xx et
SlowDowninjectées, identifiants expirés en cours de transfert). - Action
- Lancer la migration du jeu fonctionnel.
- Provoquer chaque incident à un moment défini, puis laisser l'outil reprendre.
- Comparer le résultat final au manifeste de référence.
- Données : jeu fonctionnel, dont DS-L.
- Résultat attendu : reprise automatique ; rapport explicite des incidents ; aucune perte ni duplication logique.
- Mesure : complétude et intégrité finales ; délai de reprise ; volume retransmis ; interventions nécessaires.
- Seuil : résultat final identique au manifeste ; seuils de délai et de retransmission à calibrer après les premiers essais.
- Verdict : A1, A2 et A6 ; B9 publié.
- Contrats couverts : API-02, API-03, REP-01.
- État : implémenté pour les coupures de connexion, injectées côté client au-delà des nouvelles tentatives du SDK ; A1 et A2 sont jugés ; incidents, reprises, octets retransmis et durée de reprise sont publiés (B9). Restent à ajouter les erreurs 5xx ou
SlowDownainsi que l'expiration d'identifiants.
CTK-05 : Exploitation et charge¶
- Préconditions : volume de charge ; application témoin (lecture, écriture, listage) et sa suite de tests ; durée d'engagement définie pour le scénario.
- Action
- Migrer le jeu de charge vers B.
- Révoquer tous les accès de l'application à A.
- Reconfigurer l'application vers B (adresse du point d'accès et identifiants uniquement), puis exécuter sa suite de tests.
- Données : jeu de charge.
- Résultat attendu : application opérationnelle sur B ; engagement de durée respecté.
- Mesure : tests applicatifs réussis sur tests prévus ; fonctions encore liées à A ; durée totale du lancement à la validation sur B ; débit utile.
- Seuil : 100 % des tests applicatifs du profil ; zéro dépendance résiduelle pour l'usage testé ; durée et débit publiés avec leurs conditions.
- Verdict : A8 et A11 ; B10 et B11 publiés.
- Contrats couverts : REC-01, REC-02, REC-04.
- État : implémenté. L'application témoin travaille sur B seul : lectures d'un échantillon vérifiées contre le manifeste, métadonnées, listage paginé, lectures partielles vérifiées contre les octets de référence (milieu de l'objet, frontière de partie, fin), lecture conditionnelle (
If-Match, qui doit échouer avec 412 sur un ETag périmé), écriture. Quand les anciens identifiants de l'application chez A sont fournis, A doit les refuser (A8) ; sinon A8 est non applicable. Si A les accepte encore, A8 est non concluant. Les essais menés à ce jour sur Garage ont utilisé le volume d'essai rapide ; l'exécution au volume de charge est prévue avec les essais croisés.
CTK-06 : Performance de la migration¶
L'atelier a retenu ce scénario sans en fixer le contenu. Il vise à vérifier l'absence de limitation du transfert, à conditions d'infrastructure équivalentes. La méthode « déclaré puis vérifié » sert de point de départ :
- Préconditions : fiche de déclaration avec B1, B2, B3 et B7 ; client placé de sorte que le réseau ne limite pas la mesure ; capacité du lien mesurée et consignée ; quotas suffisants confirmés par le fournisseur.
- Action : lecture continue de DS-L au parallélisme déclaré pendant au moins 30 minutes (B1), même mesure sur plusieurs buckets (B2), courbe débit et parallélisme (B7), montée en charge des requêtes jusqu'aux premières réponses de limitation (B3).
- Mesure et seuil : valeurs mesurées comparées aux valeurs déclarées, avec une tolérance à fixer ; réponses de limitation conformes au profil.
- Conditions de comparaison : même jeu de données, même client, même concurrence, mêmes régions, mêmes quotas et même chemin réseau. Le rapport publie le débit réseau disponible et les temps d'inventaire, de transfert, de vérification et de reconstruction. Un seuil universel de débit serait prématuré.
- Contrats couverts : PERF-01 à PERF-04.
- État : non implémenté, en attente de la définition du scénario par le groupe de travail. Les mesures de débit du CTK S4 restent indicatives.
4. Scénarios complémentaires et périmètres avancés¶
Ces scénarios ne font pas partie du socle CTK-01 à CTK-06. Ils restent au backlog.
| ID | Scénario | Statut |
|---|---|---|
| CTK-X1 | Grande cardinalité (10⁶ objets) et listage | Complément de CTK-01 pour les gros inventaires (B4) |
| CTK-X2 | Conformité au schéma d'un manifeste produit par le fournisseur | Schéma JSON des entrées publié (annexe A) ; le CTK S4 sait valider un manifeste fourni. Reste à obtenir des manifestes de fournisseurs (EXP-03, B5) |
| CTK-X3 | Versions, marqueurs de suppression, Object Lock | Périmètre avancé, à approfondir |
| CTK-X4 | Classes froides | Périmètre avancé (B6) |
Sont aussi classés à part : versions historiques, marqueurs de suppression, stockage archivé, Object Lock, règles de cycle de vie, migration pendant les écritures, dépendances aux KMS, cohérence forte.
5. Architecture¶
Le CTK assemble les composants suivants. Leur conception et leur usage sont décrits dans la note sur le CTK S4.
| Composant | Rôle | État |
|---|---|---|
| Orchestrateur de scénarios | Exécute les scénarios choisis, fixe paramètres, versions et graine, produit le rapport | Disponible |
| Générateur de jeux de données | Produit les objets et le manifeste de référence à partir d'une graine | Disponible (§2.2 pour la couverture des familles) |
| Outil de transfert | Copie de A vers B | Copie intégrée au CTK S4, à travers la machine qui l'exécute ; rclone ou s5cmd à brancher, avec version et paramètres fixés |
| Comparateur de manifestes | Compare manifestes de référence, source et cible ; écarts par critère | Disponible |
| Matrice d'accès | Compare les décisions d'accès chez A et chez B (CTK-03) | Disponible |
| Injection d'incidents | Provoque les incidents de CTK-04 | Coupures de connexion côté client ; un proxy réseau couvrirait les autres incidents |
| Application témoin | Suite de tests applicatifs de CTK-05 | Disponible |
| Tests unitaires de conformité | Conformité de l'interface au profil | Existant (ceph/s3-tests), sélection par périmètre à faire |
| Cibles de référence | Réimport sur des implémentations libres | Garage v1.0.1 et Ceph RGW v19.2.7 en conteneurs ; RGW sur un cluster RADOS reste à mettre en place |
Les composants nouveaux seront publiés sous une licence open source permissive ou faiblement copyleft, compatible avec les briques réutilisées ; le choix reste à arrêter avec OW2.
6. Format du rapport¶
Le rapport est un fichier JSON lisible par machine. Son empreinte est publiée et l'exécutant (fournisseur ou tiers) peut le signer. Il accompagne trois manifestes au format JSON Lines : référence, source et cible.
| Élément | Contenu | CTK S4 |
|---|---|---|
| Version du CTK et profil | Version de l'outil ; profil et version du profil | Produit |
| Fonctions revendiquées | core, tags… |
Produit |
| Service | Fournisseur, service, version, région | Produit, pour la source et la cible (nom et version déclarés par l'exécutant) |
| Exécutant | Fournisseur ou tiers, nom | Produit (déclaré) |
| Environnement | Chemin de transfert, versions des outils, capacité du lien, début et fin | Produit (capacité du lien déclarée par l'exécutant) |
| Jeu de données | Volume, graine, nombre d'objets, octets, empreinte du manifeste de référence | Produit |
| Mesures | Durées et débit utile (B10, B11) ; reprise (B9 : incidents, reprises, octets renvoyés, durée de reprise) dans les résultats de CTK-04 | Produit, à titre indicatif |
| Verdict global | Selon la règle du §1.1 | Produit |
| Résultats | Par scénario et critère : verdict, nombre d'écarts, preuves (écarts détaillés, autotest de corruption, décisions d'accès) | Produit |
| Limites | Périmètre non couvert, conditions particulières | Produit |
| Reproduction | Commande et paramètres qui rejouent l'exécution | Produit |
| Signature | Signature de l'exécutant | Absent |
Exemple abrégé :
{
"profile": "S4 draft",
"features_claimed": ["core", "tags"],
"source": {"name": "Fournisseur A", "version": "…", "endpoint": "https://…",
"region": "…", "bucket": "…"},
"target": {"name": "Garage", "version": "v1.0.1", "endpoint": "http://…",
"region": "garage", "bucket": "…"},
"environment": {"executor": "…", "transfer_path": "direct, through the machine running the kit",
"link_capacity_mbps": 1000, "boto3": "1.x",
"started_at": "2026-…", "finished_at": "2026-…"},
"dataset": {"volume": "functional", "seed": 0, "objects": 10000,
"bytes": 10000000000, "reference_manifest_sha256": "…"},
"measures": {"transfer_seconds": 0.0, "bytes_copied": 0, "useful_throughput_mib_s": 0.0},
"verdict": "NON_CONFORMANT",
"results": [
{"scenario": "CTK-03", "criterion": "A3", "verdict": "NON_CONFORMANT",
"findings": 1, "evidence": {"…": ["…"]}}
],
"limits": ["Source frozen during the run.", "…"],
"reproduction": {"command": "…"}
}
7. Calendrier et TechSprint¶
L'atelier a proposé le calendrier suivant :
| Date proposée | Livrable | État |
|---|---|---|
| Début novembre 2026 | TechSprint et CTK minimal | En préparation ; le CTK S4 couvre déjà CTK-01 à CTK-05 |
| Fin novembre 2026 | Essais croisés entre fournisseurs et rapport d'écarts | À venir |
| Décembre 2026 | Profil V0.1 et proposition d'annexe contractuelle | À venir |
- Objectif du TechSprint : CTK-01 à CTK-03 exécutés contre les deux cibles de référence et au moins deux fournisseurs indépendants ; CTK-04 et CTK-05 en complément.
- Engagements recherchés : deux fournisseurs indépendants (environnements, documentation, essais), un utilisateur (critères de réception, scénario applicatif), des développeurs du CTK et un référent sécurité (matrice d'accès).
- Livrables : premiers rapports CTK, liste des écarts constatés sur le profil, signalements aux projets amont (dont le défaut de Ceph RGW).
8. Points ouverts¶
- Liste des champs obligatoires de CTK-03 et transformations admises.
- Format de la matrice d'accès : le format TOML du CTK S4 est une proposition.
- Contenu de CTK-06, tolérances entre valeurs déclarées et mesurées.
- Seuils de délai et de retransmission de CTK-04.
- Volume de charge définitif, selon les moyens des essais croisés.
- Compléments du générateur pour couvrir entièrement DS-S, DS-L, DS-M et DS-K (§2.2), puis DS-V.
- Export de la configuration du bucket (A5) et en-tête d'export (annexes A.2 et A.3), non encore implémentés.
- Licence des composants nouveaux.
Annexe A. Manifeste d'export¶
Le manifeste utilise le format JSON Lines, avec une ligne par objet (par version dans le périmètre versionné). La configuration du bucket figure dans un fichier séparé. Un en-tête d'export indique le fournisseur, le bucket, la date, la version du schéma et les algorithmes. Une variante Parquet pourra servir aux très gros inventaires. Lorsque les données et le manifeste sont livrés ensemble, l'empaquetage s'inspire de BagIt (RFC 8493).
Le schéma JSON des entrées (version 0.1, JSON Schema 2020-12) couvre le niveau Core et les étiquettes. Le CTK S4 l'emploie pour valider ses propres manifestes et ceux que fournit un service. Un manifeste de référence indique null pour les champs attribués par le serveur (last_modified, etag).
A.1 Entrées objet¶
Champs du schéma 0.1. Tous sont présents dans chaque entrée, avec la valeur null quand l'objet n'a pas ce champ ; aucun autre champ n'est admis. Ce choix facilite la comparaison des manifestes.
| Champ | Type | Reproductible par l'API | Remarques |
|---|---|---|---|
key |
chaîne, au plus 1 024 octets UTF-8 | Oui | Le schéma limite les caractères, le CTK vérifie les octets ; encodage à préciser pour les octets non imprimables |
size |
entier ≥ 0 | Oui | |
checksum |
{algorithm, value} |
Oui (recalculable) | Objet complet ; algorithm vaut sha256, value en hexadécimal |
last_modified |
horodatage RFC 3339 ou null |
Non | Date d'origine ; transportée chez B en métadonnée oi-orig-last-modified |
etag |
chaîne ou null |
Non (multipartie, SSE-KMS) | Informatif, jamais utilisé comme preuve d'intégrité ; transporté chez B en métadonnée oi-orig-etag |
content_type, content_encoding, content_language, content_disposition, cache_control |
chaîne ou null |
Oui | null si absent |
expires |
horodatage RFC 3339 ou null |
Oui | null si absent |
user_metadata |
objet clé → valeur | Oui | Objet vide si aucune |
tags |
objet clé → valeur, ou null |
Oui | Objet vide si la fonction n'est pas revendiquée ; null si elle l'est mais que le serveur ne la prend pas en charge |
Les versions suivantes du schéma ajouteront les champs ci-dessous.
| Champ | Type | Présence | Reproductible par l'API | Remarques |
|---|---|---|---|---|
version_id |
chaîne | Si versionné | Non | Identifiant d'origine |
is_latest |
booléen | Si versionné | Oui (par ordre de rejeu) | |
is_delete_marker |
booléen | Si versionné | Oui (par rejeu) | |
checksum (autres algorithmes) |
{algorithm, value} |
Oui | CRC64NVME en plus de SHA-256 | |
multipart |
{part_count, part_size} |
Si multipartie | Partiellement | Permet de reproduire l'ETag si souhaité |
storage_class |
chaîne | Toujours | Partiellement | Classe d'origine ; la correspondance avec les classes de la cible relève d'un chantier ultérieur |
retention |
{mode, retain_until} |
Si Object Lock | Oui (avec la même échéance) | |
legal_hold |
booléen | Si Object Lock | Oui | |
encryption |
{type, key_ref} |
Toujours | Non applicable | Informatif ; les données exportées sont en clair sauf chiffrement côté client |
owner |
chaîne | Facultatif | Non | Propriétaire d'origine |
A.2 Configuration du bucket¶
La configuration du bucket n'a pas encore de schéma et le CTK S4 ne la produit pas.
| Élément | Niveau | Remarques |
|---|---|---|
| Versionnage (état) | Core | |
| Politique d'accès, ACL, propriété des objets | Core | Exportées telles quelles, sans traduction |
| Chiffrement par défaut | Core | Type ; référence de clé à titre informatif |
| Object Lock par défaut | Governance | Mode, durée |
| Étiquettes de bucket | Governance | |
| Cycle de vie | Extended | |
| CORS | Extended | |
| Notifications, réplication | Extended | Souvent liées à des services propriétaires : à signaler comme dépendance résiduelle (C5) |
A.3 En-tête d'export¶
L'en-tête n'a pas encore de schéma et le CTK S4 ne le produit pas.
| Champ | Remarques |
|---|---|
schema_version |
Version du schéma |
profile, declared_level |
Profil et niveau |
provider, service, region, bucket |
|
generated_at |
Horodatage de production |
consistency |
Instantané cohérent ou listage au fil de l'eau ; borne temporelle |
object_count, version_count, total_size |
Totaux de contrôle |
checksum_algorithms |
Algorithmes utilisés |