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

Date de la dernière mise à jour : 26/08/2021

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 fonctionSupprimer MFA est activée pour le compartiment, vous devez utiliser l'authentification multi-facteurs (MFA) désignée pour supprimer le marqueur de suppression.

Ré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.    Activer 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 : en cas d'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 avec le compartiment :

Astuce : 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 peut vous aider à réduire le nombre de résultats, vous faisant gagner du temps si votre compartiment contient un volume élevé de versions d'objet.

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

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 :

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

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.    Activer 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, tapez 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'interface de ligne de commande AWS ou un SDK AWS.

Retrait du marqueur de suppression à l'aide d'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 :

Astuce : 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é. Ceci peut vous aider à réduire le nombre de résultats et à gagner du temps si votre compartiment contient un volume élevé de marqueurs de suppression.

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

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 :

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 :

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 :

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 : l'exemple de commande utilise l'outil JQ pour analyser la réponse ListObjectVersions pour les marqueurs de suppression qui sont des versions actuelles. Par défaut, JQ est installé sur AWS CloudShell. De plus, si vous n'interagissez pas avec l'environnement shell par le biais de votre clavier ou de votre pointeur pendant 20 à 30 minutes, votre session shell prendra fin.

Supprimer le marqueur de suppression sur des millions d'objets

Si votre compartiment contient des millions d'objets, 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 ?


Besoin d'aide pour une question technique ou de facturation ?