From 1dc1f26126b1340dce49c287340b2d7590ea417c Mon Sep 17 00:00:00 2001 From: Alexandre LEPETIT <10155402+aelttil@users.noreply.github.com> Date: Wed, 27 May 2026 07:13:46 +0200 Subject: [PATCH 1/2] docs(s3): clarify AWS CLI v2.23+ workaround + restructure lifecycle/deletion concepts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - quickstart.md: rewrite the AWS CLI section to explicitly mention the v2.23.0+ default CRC64NVME issue on ECS-based storage. Sets both request_checksum_calculation AND response_checksum_validation to when_required (the latter was missing — downloads can also fail without it). Restores the endpoint explanation that was removed. - concepts.md: introduce "Gestion du cycle de vie et protection des données" section that clearly separates two often-confused mechanisms: * lifecycle policy → actively deletes objects after N days * deletion protection → passively prevents deletion for N days Adds a note explaining the difference with standard S3 Object Lock (Cloud Temple's mechanism is bucket-level, doesn't require versioning). - quickstart.md: move detailed concept explanations to concepts.md (the quickstart stays action-focused) and link between the two pages. Supersedes #304. Empirically tested on a CT S3 bucket: - XAmzContentSHA256Mismatch reproduced without the fix - both request_checksum_calculation and response_checksum_validation validated end-to-end (upload + download) Co-Authored-By: bquinsac <119865939+bquinsac@users.noreply.github.com> Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/storage/oss/concepts.md | 52 ++++++++++++++++++++++++++++++++++ docs/storage/oss/quickstart.md | 27 ++++++++++++++++-- 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/docs/storage/oss/concepts.md b/docs/storage/oss/concepts.md index 5a04ef5c..1d736f78 100644 --- a/docs/storage/oss/concepts.md +++ b/docs/storage/oss/concepts.md @@ -36,3 +36,55 @@ Toutes les communications avec l'API du service de stockage objet, que ce soit p - **Protocole** : Nous imposons l'utilisation du protocole **TLS (Transport Layer Security)**, versions **1.2 et 1.3**. - **Fonctionnement** : En utilisant HTTPS pour toutes vos requêtes API, vous vous assurez que les données échangées entre votre client et nos serveurs sont chiffrées, les protégeant ainsi contre l'interception ou l'altération pendant leur transit sur le réseau. + +## Gestion du cycle de vie et protection des données + +Le service OSS propose deux mécanismes **complémentaires mais distincts** pour gérer la durée de vie des objets. Il est important de bien les différencier au moment de la conception d'un bucket : + +| Mécanisme | Effet | Configuration | +|---|---|---| +| **Politique de cycle de vie (lifecycle)** | **Supprime ou transitionne automatiquement** les objets après un délai défini. Action *active* du service. | API S3 standard : `PutBucketLifecycleConfiguration` (ex. via `aws s3api`) | +| **Protection de suppression** | **Empêche** toute modification ou suppression des objets pendant un délai défini. Verrou *passif*. | Paramètre du bucket dans la console Cloud Temple | + +:::warning Ne pas confondre +- Une **politique de cycle de vie** *supprime* automatiquement les objets en fin de période. +- La **Protection de suppression** *bloque* les suppressions pendant la période, mais ne supprime rien. + +Les deux peuvent coexister sur un même bucket : un objet protégé contre la suppression ne sera pas supprimé par une politique de lifecycle tant que sa période de protection n'est pas écoulée. +::: + +### Politique de cycle de vie (lifecycle) + +Une politique de cycle de vie permet d'**automatiser la suppression** d'objets après un nombre de jours défini, ou de supprimer les versions antérieures dans un bucket versionné. Elle suit le standard S3 et se configure via l'API (`PutBucketLifecycleConfiguration`). + +Cas d'usage typiques : +- Purge automatique de logs après 30 jours +- Nettoyage de fichiers temporaires à intervalle régulier +- Rétention limitée pour limiter les coûts de stockage + +Un exemple de configuration JSON et la commande `aws s3api` associée sont fournis dans le [Guide de démarrage → Parcourir un bucket S3](./quickstart.md#parcourir-un-bucket-s3). + +### Protection de suppression + +La **Protection de suppression** est un paramètre configurable au niveau du bucket, accessible dans l'onglet **Paramètres** de la console. Elle permet de définir une durée pendant laquelle les objets stockés dans le bucket sont protégés contre toute modification ou suppression. + +**Comportement** + +Lorsque la Protection de suppression est activée sur un bucket : + +- **Aucun objet ne peut être supprimé** dans le bucket pendant toute la durée configurée, y compris par le propriétaire du bucket. +- **Aucun objet ne peut être modifié** (écrasement d'un objet existant interdit). +- La protection s'applique à **tous les objets** présents dans le bucket au moment de l'activation, ainsi qu'à ceux ajoutés ultérieurement. +- À l'expiration de la durée configurée, les objets redeviennent modifiables et supprimables normalement. + +**Cas d'usage** + +Ce mécanisme est particulièrement adapté aux contextes imposant une **immuabilité des données** sur une durée définie : + +- Conformité réglementaire (secteurs santé, finance, défense) +- Protection contre les suppressions accidentelles ou malveillantes +- Respect d'obligations d'archivage (ex. : durée légale de conservation des logs) + +:::info Différence avec S3 Object Lock standard +La Protection de suppression Cloud Temple s'applique au **bucket entier** et n'exige pas l'activation préalable du versioning. Elle se distingue de `S3 Object Lock` du standard AWS qui fonctionne **par objet** et nécessite le versioning. Si votre application attend une API `PutObjectLockConfiguration` ou les modes *Compliance* / *Governance* d'AWS, contactez le support Cloud Temple pour valider la compatibilité. +::: diff --git a/docs/storage/oss/quickstart.md b/docs/storage/oss/quickstart.md index 2df4f6e2..b5d3d6df 100644 --- a/docs/storage/oss/quickstart.md +++ b/docs/storage/oss/quickstart.md @@ -50,20 +50,36 @@ Le Stockage Objet Cloud Temple est un service de stockage d'objets hautement sé Default region name [None]: fr1 Default output format [None]: json ``` + Contrairement à `mc`, le client AWS ne sauvegarde pas le point de terminaison (endpoint). Vous devrez le spécifier pour chaque commande avec l'option `--endpoint-url`. Le point de terminaison de votre service est : `https://VOTRE_NAMESPACE.s3.fr1.cloud-temple.com` - **Astuce :** Pour éviter de taper le endpoint à chaque fois, vous pouvez le définir dans le fichier de configuration AWS (`~/.aws/config`) en créant un profil dédié : + :::warning[Compatibilité AWS CLI v2.23.0+ : désactiver le checksum CRC64NVME] + Le stockage objet Cloud Temple repose sur une implémentation S3-compatible (Dell EMC ECS) qui ne prend pas en charge le checksum `CRC64NVME` activé par défaut dans AWS CLI à partir de la version **2.23.0** ([changement annoncé par AWS](https://github.com/aws/aws-cli/issues/9214)). Sans configuration spécifique, les uploads peuvent échouer avec une erreur du type `XAmzContentSHA256Mismatch` ou `XAmzContentChecksumMismatch`. + + Désactivez le calcul et la validation des checksums additionnels : + + ```bash + ❯ aws configure set request_checksum_calculation when_required + ❯ aws configure set response_checksum_validation when_required + ``` + ::: + + **Astuce :** Pour éviter de taper le endpoint à chaque fois, vous pouvez le définir dans le fichier de configuration AWS (`~/.aws/config`) en créant un profil dédié qui intègre également ces paramètres : + ```ini [profile cloudtemple] region = fr1 output = json + request_checksum_calculation = when_required + response_checksum_validation = when_required s3 = endpoint_url = https://VOTRE_NAMESPACE.s3.fr1.cloud-temple.com s3api = endpoint_url = https://VOTRE_NAMESPACE.s3.fr1.cloud-temple.com ``` + Vous pourrez ensuite utiliser ce profil avec l'option `--profile cloudtemple` sur chaque commande. @@ -107,7 +123,9 @@ Le Stockage Objet Cloud Temple est un service de stockage d'objets hautement sé Dans l'onglet '__Paramètres__' vous pouvez voir le détail des informations de votre bucket S3 : - **Note importante** : La notion de '__Protection de suppression__' correspond à la durée de protection de la donnée, et non à une suppression programmée. Les données restent accessibles pendant toute la période de configurée. Pour provoquer une suppression automatique des données à l'issue de la période de rétention, il est nécessaire de définir une politique de cycle de vie (lifecycle). + :::info Protection de suppression vs. cycle de vie + Le paramètre '__Protection de suppression__' visible dans l'onglet **empêche** la suppression des objets pendant la durée configurée — il ne provoque **pas** de suppression automatique. Pour supprimer automatiquement après un délai, il faut une **politique de cycle de vie (lifecycle)** ci-dessous. Voir [Concepts → Gestion du cycle de vie et protection des données](./concepts.md#gestion-du-cycle-de-vie-et-protection-des-données) pour les détails. + ::: **Exemple de politique de cycle de vie** (`lifecycle.json`): @@ -141,6 +159,7 @@ Le Stockage Objet Cloud Temple est un service de stockage d'objets hautement sé --bucket \ --lifecycle-configuration file://lifecycle.json ``` + ```bash @@ -226,7 +245,7 @@ Le Stockage Objet Cloud Temple est un service de stockage d'objets hautement sé La plateforme vous donne alors la clef d'accès et la clef secrète de votre bucket : __ATTENTION :__ Les clés secrète et d'accès sont présentées une seule fois. Après cette première apparition, il devient impossible de consulter à nouveau la clé secrète. Il est donc essentiel de noter ces informations immédiatement ; faute de quoi, il vous sera nécessaire de générer une nouvelle paire de clés. - La regeneration se fait au niveau des options de la clefs en choisissant l'option "Réinitialiser clé d'accès". + La regénération se fait au niveau des options de la clef en choisissant l'option "Réinitialiser clé d'accès". @@ -300,3 +319,5 @@ Le Stockage Objet Cloud Temple est un service de stockage d'objets hautement sé La gestion fine des politiques d'accès via le client `mc` (`policy` commands) est une opération avancée. Pour la majorité des cas d'usage, nous recommandons de passer par la console Cloud Temple pour une configuration simplifiée et sécurisée. + +> 📚 Pour comprendre les mécanismes de **versioning, lifecycle et protection de suppression**, voir la section [Concepts → Gestion du cycle de vie et protection des données](./concepts.md#gestion-du-cycle-de-vie-et-protection-des-données). From 87a9629127450559838affa3b70764ab15449e75 Mon Sep 17 00:00:00 2001 From: Alexandre LEPETIT <10155402+aelttil@users.noreply.github.com> Date: Wed, 27 May 2026 07:25:17 +0200 Subject: [PATCH 2/2] docs(s3): refine lifecycle + deletion protection per CT operational reality MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Following review feedback on the previous draft of the lifecycle vs. deletion protection section: - Lifecycle: drop the inaccurate claim that ECS automatically deletes expired objects. The Lifecycle Delete Scanner (LDS) is disabled by default on ECS 3.2.1+, so actual deletion depends on platform-side configuration. Adds an :::info note pointing users to support if expiration doesn't take effect. - Deletion protection: clarify that activation is NOT self-service — it requires an explicit support request, and is contractually binding. - Adds a :::danger block on irreversibility with explicit business consequences: * the configured duration cannot be shortened, even by Cloud Temple * if a 99-year protection is set, the data is locked for 99 years * if the customer stops using the service or terminates the contract, the locked volume remains billable pro-rata until the period ends * no bypass mechanism exists (shared SecNumCloud infrastructure) Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/storage/oss/concepts.md | 42 +++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/docs/storage/oss/concepts.md b/docs/storage/oss/concepts.md index 1d736f78..918b176c 100644 --- a/docs/storage/oss/concepts.md +++ b/docs/storage/oss/concepts.md @@ -43,39 +43,47 @@ Le service OSS propose deux mécanismes **complémentaires mais distincts** pour | Mécanisme | Effet | Configuration | |---|---|---| -| **Politique de cycle de vie (lifecycle)** | **Supprime ou transitionne automatiquement** les objets après un délai défini. Action *active* du service. | API S3 standard : `PutBucketLifecycleConfiguration` (ex. via `aws s3api`) | -| **Protection de suppression** | **Empêche** toute modification ou suppression des objets pendant un délai défini. Verrou *passif*. | Paramètre du bucket dans la console Cloud Temple | +| **Politique de cycle de vie (lifecycle)** | Marque les objets comme expirés à l'issue d'un délai défini. Le comportement effectif (suppression réelle ou non) dépend de la configuration de la plateforme. | API S3 : `PutBucketLifecycleConfiguration` | +| **Protection de suppression** | **Empêche** toute modification ou suppression des objets pendant un délai défini. Verrou *immuable*. | **Demande à faire auprès du support Cloud Temple** | :::warning Ne pas confondre -- Une **politique de cycle de vie** *supprime* automatiquement les objets en fin de période. -- La **Protection de suppression** *bloque* les suppressions pendant la période, mais ne supprime rien. +- La **politique de cycle de vie** est un mécanisme *actif* : elle peut déclencher la suppression d'objets en fin de période (selon la configuration de la plateforme). +- La **Protection de suppression** est un mécanisme *passif* : elle bloque toute suppression pendant la période, mais ne supprime jamais rien d'elle-même. -Les deux peuvent coexister sur un même bucket : un objet protégé contre la suppression ne sera pas supprimé par une politique de lifecycle tant que sa période de protection n'est pas écoulée. +Les deux mécanismes interagissent : si une protection de suppression couvre des objets également visés par une politique de cycle de vie, **la protection prime** et empêche l'expiration tant qu'elle est active. ::: ### Politique de cycle de vie (lifecycle) -Une politique de cycle de vie permet d'**automatiser la suppression** d'objets après un nombre de jours défini, ou de supprimer les versions antérieures dans un bucket versionné. Elle suit le standard S3 et se configure via l'API (`PutBucketLifecycleConfiguration`). +Une politique de cycle de vie se configure via l'API S3 standard (`PutBucketLifecycleConfiguration`). Elle permet de déclarer une intention d'expiration d'objets après un nombre de jours défini, et/ou d'expirer les versions antérieures dans un bucket versionné. Cas d'usage typiques : -- Purge automatique de logs après 30 jours +- Purge planifiée de logs après 30 jours - Nettoyage de fichiers temporaires à intervalle régulier -- Rétention limitée pour limiter les coûts de stockage +- Maîtrise du volume de stockage facturé Un exemple de configuration JSON et la commande `aws s3api` associée sont fournis dans le [Guide de démarrage → Parcourir un bucket S3](./quickstart.md#parcourir-un-bucket-s3). +:::info Comportement effectif sur Cloud Temple +La plateforme de stockage objet Cloud Temple repose sur Dell EMC ECS, dont le mécanisme d'expiration des objets (*Lifecycle Delete Scanner*) est désactivé par défaut depuis ECS 3.2.1. **L'application réelle d'une politique de cycle de vie sur un bucket existant peut donc nécessiter une action côté plateforme.** Si une politique posée ne semble pas effacer les objets après le délai configuré, contactez le support Cloud Temple pour valider la configuration de votre infrastructure. +::: + ### Protection de suppression -La **Protection de suppression** est un paramètre configurable au niveau du bucket, accessible dans l'onglet **Paramètres** de la console. Elle permet de définir une durée pendant laquelle les objets stockés dans le bucket sont protégés contre toute modification ou suppression. +La **Protection de suppression** est un mécanisme d'immuabilité au niveau du bucket. Une fois activée, elle empêche toute modification ou suppression des objets pendant la durée configurée — y compris par les administrateurs. + +:::danger Activation : demande au support Cloud Temple +La Protection de suppression **n'est pas activable en self-service** depuis la console. Elle doit faire l'objet d'une **demande explicite au support Cloud Temple**, qui configurera la durée souhaitée au niveau du bucket. Cette demande est tracée et engageante. +::: **Comportement** Lorsque la Protection de suppression est activée sur un bucket : -- **Aucun objet ne peut être supprimé** dans le bucket pendant toute la durée configurée, y compris par le propriétaire du bucket. +- **Aucun objet ne peut être supprimé**, y compris par le propriétaire du bucket **et y compris par les administrateurs Cloud Temple**. - **Aucun objet ne peut être modifié** (écrasement d'un objet existant interdit). -- La protection s'applique à **tous les objets** présents dans le bucket au moment de l'activation, ainsi qu'à ceux ajoutés ultérieurement. -- À l'expiration de la durée configurée, les objets redeviennent modifiables et supprimables normalement. +- La protection s'applique à **tous les objets** présents au moment de l'activation, ainsi qu'à ceux ajoutés ultérieurement. +- À l'expiration de la durée configurée, les objets **redeviennent modifiables et supprimables manuellement** — il n'y a pas de suppression automatique en fin de période. **Cas d'usage** @@ -85,6 +93,16 @@ Ce mécanisme est particulièrement adapté aux contextes imposant une **immuabi - Protection contre les suppressions accidentelles ou malveillantes - Respect d'obligations d'archivage (ex. : durée légale de conservation des logs) +:::danger Irréversibilité et conséquences contractuelles +**La durée configurée ne peut être ni raccourcie ni annulée**, ni par le client, ni par Cloud Temple. Concrètement : + +- Si une Protection de suppression est posée pour **99 ans** sur un bucket, les données qu'il contient seront **inaccessibles à la suppression pendant 99 ans**, sans recours possible. +- Cette inviolabilité s'applique également au scénario où le client souhaite **arrêter d'utiliser le service** ou **résilier son contrat** : le volume stocké continue d'exister, occupe une capacité physique, et reste **facturable au prorata du temps restant et du volume** jusqu'à la fin de la période de protection. +- Aucun mécanisme de bypass n'est prévu, y compris pour les équipes Cloud Temple. La suppression matérielle anticipée des supports physiques n'est pas une option (les médias sont partagés avec d'autres clients dans une infrastructure mutualisée qualifiée SecNumCloud). + +**À n'activer qu'en pleine connaissance de cause, et après validation de la durée par votre direction métier et votre direction financière.** +::: + :::info Différence avec S3 Object Lock standard La Protection de suppression Cloud Temple s'applique au **bucket entier** et n'exige pas l'activation préalable du versioning. Elle se distingue de `S3 Object Lock` du standard AWS qui fonctionne **par objet** et nécessite le versioning. Si votre application attend une API `PutObjectLockConfiguration` ou les modes *Compliance* / *Governance* d'AWS, contactez le support Cloud Temple pour valider la compatibilité. :::