Vue d’ensemble de la fonctionnalité
La fonctionnalité Object Lock (verrouillage d’objet) permet de stocker des objets suivant un modèle WORM (write once read many).
Elle empêche les objets d’être modifiés ou effacés pendant un certain temps. La durée est soit limitée (fonction retention period ) soit illimitée (fonction legal hold ).
Cas d’usage typique: obligation réglementaire ou protéger plus vos données (par exemple, sauvegarde immuable).
Quelques remarques:
la fonction retention period propose 2 modes qui changent son comportement
les 2 fonctions peuvent être utilisées ensemble ou séparément
la fonctionnalité (Object Lock) doit être activée à la création du bucket
cela requiert l’activation du versioning pour le bucket (automatique)
Avertissement:
parce que le versioning est activé, vous pouvez toujours supprimer un objet
cela crée un delete marker qui devient la version courante
l’objet initial reste inchangé (et protégé)
Fonction Retention Period (période de rétention)
La période de rétention peut être configurée:
par défaut pour un bucket (en jours ou années, s’appliquant aux nouveaux objets)
spécifiquement pour un objet (en utilisant un timestamp limite « RetainUntilDate »)
indépendamment de la fonction legal hold
Le mode de rétention doit être configuré en même temps:
le mode governance permet la modification avec des droits spécifiques (réduire, augmenter ou supprimer la rétention)
le mode compliance ne permet aucune modification (y compris par le propriétaire de l’account)
Fonction Legal Hold (« conservation légale »)
Le legal hold peut être configuré:
spécifiquement pour un objet
indépendamment de la fonction retention period
Cas d’usage avec AWS CLI
AWS CLI (Command Line Interface) est un outil à code source libre permettant de configurer et d’utiliser le stockage objet en passant des commandes dans un interface textuelle (un shell Linux ou la ligne de commande Windows).
Un guide utilisateur de l’outil est disponible sur https://docs.aws.amazon.com/cli/latest/userguide/ .
Prérequis : activation de Object Lock
Ceci n’est possible qu’au moment de la création du bucket avec --object-lock-enabled-for-bucket
.
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api create-bucket --bucket mydemobucket --object-lock-enabled-for-bucket { "Location": "/mydemobucket" }
Rétention par défaut d’un bucket
Le réglage nécessite à la fois un mode (GOVERNANCE
ou COMPLIANCE
) et une période (Days
or Years
).
Attention : le mode COMPLIANCE ne peut pas être contourné (même en utilisant une Access Key root d’account).
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api put-object-lock-configuration --bucket mydemobucket --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "GOVERNANCE", "Days": 1 }}}'
Mode GOVERNANCE et période de 1 jour:
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api put-object-lock-configuration --bucket mydemobucket --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "GOVERNANCE", "Days": 1 }}}'
Après réglage, tout nouvel objet possède une metadata « rétention jusque la date » (ObjectLockRetainUntilDate
):
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api head-object --bucket mydemobucket --key object1 { "AcceptRanges": "bytes", "LastModified": "2022-09-30T09:34:28+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343639353331313637393939393939524730303120203134372e3431323138303532392e333032", "Metadata": {}, "ObjectLockMode": "GOVERNANCE", "ObjectLockRetainUntilDate": "2022-10-01T09:34:28.810000+00:00" }
Vous ne pouvez pas supprimer l’objet avant que la date soit atteinte :
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api delete-object --bucket mydemobucket --key object1 --version-id 3938333335343639353331313637393939393939524730303120203134372e3431323138303532392e333032 An error occurred (AccessDenied) when calling the DeleteObject operation: Access Denied
Cependant en mode GOVERNANCE, vous pouvez contourner la période de rétention avec --bypass-governance-retention
:
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api delete-object --bucket mydemobucket --key object1 --version-id 3938333335343639353331313637393939393939524730303120203134372e3431323138303532392e333032 --bypass-governance-retention { "VersionId": "3938333335343639353331313637393939393939524730303120203134372e3431323138303532392e333032" }
Prolongation de la période de rétention d’un objet
Vous pouvez prolonger la période de rétention (en changeant l’horodatage RetainUntilDate
). Vous ne pouvez pas la réduire.
Le nouvel horodatage doit être postérieur à l’actuel.
Prolongation en mode GOVERNANCE (avec --bypass-governance-retention
):
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api head-object --bucket mydemobucket --key object1 { "AcceptRanges": "bytes", "LastModified": "2022-09-30T09:52:37+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343638343432383535393939393939524730303120203134372e3431323139393337322e333034", "Metadata": {}, "ObjectLockMode": "GOVERNANCE", "ObjectLockRetainUntilDate": "2022-10-01T09:52:37.122000+00:00" } aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api put-object-retention --bucket mydemobucket --key object1 --version-id 3938333335343638343432383535393939393939524730303120203134372e3431323139393337322e333034 --retention Mode=GOVERNANCE,RetainUntilDate="2022-10-02T09:30:00.000000+00:00" --bypass-governance-retention aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api head-object --bucket mydemobucket --key object1 { "AcceptRanges": "bytes", "LastModified": "2022-09-30T09:52:37+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343638343432383535393939393939524730303120203134372e3431323139393337322e333034", "Metadata": {}, "ObjectLockMode": "GOVERNANCE", "ObjectLockRetainUntilDate": "2022-10-02T09:30:00+00:00" }
Prolongation en mode COMPLIANCE :
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api head-object --bucket mydemobucket2 --key object2 { "AcceptRanges": "bytes", "LastModified": "2022-09-30T12:30:07+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343538393932373232393939393939524730303120203232362e3832343831353033362e3533", "Metadata": {}, "ObjectLockMode": "COMPLIANCE", "ObjectLockRetainUntilDate": "2022-10-01T12:30:07.274000+00:00" } aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api put-object-retention --bucket mydemobucket2 --key object2 --version-id 3938333335343538393932373232393939393939524730303120203232362e3832343831353033362e3533 --retention Mode=COMPLIANCE,RetainUntilDate="2022-10-02T08:00:00.000000+00:00" aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api head-object --bucket mydemobucket2 --key object2 { "AcceptRanges": "bytes", "LastModified": "2022-09-30T12:30:07+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343538393932373232393939393939524730303120203232362e3832343831353033362e3533", "Metadata": {}, "ObjectLockMode": "COMPLIANCE", "ObjectLockRetainUntilDate": "2022-10-02T08:00:00+00:00" }
Activation du legal hold d’un objet
Legal hold ON :
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api put-object-legal-hold --bucket mydemobucket3 --key object3 --legal-hold Status=ON
Après activation, l’objet possède une metadata « état legal hold » (ObjectLockLegalHoldStatus
):
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api head-object --bucket mydemobucket3 --key object3 { "AcceptRanges": "bytes", "LastModified": "2022-09-30T13:17:51+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343536313238383333393939393939524730303120203232322e33343330313235352e37373735", "Metadata": {}, "ObjectLockLegalHoldStatus": "ON" }
Legal hold OFF :
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api put-object-legal-hold --bucket mydemobucket3 --key object3 --legal-hold Status=OFF aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api head-object --bucket mydemobucket3 --key object3 { "AcceptRanges": "bytes", "LastModified": "2022-09-30T13:17:51+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343536313238383333393939393939524730303120203232322e33343330313235352e37373735", "Metadata": {}, "ObjectLockLegalHoldStatus": "OFF" }
Obtention des informations object lock
Le plus simple est d’obtenir les métadonnées. Elles contiennent à la fois la période de rétention et le legal hold (si configurés).
Il est également possible de consulter spécifiquement la période de rétention ou le legal hold.
Métadonnées d’objet :
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api put-object-legal-hold --bucket mydemobucket3 --key object3 --legal-hold Status=OFF { "AcceptRanges": "bytes", "LastModified": "2022-09-30T13:17:51+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343536313238383333393939393939524730303120203232322e33343330313235352e37373735", "Metadata": {}, "ObjectLockLegalHoldStatus": "ON" } aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api head-object --bucket mydemobucket3 --key object3 { "AcceptRanges": "bytes", "LastModified": "2022-09-30T13:17:51+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343536313238383333393939393939524730303120203232322e33343330313235352e37373735", "Metadata": {}, "ObjectLockLegalHoldStatus": "ON" }
Période de rétention seule :
aws --endpoint-url https://s3.flexible-datastore.orange-business.com s3api get-object-retention --bucket mydemobucket2 --key object2 { "Retention": { "Mode": "COMPLIANCE", "RetainUntilDate": "2022-10-02T08:00:00+00:00" } }
Legal hold seul :
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api get-object-legal-hold --bucket mydemobucket3 --key object3 { "LegalHold": { "Status": "OFF" } }
Combinaison de la période de rétention et de legal hold
Un objet peut avoir une période de rétention et un legal hold.
aws --endpoint-url https://s3-region01.cloudavenue.orange-business.com s3api head-object --bucket mydemobucket3 --key object3 { "AcceptRanges": "bytes", "LastModified": "2022-09-30T13:17:51+00:00", "ContentLength": 1048576, "ETag": "\"2bd0a7886355c628b78b0052673d7789\"", "VersionId": "3938333335343536313238383333393939393939524730303120203232322e33343330313235352e37373735", "Metadata": {}, "ObjectLockMode": "GOVERNANCE", "ObjectLockRetainUntilDate": "2023-01-01T00:00:00+00:00", "ObjectLockLegalHoldStatus": "ON" }
Pour effacer cet objet, vous devez:
désactiver le legal hold (si permis)
(et) attendre 2023
(ou) contourner la période de rétention (si permis)
A propos de sécurité
N’utilisez jamais une Access Key root
Avec une AK root, vous pouvez contourner la rétention en mode GOVERNANCE et désactiver le legal hold.
Seul le mode COMPLIANCE ne peut pas être contourné.
Réduisez les permissions
Pour un usage normal (PUT d’objets dans un bucket), vous devriez appliquer une policy supprimant les permissions suivantes:
s3:BypassGovernanceRetention
s3:PutObjectLegalHold
s3:PutObjectRetention