Stockage Objet - Object Lock

From Cloud Avenue
Jump to navigation Jump to search

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 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-region01.cloudavenue.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