Comment puis-je récupérer un objet Amazon S3 qui a été supprimé d'un compartiment permettant la gestion des versions ?

Dernière mise à jour : 26-07-2022

Je souhaite récupérer un objet qui a été supprimé de mon compartiment Amazon Simple Storage Service (Amazon S3) permettant la gestion des versions. Comment dois-je procéder ?

Brève description

Lorsque vous supprimez un objet d'un compartiment permettant la gestion des versions, Amazon S3 crée un marqueur de suppression pour ce même objet. Le marqueur de suppression devient la version actuelle de l'objet, et l'objet réel est associé à celle précédente. Avec un marqueur de suppression, Amazon S3 répond aux demandes relatives à l'objet comme si ce dernier avait été supprimé. Par exemple, si vous transmettez une demande GET relative à l'objet, Amazon S3 renvoie une erreur.

Vous pouvez récupérer un objet qui a été supprimé d'un compartiment permettant le contrôle des versions de l'une des façons suivantes :

  • En téléchargeant la version précédente de l'objet : pour télécharger la version précédente de l'objet (l'objet réel), vous devez disposer de l'autorisation s3:GetObjectVersion.
  • En retirant le marqueur de suppression : une fois le marqueur de suppression retiré, l'objet réel devient la version actuelle de l'objet. Pour retirer le marqueur de suppression, vous devez disposer de l'autorisation s3:DeleteObjectVersion. Vous devez également retirer le marqueur de suppression à l'aide du compte AWS de la personne qui possède ou a créé le compartiment.
    Remarque : si la fonction Supprimer MFA est activée pour le compartiment, vous devez utiliser l'authentification multifactorielle (MFA) désignée pour supprimer le marqueur de suppression.

Solution

Téléchargement de la version précédente de l'objet à l'aide de la console Amazon S3

1.    Ouvrez la console Amazon S3.

2.    Dans la liste des compartiments, ouvrez celui qui comportait l'objet supprimé.

3.    Accédez au dossier associé à l'objet supprimé.

4.    Activez Show versions (Afficher les versions).

5.    Dans la barre de recherche, saisissez le nom de l'objet supprimé.

6.    Sélectionnez la version précédente de l'objet (l'objet réel, et non le marqueur de suppression). Sélectionnez Actions, puis Télécharger.

Téléchargez la version précédente de l'objet à l'aide d'AWS Command Line Interface (AWS CLI)

Remarque : Si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

1.    Exécutez la commande list-object-versions sur le compartiment. Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.

aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt

Remarque : cet exemple inclut l'option --prefix pour filtrer les résultats selon le préfixe de nom de clé spécifié. Cette option réduit le nombre de résultats, ce qui permet de gagner du temps lorsque votre compartiment contient un grand nombre de versions d'objets.

2.    Dans le résultat de la commande, copiez l'ID de la version précédente de l'objet (l'objet réel, et non le marqueur de suppression).

3.    Exécutez la commande get-object avec l'ID de version que vous avez copié à l'étape précédente. Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.

aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id example.d6tjAKF1iObKbEnNQkIMPjj filename.txt

Retrait du marqueur de suppression à l'aide de la console Amazon S3

1.    Ouvrez la console Amazon S3 à partir du compte AWS de la personne qui possède ou a créé le compartiment qui contenait l'objet supprimé.

2.    Dans la liste des compartiments, ouvrez celui qui comportait l'objet supprimé.

3.    Accédez au dossier associé à l'objet supprimé.

4.    Activez Show versions (Afficher les versions).

5.    Dans la barre de recherche, saisissez le nom de l'objet supprimé.

6.    Sélectionnez le marqueur de suppression de l'objet.

Avertissement : vérifiez avec attention l'élément sélectionné pour vous assurer qu'il s'agit bien du marqueur de suppression. Si vous supprimez une version d'objet, elle ne pourra pas être récupérée.

7.    Choisissez Supprimer.

8.    Dans la page Supprimer les objets, vérifiez que le marqueur de suppression correct est répertorié. Ensuite, saisissez supprimer définitivement pour confirmer la suppression.

9.    Choisissez Supprimer les objets.

Important : vous ne pouvez pas utiliser la console Amazon S3 pour annuler la suppression de dossiers. Pour ce faire, vous devez utiliser l'AWS CLI ou le kit SDK AWS.

Retrait du marqueur de suppression à l'aide de l'AWS CLI

Supprimer le marqueur de suppression sur plusieurs objets

1.    Exécutez la commande list-object-versions en utilisant le paramètre --query suivant. Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.

aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt --query 'DeleteMarkers[?IsLatest==`true`]'

Remarque : l'exemple de commande suivant inclut l'option --prefix qui permet de filtrer les résultats en fonction du préfixe de nom de clé spécifié. Cette option réduit le nombre de résultats, ce qui permet de gagner du temps si votre compartiment contient un grand nombre de versions d'objets.

2.    La commande permet d'obtenir tous les objets du compartiment qui ont été supprimés. Dans le résultat de la commande, copiez l'ID du marqueur de suppression associé à l'objet que vous souhaitez récupérer.

Avertissement : vérifiez avec attention l'ID pour vous assurer qu'il s'agit bien de celui du marqueur de suppression. Si vous supprimez une version d'objet, elle ne pourra pas être récupérée.

3.    Exécutez la commande delete-object avec l'ID de version que vous avez copié à l'étape précédente. Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.

aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'

4.    Une fois que vous avez retiré le marqueur de suppression, l'objet réel est renvoyé lorsque vous répertoriez ceux se trouvant dans le compartiment. Pour vérifier que le marqueur de suppression a bien été supprimé, exécutez la commande ls. Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.

aws s3 ls s3://DOC-EXAMPLE-BUCKET

Supprimer le marqueur de suppression sur des milliers d'objets

1.    Accédez à AWS CloudShell.

2.    Exécutez la commande AWS CLI suivante. Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.

aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --output json --query 'DeleteMarkers[?IsLatest==`true`].[Key, VersionId]' | jq -r '.[] | "--key '\''" + .[0] + "'\'' --version-id " + .[1]' | xargs -L1 aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET

Remarque : Cet exemple utilise l'outil JQ pour analyser la réponse ListObjectVersions pour la version actuelle DeleteMarkers. Par défaut, JQ est installé sur AWS CloudShell. Si vous n'interagissez pas avec l'environnement de shell, votre session shell se fermera.

Supprimer le marqueur de suppression sur des millions d'objets

Si votre compartiment contient des millions d'objets, alors effectuer l'appel LIST peut s'avérer onéreux, ce qui entraîne un délai d'expiration. Par conséquent, envisagez d'utiliser un script personnalisé avec le kit SDK AWS.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?