

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Conservation de plusieurs versions d’objets grâce à la gestion des versions S3
<a name="Versioning"></a>

La gestion des versions Simple Storage Service (Amazon S3) permet de conserver plusieurs variantes d’un objet dans le même compartiment. Vous pouvez utiliser la fonctionnalité de gestion des versions S3 pour préserver, récupérer et restaurer chaque version de chaque objet stocké dans vos compartiments. La gestion des versions permet de récupérer facilement les données en cas d’action involontaire d’un utilisateur ou de défaillance applicative. Lorsque la gestion des versions est activée pour un compartiment, si Simple Storage Service (Amazon S3) reçoit simultanément plusieurs demandes d’écriture pour le même objet, il stocke tous ces objets.

Les compartiments activés pour la gestion des versions vous permettent de récupérer des objets en cas de suppression ou remplacement accidentel. Par exemple, si vous supprimez un objet, Amazon S3 insère un marqueur de suppression au lieu de supprimer l’objet définitivement. Le marqueur de suppression devient la version actuelle de l’objet. Si vous remplacez un objet, cela crée une nouvelle version d’objet dans le compartiment. Vous pouvez toujours restaurer la version précédente. Pour plus d’informations, consultez [Suppression des versions d’objet d’un compartiment activé pour la gestion des versions](DeletingObjectVersions.md). 

Par défaut, la gestion des versions S3 est désactivé sur les compartiments et vous devez l’activer explicitement. Pour plus d’informations, consultez [Activation de la gestion des versions sur les compartiments](manage-versioning-examples.md).

**Note**  
L’API SOAP ne prend pas en charge la gestion des versions S3. La prise en charge de SOAP via HTTP est obsolète, mais continue d'être disponible sur HTTP. Les nouvelles fonctions Amazon S3 ne sont pas prises en charge pour SOAP.
Les tarifs Amazon S3 normaux s’appliquent pour chaque version d’un objet stocké ou transféré. Chaque version d’un objet est l’objet entier ; il ne s’agit pas simplement d’une différence par rapport à la version précédente. Par conséquent, si vous possédez trois versions d’un objet stocké, vous êtes facturé pour trois objets. 

## Compartiments non versionnés, activés pour la gestion des versions et suspendus
<a name="versioning-states"></a>

Les compartiments peuvent être dans l’un des trois états suivants : 
+ Non versionné (valeur par défaut)
+ Gestion des versions activée
+ Gestion des versions suspendue

L’activation et la suspension de la gestion des versions se fait au niveau du compartiment. Lorsque vous activez un compartiment pour la gestion des versions, il ne peut jamais revenir à un état non versionné. Toutefois, il est possible d’*annuler* la gestion des versions sur ce compartiment.

L’état de gestion des versions s’applique à tous les objets (jamais à certains) du compartiment. Lorsque vous activez la gestion des versions dans un compartiment, tous les nouveaux objets sont versionnés et reçoivent un ID de version unique. Les objets qui existaient déjà dans le compartiment au moment où la gestion de versions a été activée seront *toujours* versionnés et dotés d’un ID de version unique lorsqu’ils seront modifiés par des demandes futures. Remarques : 
+ Les objets qui sont stockés dans le compartiment avant que vous définissiez l’état de la gestion des versions ont un ID de version `null`. Lorsque vous activez la gestion des versions, les objets existants dans le compartiment ne changent pas. Seule la façon dont Amazon S3 gère les objets dans les futures demandes change. Pour plus d’informations, consultez [Utiliser des objets dans un compartiment activé pour la gestion des versions](manage-objects-versioned-bucket.md).
+ Le propriétaire du compartiment (ou tout utilisateur doté des autorisations adaptées) peut désactiver la gestion des versions pour stopper l’accumulation des versions d’objet. Lorsque vous désactivez la gestion des versions, les objets existants du compartiment ne changent pas. Seule la façon dont Amazon S3 gère les objets dans les futures demandes change. Pour plus d’informations, consultez [Utilisation des objets dans un compartiment désactivé pour la gestion des versions](VersionSuspendedBehavior.md).

## Utilisation de la gestion des versions S3 avec le cycle de vie S3
<a name="versioning-lifecycle"></a>

Pour personnaliser votre approche de la conservation des données et maîtriser les coûts de stockage, utilisez la gestion des versions des objets avec le cycle de vie S3. Pour de plus amples informations, veuillez consulter [Gestion du cycle de vie des objets](object-lifecycle-mgmt.md). Pour plus d'informations sur la création de configurations S3 Lifecycle à l'aide de l'API AWS Management Console AWS CLI AWS SDKs,, ou REST, consultez[Définition d’une configuration du cycle de vie S3 sur un compartiment](how-to-set-lifecycle-configuration-intro.md).

**Important**  
Si vous avez une configuration de cycle de vie d’expiration des objets dans votre compartiment non versionné et que vous souhaitez conserver le même comportement de suppression définitive lorsque vous activez la gestion des versions, vous devez ajouter une configuration d’expiration des versions anciennes. La configuration du cycle de vie d’expiration des versions non actuelles gère les suppressions des versions non actuelles des objets dans le compartiment avec gestion des versions. (Un compartiment avec gestion des versions conserve une version actuelle et aucune, une ou plusieurs versions non actuelles d’un objet.) Pour de plus amples informations, veuillez consulter [Définition d’une configuration du cycle de vie S3 sur un compartiment](how-to-set-lifecycle-configuration-intro.md).

Pour en savoir plus sur l’utilisation de la gestion des versions S3, consultez les rubriques suivantes.

**Topics**
+ [Compartiments non versionnés, activés pour la gestion des versions et suspendus](#versioning-states)
+ [Utilisation de la gestion des versions S3 avec le cycle de vie S3](#versioning-lifecycle)
+ [Fonctionnement de la gestion des versions S3](versioning-workflows.md)
+ [Activation de la gestion des versions sur les compartiments](manage-versioning-examples.md)
+ [Configuration de la fonction Supprimer MFA](MultiFactorAuthenticationDelete.md)
+ [Utiliser des objets dans un compartiment activé pour la gestion des versions](manage-objects-versioned-bucket.md)
+ [Utilisation des objets dans un compartiment désactivé pour la gestion des versions](VersionSuspendedBehavior.md)
+ [Résolution des problèmes de gestion des versions](troubleshooting-versioning.md)

# Fonctionnement de la gestion des versions S3
<a name="versioning-workflows"></a>

Vous pouvez utiliser la gestion des versions S3 pour conserver plusieurs versions d’un objet dans un même compartiment afin de pouvoir restaurer des objets qui sont accidentellement supprimés ou remplacés. Par exemple, si vous appliquez la gestion des versions S3 à un compartiment, les modifications suivantes se produisent : 
+ Si vous supprimez un objet, au lieu de supprimer l’objet définitivement, Amazon S3 insère un marqueur de suppression, qui devient la version d’objet actuelle. Vous pouvez ensuite restaurer la version précédente. Pour plus d’informations, consultez [Suppression des versions d’objet d’un compartiment activé pour la gestion des versions](DeletingObjectVersions.md).
+ Si vous remplacez un objet, Amazon S3 ajoute une nouvelle version d’objet dans le compartiment. La version précédente reste dans le compartiment et devient une version ancienne. Vous pouvez restaurer la version précédente.

**Note**  
Les tarifs Amazon S3 normaux s’appliquent pour chaque version d’un objet stocké et transféré. Chaque version d’un objet est l’objet entier ; il n’est pas différent de la version précédente. Par conséquent, si vous possédez trois versions d’un objet stocké, vous êtes facturé pour trois objets.

Chaque compartiment S3 créé possède une sous-ressource de *gestion des versions* qui lui est associée. (Pour plus d’informations, consultez [Options de configuration des compartiments à usage général](UsingBucket.md#bucket-config-options-intro).) Par défaut, votre compartiment est *non versionné*, et la sous-ressource de la gestion des versions stocke une configuration de gestion des versions vide, comme suit :

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
</VersioningConfiguration>
```

Pour activer la gestion des versions, vous pouvez envoyer une demande à Amazon S3 avec une configuration de la gestion des versions qui inclut un statut `Enabled`. 

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>Enabled</Status> 
</VersioningConfiguration>
```

Pour désactiver la gestion des versions, vous configurez la valeur du statut sur `Suspended`.

**Note**  
Quand vous activez la gestion des versions sur un compartiment pour la première fois, la propagation complète de la modification peut prendre un court laps de temps. Pendant que cette modification se propage, il est possible que vous rencontriez des erreurs `HTTP 404 NoSuchKey` intermittentes pour les demandes adressées aux objets créés ou mis à jour après l’activation de la gestion des versions. Nous vous recommandons d’attendre 15 minutes après l’activation de la gestion des versions avant d’exécuter des opérations d’écriture (`PUT` ou `DELETE`) sur les objets du compartiment. 

Le propriétaire du bucket et tous les utilisateurs autorisés Gestion des identités et des accès AWS (IAM) peuvent activer le versionnement. Le propriétaire du bucket est celui Compte AWS qui a créé le bucket. Pour en savoir plus sur les autorisations, consultez [Gestion des identités et des accès pour Amazon S3](security-iam.md).

Pour plus d'informations sur l'activation et la désactivation de la gestion des versions S3 à l'aide de l'API AWS Management Console, AWS Command Line Interface (AWS CLI) ou REST, consultez. [Activation de la gestion des versions sur les compartiments](manage-versioning-examples.md)

**Topics**
+ [Version IDs](#version-ids)
+ [Flux de travail de la gestion des versions](#versioning-workflows-examples)

## Version IDs
<a name="version-ids"></a>

Si vous activez la gestion des versions pour un compartiment, Simple Storage Service (Amazon S3) génère automatiquement un ID de version unique pour l’objet qui est stocké. Par exemple, dans un compartiment, vous pouvez avoir deux objets dotés de la même clé (nom de l'objet) mais d'une version différente IDs, par exemple `photo.gif` (version 111111) et `photo.gif` (version 121212).

![\[Schéma illustrant un compartiment activé pour la gestion des versions contenant deux objets dotés de la même clé mais d'une version différente. IDs\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_Enabled.png)


Chaque objet possède un ID de version, que la gestion des versions S3 soit activée ou non. Si la gestion des versions S3 n’est pas activée, Amazon S3 définit la valeur de l’ID de version sur `null`. Si vous activez la gestion des versions S3, Simple Storage Service (Amazon S3) attribue une valeur d’ID de version à l’objet. Cette valeur distingue l’objet des autres versions de la même clé.

Lorsque vous activez la gestion des versions S3 dans un compartiment existant, les objets déjà stockés dans le compartiment ne changent pas. Leur version IDs (`null`), leur contenu et leurs autorisations restent les mêmes. Après avoir activé la gestion des versions S3, chaque objet ajouté au compartiment obtient un ID de version, qui le distingue des autres versions de la même clé. 

Seul Amazon S3 génère des versions IDs et elles ne peuvent pas être modifiées. IDs Les versions sont des chaînes opaques Unicode, codées en UTF-8, prêtes pour les URL, d'une longueur maximale de 1 024 octets. Voici un exemple :

`3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo`

**Note**  
Pour des raisons de simplicité, les autres exemples de cette rubrique sont beaucoup plus courts IDs.



## Flux de travail de la gestion des versions
<a name="versioning-workflows-examples"></a>

Lorsque vous faites une demande `PUT` sur un objet dans un compartiment activé pour la gestion des versions, l’ancienne version n’est pas remplacée. Comme le montre la figure suivante, lorsqu’une nouvelle version de `photo.gif` est `PUT` dans un compartiment qui contient déjà un objet portant le même nom, le comportement suivant se produit :
+ L’objet d’origine (ID = 111111) reste dans le compartiment.
+ Amazon S3 génère un nouvel ID de version (121212) et ajoute cette nouvelle version de l’objet au compartiment.

![\[Diagramme illustrant le fonctionnement de la gestion des versions S3 lorsque vous faites une requête PUT sur un objet dans un compartiment compatible avec la gestion des versions.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_PUT_versionEnabled3.png)


Cette fonctionnalité vous permet de récupérer une version précédente d’un objet si celui-ci a été accidentellement remplacé ou supprimé.

Lorsque vous faites une requête `DELETE` sur un objet, toutes les versions restent dans le compartiment et Amazon S3 insère un marqueur de suppression, comme illustré dans le schéma suivant.

![\[Illustration de l’insertion d’un marqueur de suppression.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png)


Le marqueur de suppression devient la version actuelle de l’objet. Par défaut, les demandes `GET` récupèrent la version la plus récemment stockée. Le fait d’effectuer une requête `GET Object` lorsque la version actuelle est un marqueur de suppression renvoie une erreur `404 Not Found`, comme illustré dans la figure suivante.

![\[Illustration illustrant un GetObject appel à un marqueur de suppression renvoyant une erreur 404 (introuvable).\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound.png)


Vous pouvez, toutefois, vous pouvez faire une demande `GET` sur une ancienne version d’un objet en spécifiant son ID de version. Dans le schéma suivant, vous faites une demande `GET` sur une version d’objet spécifique, 111111. Amazon S3 renvoie une version d’objet même s’il ne s’agit pas de la version actuelle.

Pour plus d’informations, consultez [Récupération de versions d’objets à partir d’un compartiment activé pour la gestion des versions](RetrievingObjectVersions.md).

![\[Diagramme illustrant le fonctionnement de la gestion des versions S3 lorsque vous faites une requête GET sur une version ancienne dans un compartiment compatible avec la gestion des versions.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_GET_Versioned3.png)


Vous pouvez supprimer définitivement un objet en spécifiant la version que vous souhaitez supprimer. Seul le propriétaire d’un compartiment Amazon S3 ou d’un utilisateur IAM autorisé peut supprimer une version de manière définitive. Si votre opération `DELETE` inclut l’élément `versionId`, cette version de l’objet est définitivement supprimée et Amazon S3 n’insère pas de marqueur de suppression.

![\[Schéma qui montre comment DELETE versionId supprime définitivement une version d’objet spécifique.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)


Vous pouvez ajouter une sécurité supplémentaire en configurant un compartiment pour activer la suppression par authentification multifactorielle (MFA). Quand vous activez la suppression MFA pour un compartiment, le propriétaire du compartiment doit inclure deux formes d’authentification pour toute demande de suppression d’une version ou de changement de l’état de la gestion des versions du compartiment. Pour plus d’informations, consultez [Configuration de la fonction Supprimer MFA](MultiFactorAuthenticationDelete.md).

### Quand les nouvelles versions sont-elles créées pour un objet ?
<a name="versioning-workflows-new-versions"></a>

Les nouvelles versions sont créées uniquement lorsque vous faites une requête `PUT` sur un nouvel objet. Sachez que certaines actions, comme `CopyObject`, fonctionnent en mettant en œuvre une opération `PUT`.

Certaines actions qui modifient l’objet actuel ne créent pas de nouvelle version, car elles ne font pas de requête `PUT` sur le nouvel objet. Cela inclut des actions telles que la modification des balises sur un objet. 

**Important**  
Si vous remarquez une augmentation importante du nombre de réponses HTTP 503 (Service indisponible) reçues pour les requêtes d’objet `PUT` ou `DELETE` Amazon S3 concernant un compartiment pour lequel la gestion des versions S3 est activée, il est possible qu’il y ait un ou plusieurs objets du compartiment avec des millions de versions. Pour plus d’informations, consultez la section sur la gestion des versions S3 de [Résolution des problèmes de gestion des versions](troubleshooting-versioning.md).

# Activation de la gestion des versions sur les compartiments
<a name="manage-versioning-examples"></a>

Vous pouvez utiliser la gestion des versions Simple Storage Service (Amazon S3) pour conserver plusieurs versions d’un objet dans un même compartiment. Cette section fournit des exemples expliquant comment activer le versionnement sur un bucket à l'aide de la console, de l'API REST et AWS Command Line Interface (AWS CLI). AWS SDKs 

**Note**  
Après avoir activé la gestion des versions sur un compartiment pour la première fois, la propagation complète de la modification dans le système S3 peut prendre jusqu’à 15 minutes. Pendant ce temps, les demandes `GET` d’objets créés ou mis à jour après l’activation de la gestion des versions peuvent entraîner des erreurs `HTTP 404 NoSuchKey`. Nous vous recommandons d’attendre 15 minutes après l’activation de la gestion des versions avant d’exécuter des opérations d’écriture (`PUT` ou `DELETE`) sur les objets du compartiment. Cette période d’attente permet d’éviter les problèmes potentiels liés à la visibilité des objets et au suivi de la gestion des versions.

Pour plus d’informations sur la gestion des versions S3, consultez [Conservation de plusieurs versions d’objets grâce à la gestion des versions S3](Versioning.md). Pour en savoir plus sur l’utilisation d’objets se trouvant dans un compartiment dont la gestion des versions est activée, consultez [Utiliser des objets dans un compartiment activé pour la gestion des versions](manage-objects-versioned-bucket.md).

Pour en savoir plus sur l’utilisation de la gestion des versions S3 pour protéger les données, consultez [Tutoriel : protection des données sur Amazon S3 contre les suppressions accidentelles ou les bogues d’application à l’aide de l’archivage par versions S3, du verrouillage d’objets S3 et de la réplication S3](https://aws.amazon.com/getting-started/hands-on/protect-data-on-amazon-s3/?ref=docs_gateway/amazons3/manage-versioning-examples.html).

Chaque compartiment S3 créé possède une sous-ressource de *gestion des versions* qui lui est associée. (Pour plus d’informations, consultez [Options de configuration des compartiments à usage général](UsingBucket.md#bucket-config-options-intro).) Par défaut, votre compartiment est *non versionné*, et la sous-ressource de la gestion des versions stocke une configuration de gestion des versions vide, comme suit :

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
</VersioningConfiguration>
```

Pour activer la gestion des versions, vous pouvez envoyer une demande à Simple Storage Service (Amazon S3) avec une configuration de la gestion des versions qui inclut un statut. 

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>Enabled</Status> 
</VersioningConfiguration>
```

Pour désactiver la gestion des versions, vous configurez la valeur de l'état sur `Suspended`.

Le propriétaire du compartiment et tous les utilisateurs autorisés peuvent activer la gestion des versions. Le propriétaire du bucket est celui Compte AWS qui a créé le bucket (le compte root). Pour en savoir plus sur les autorisations, consultez [Gestion des identités et des accès pour Amazon S3](security-iam.md).

Les sections suivantes fournissent plus de détails sur l'activation de la gestion des versions S3 à l'aide de la console AWS CLI, et du AWS SDKs.

## Utilisation de la console S3
<a name="enable-versioning"></a>

Procédez comme suit pour utiliser le AWS Management Console afin d'activer le versionnement sur un compartiment S3.

**Pour activer ou désactiver la gestion des versions dans un compartiment à usage général S3**

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans le volet de navigation de gauche, choisissez **Compartiments à usage général**.

1. Dans la liste de compartiments, choisissez le nom du compartiment pour lequel vous souhaitez activer la gestion des versions.

1. Choisissez **Propriétés**.

1. Sous **Bucket Versioning (Gestion des versions de compartiment)**, choisissez **Edit (Modifier)**.

1. Choisissez **Interrompre** ou **Activer**, puis **Enregistrer les modifications**.

**Note**  
Vous pouvez utiliser l'authentification AWS multifactorielle (MFA) avec le versionnement. Lorsque vous utilisez l'authentification MFA avec le contrôle de version, vous devez fournir vos clés Compte AWS d'accès et un code valide provenant du dispositif MFA du compte pour supprimer définitivement une version d'objet ou suspendre ou réactiver le contrôle de version.   
Pour utiliser l’authentification multifactorielle (MFA) avec la gestion des versions, vous activez `MFA Delete`. Vous ne pouvez pas activer `MFA Delete` à l’aide de la AWS Management Console. Vous devez utiliser le AWS Command Line Interface (AWS CLI) ou l'API. Pour de plus amples informations, veuillez consulter [Configuration de la fonction Supprimer MFA](MultiFactorAuthenticationDelete.md).

## À l'aide du AWS CLI
<a name="manage-versioning-examples-cli"></a>

L’exemple suivant active la gestion des versions sur un compartiment à usage général S3. 

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled
```

L’exemple suivant active la gestion des versions S3 et la fonction de suppression de l’authentification multifactorielle (MFA) sur un compartiment pour un dispositif MFA physique. Pour les dispositifs MFA physiques, dans le paramètre `--mfa`, transmettez une concaténation du numéro de série du dispositif MFA, d’un espace et de la valeur affichée sur votre dispositif d’authentification.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SerialNumber 123456"
```

L’exemple suivant active la gestion des versions S3 et la fonction de suppression de l’authentification multifactorielle (MFA) sur un compartiment pour un dispositif MFA virtuel. Pour les dispositifs MFA virtuels, dans le paramètre `--mfa`, transmettez une concaténation de l’ARN du dispositif MFA, d’un espace et de la valeur affichée sur votre dispositif d’authentification.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::account-id:mfa/root-account-mfa-device 123789"
```

**Note**  
L’utilisation de la fonction Supprimer MFA nécessite un périphérique d’authentification physique ou virtuel approuvé. Pour en savoir plus sur l’utilisation de la fonction Supprimer MFA dans Amazon S3, consultez [Configuration de la fonction Supprimer MFA](MultiFactorAuthenticationDelete.md).

Pour plus d'informations sur l'activation de la gestion des versions à l'aide du AWS CLI, consultez [put-bucket-versioning](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-versioning.html)la *référence des AWS CLI commandes*.

## À l'aide du AWS SDKs
<a name="manage-versioning-examples-sdk"></a>

Les exemples suivants activent le contrôle de version sur un compartiment, puis récupèrent le statut de version à l'aide du AWS SDK pour Java et du. AWS SDK pour .NET Pour plus d'informations sur l'utilisation des autres AWS SDKs, consultez le [AWS Developer Center](https://aws.amazon.com/code/).

------
#### [ .NET ]

Pour plus d'informations sur la configuration et l'exécution des exemples de code, consultez [Getting Started with the AWS SDK for](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) .NET dans *AWS le Guide du développeur du SDK pour* .NET. 

```
using System;
using Amazon.S3;
using Amazon.S3.Model;

namespace s3.amazon.com.rproxy.goskope.com.docsamples
{
    class BucketVersioningConfiguration
    {
        static string bucketName = "*** bucket name ***";

        public static void Main(string[] args)
        {
            using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1))
            {
                try
                {
                    EnableVersioningOnBucket(client);
                    string bucketVersioningStatus = RetrieveBucketVersioningConfiguration(client);
                }
                catch (AmazonS3Exception amazonS3Exception)
                {
                    if (amazonS3Exception.ErrorCode != null &&
                        (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
                        ||
                        amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
                    {
                        Console.WriteLine("Check the provided AWS Credentials.");
                        Console.WriteLine(
                        "To sign up for service, go to http://aws.amazon.com/s3");
                    }
                    else
                    {
                        Console.WriteLine(
                         "Error occurred. Message:'{0}' when listing objects",
                         amazonS3Exception.Message);
                    }
                }
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }

        static void EnableVersioningOnBucket(IAmazonS3 client)
        {

                PutBucketVersioningRequest request = new PutBucketVersioningRequest
                {
                    BucketName = bucketName,
                    VersioningConfig = new S3BucketVersioningConfig 
                    {
                        Status = VersionStatus.Enabled
                    }
                };

                PutBucketVersioningResponse response = client.PutBucketVersioning(request);
        }


        static string RetrieveBucketVersioningConfiguration(IAmazonS3 client)
        {
                GetBucketVersioningRequest request = new GetBucketVersioningRequest
                {
                    BucketName = bucketName
                };
 
                GetBucketVersioningResponse response = client.GetBucketVersioning(request);
                return response.VersioningConfig.Status;
            }
    }
}
```

------
#### [ Java ]

Pour obtenir des instructions sur la création et le test d'un échantillon fonctionnel, consultez [Getting Started](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) dans le guide du AWS SDK pour Java développeur.

```
import java.io.IOException;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest;

public class BucketVersioningConfigurationExample {
    public static String bucketName = "*** bucket name ***"; 
    public static AmazonS3Client s3Client;

    public static void main(String[] args) throws IOException {
        s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
        s3Client.setRegion(Region.getRegion(Regions.US_EAST_1));
        try {

            // 1. Enable versioning on the bucket.
        	BucketVersioningConfiguration configuration = 
        			new BucketVersioningConfiguration().withStatus("Enabled");
            
			SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = 
					new SetBucketVersioningConfigurationRequest(bucketName,configuration);
			
			s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);
			
			// 2. Get bucket versioning configuration information.
			BucketVersioningConfiguration conf = s3Client.getBucketVersioningConfiguration(bucketName);
			 System.out.println("bucket versioning configuration status:    " + conf.getStatus());

        } catch (AmazonS3Exception amazonS3Exception) {
            System.out.format("An Amazon S3 error occurred. Exception: %s", amazonS3Exception.toString());
        } catch (Exception ex) {
            System.out.format("Exception: %s", ex.toString());
        }        
    }
}
```

------
#### [ Python ]

L’exemple de code Python suivant crée un compartiment Amazon S3, l’active pour la gestion des versions, et configure un cycle de vie qui fait expirer les versions d’objet anciennes après 7 jours.

```
def create_versioned_bucket(bucket_name, prefix):
    """
    Creates an Amazon S3 bucket, enables it for versioning, and configures a lifecycle
    that expires noncurrent object versions after 7 days.

    Adding a lifecycle configuration to a versioned bucket is a best practice.
    It helps prevent objects in the bucket from accumulating a large number of
    noncurrent versions, which can slow down request performance.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket_name: The name of the bucket to create.
    :param prefix: Identifies which objects are automatically expired under the
                   configured lifecycle rules.
    :return: The newly created bucket.
    """
    try:
        bucket = s3.create_bucket(
            Bucket=bucket_name,
            CreateBucketConfiguration={
                "LocationConstraint": s3.meta.client.meta.region_name
            },
        )
        logger.info("Created bucket %s.", bucket.name)
    except ClientError as error:
        if error.response["Error"]["Code"] == "BucketAlreadyOwnedByYou":
            logger.warning("Bucket %s already exists! Using it.", bucket_name)
            bucket = s3.Bucket(bucket_name)
        else:
            logger.exception("Couldn't create bucket %s.", bucket_name)
            raise

    try:
        bucket.Versioning().enable()
        logger.info("Enabled versioning on bucket %s.", bucket.name)
    except ClientError:
        logger.exception("Couldn't enable versioning on bucket %s.", bucket.name)
        raise

    try:
        expiration = 7
        bucket.LifecycleConfiguration().put(
            LifecycleConfiguration={
                "Rules": [
                    {
                        "Status": "Enabled",
                        "Prefix": prefix,
                        "NoncurrentVersionExpiration": {"NoncurrentDays": expiration},
                    }
                ]
            }
        )
        logger.info(
            "Configured lifecycle to expire noncurrent versions after %s days "
            "on bucket %s.",
            expiration,
            bucket.name,
        )
    except ClientError as error:
        logger.warning(
            "Couldn't configure lifecycle on bucket %s because %s. "
            "Continuing anyway.",
            bucket.name,
            error,
        )

    return bucket
```

------

# Configuration de la fonction Supprimer MFA
<a name="MultiFactorAuthenticationDelete"></a>

Lorsque vous travaillez avec la gestion des versions S3 dans des compartiments Simple Storage Service (Amazon S3), vous pouvez ajouter une couche de sécurité en activant la fonction *MFA delete (Suppression de l’authentification multifacteur)*. Quand vous procédez ainsi, le propriétaire du compartiment doit inclure deux formes d’authentification dans toute demande pour supprimer une version ou modifier l’état de la gestion des versions du compartiment.

La fonction Supprimer MFA exige une authentification supplémentaire pour les opérations suivantes :
+ Changer l’état de la gestion des versions de votre compartiment
+ Supprimer définitivement une version d’objet

La fonction Supprimer MFA exige deux formes d’authentification appliquées ensemble :
+ Les informations d’identification de sécurité
+ L’enchaînement d’un numéro de série valide, d’un espace et du code à six chiffres affiché sur un appareil d’authentification approuvé

La fonction Supprimer MFA fournit donc une sécurité supplémentaire, par exemple, en cas de mise en danger de vos informations d’identification de sécurité. La fonction Supprimer MFA peut aider à prévenir les suppressions accidentelles de compartiments en obligeant l’utilisateur qui lance l’action de suppression à prouver la possession physique d’un appareil MFA avec un code MFA et en ajoutant une couche de friction et de sécurité supplémentaire à l’action de suppression.

Pour identifier les compartiments pour lesquels la suppression MFA est activée, vous pouvez utiliser les métriques Amazon S3 Storage Lens. S3 Storage Lens est une fonction d'analyse du stockage dans le cloud que vous pouvez utiliser pour obtenir une visibilité à l'échelle de l'organisation sur l'utilisation et l'activité du stockage d'objets. Pour plus d’informations, consultez [Évaluer l’activité et l’utilisation de votre stockage avec S3 Storage Lens](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens?icmpid=docs_s3_user_guide_MultiFactorAuthenticationDelete.html). Pour obtenir la liste complète des métriques, consultez le [Glossaire des métriques S3 Storage Lens](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_MultiFactorAuthenticationDelete.html).

Le propriétaire du bucket, celui Compte AWS qui a créé le bucket (compte root) et tous les utilisateurs autorisés peuvent activer le versionnement. Toutefois, seul le propriétaire du compartiment (compte racine) peut activer la fonction Supprimer MFA. Pour plus d'informations, consultez la section [Sécurisation de l'accès à AWS l'utilisation de la MFA](https://aws.amazon.com/blogs/security/securing-access-to-aws-using-mfa-part-3/) sur le blog de AWS sécurité.

**Note**  
Pour utiliser la suppression MFA avec la gestion des versions, vous devez activer `MFA Delete`. Toutefois, vous ne pouvez pas activer `MFA Delete` à l’aide de la AWS Management Console. Vous devez utiliser le AWS Command Line Interface (AWS CLI) ou l'API.   
Consultez la section Exemples dans la rubrique [Activation de la gestion des versions sur les compartiments](manage-versioning-examples.md) pour découvrir des cas d’utilisation de la suppression MFA avec la gestion des versions.  
Vous ne pouvez pas utiliser la suppression MFA avec des configurations de cycle de vie. Pour en savoir plus sur les configurations de cycle de vie et sur leur interaction avec d’autres configurations, consultez [Comment le cycle de vie S3 interagit avec d’autres configurations de compartiments](lifecycle-and-other-bucket-config.md).

Pour activer ou désactiver la suppression MFA, vous devez utiliser la même API que celle utilisée pour configurer la gestion des versions sur un compartiment. Simple Storage Service (Amazon S3) stocke la configuration de la fonction Supprimer MFA dans la même sous-ressource de *gestion des versions* que celle de l’état de la gestion des versions du compartiment.

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>VersioningState</Status>
  <MfaDelete>MfaDeleteState</MfaDelete>  
</VersioningConfiguration>
```

Pour utiliser la fonction Supprimer MFA, vous pouvez utiliser un appareil MFA matériel ou virtuel pour générer un code d’authentification. L’exemple suivant montre un code d’authentification généré et affiché sur un périphérique matériel.

![\[Exemple de code d’authentification généré et affiché sur un périphérique matériel.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/MFADevice.png)


Les fonctions Supprimer MFA et d’accès à l’API protégée par MFA sont conçues pour fournir une protection dans différents scénarios. Vous configurez la fonction Supprimer MFA sur un compartiment pour garantir que les données de votre compartiment ne puissent pas être supprimées par erreur. La fonction d’accès à l’API protégée par MFA est utilisée pour appliquer un autre facteur d’authentification (code MFA) lors de l’accès aux ressources Amazon S3 sensibles. Vous pouvez exiger que toute opération sur ces ressources Amazon S3 soit effectuée avec des informations d’identification temporaires créées grâce à la fonction MFA. Pour obtenir un exemple, consultez [Exigence d’une MFA](example-bucket-policies.md#example-bucket-policies-MFA). 

Pour en savoir plus sur l’achat et l’activation d’un appareil d’authentification, consultez [Authentification multifactorielle](https://aws.amazon.com/iam/details/mfa/).

## Pour activer la gestion des versions S3 et configurer la fonction Supprimer MFA
<a name="enable-versioning-mfa-delete"></a>

### À l'aide du AWS CLI
<a name="enable-versioning-mfa-delete-cli"></a>

Le numéro de série est le numéro qui identifie de manière unique le dispositif MFA. Pour les dispositifs MFA physiques, il s’agit du numéro de série unique fourni avec le dispositif. Pour les dispositifs MFA virtuels, le numéro de série est l’ARN du dispositif. Pour utiliser les commandes suivantes, remplacez *user input placeholders* par vos propres informations.

L’exemple suivant active la gestion des versions S3 et la fonction de suppression de l’authentification multifactorielle (MFA) sur un compartiment pour un dispositif MFA physique. Pour les dispositifs MFA physiques, dans le paramètre `--mfa`, transmettez une concaténation du numéro de série du dispositif MFA, d’un espace et de la valeur affichée sur votre dispositif d’authentification.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SerialNumber 123456"
```

L’exemple suivant active la gestion des versions S3 et la fonction de suppression de l’authentification multifactorielle (MFA) sur un compartiment pour un dispositif MFA virtuel. Pour les dispositifs MFA virtuels, dans le paramètre `--mfa`, transmettez une concaténation de l’ARN du dispositif MFA, d’un espace et de la valeur affichée sur votre dispositif d’authentification.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::account-id:mfa/root-account-mfa-device 123789"
```

Pour plus d'informations, consultez l'article de AWS RePost [Comment activer la suppression MFA pour mon compartiment Amazon S3](https://repost.aws/knowledge-center/s3-bucket-mfa-delete) ? .

### Utilisation de l'API REST
<a name="enable-versioning-mfa-delete-rest-api"></a>

Pour plus d'informations sur la spécification de la suppression MFA à l'aide de l'API REST Amazon S3, consultez le manuel [PutBucketVersioning](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html)*Amazon Simple Storage Service API* Reference.

# Utiliser des objets dans un compartiment activé pour la gestion des versions
<a name="manage-objects-versioned-bucket"></a>

Les objets qui sont stockés dans un compartiment Simple Storage Service (Amazon S3) avant d’en définir l’état de la gestion des versions ont un ID de version `null`. Lorsque vous activez la gestion des versions, les objets existants dans le compartiment ne changent pas. Seule la façon dont Amazon S3 gère les objets dans les futures demandes change.

**Transition des versions d’un objet**  
Vous pouvez définir les règles de configuration du cycle de vie pour les objets qui possèdent un cycle de vie bien défini, afin de transférer les versions d’objet vers la classe de stockage S3 Glacier Flexible Retrieval à un moment spécifique dans la durée de vie de l’objet. Pour plus d’informations, consultez [Gestion du cycle de vie des objets](object-lifecycle-mgmt.md).

Les rubriques de cette section expliquent plusieurs opérations d’objet dans un compartiment activé pour la gestion des versions. Pour plus d’informations sur la gestion des versions, consultez [Conservation de plusieurs versions d’objets grâce à la gestion des versions S3](Versioning.md).

**Topics**
+ [Ajout d’objets dans des compartiments activés pour la gestion des versions](AddingObjectstoVersioningEnabledBuckets.md)
+ [Liste d’objets dans un compartiment activé pour la gestion des versions](list-obj-version-enabled-bucket.md)
+ [Récupération de versions d’objets à partir d’un compartiment activé pour la gestion des versions](RetrievingObjectVersions.md)
+ [Suppression des versions d’objet d’un compartiment activé pour la gestion des versions](DeletingObjectVersions.md)
+ [Configuration des autorisations d’objet soumis à la gestion des versions](VersionedObjectPermissionsandACLs.md)

# Ajout d’objets dans des compartiments activés pour la gestion des versions
<a name="AddingObjectstoVersioningEnabledBuckets"></a>

Après avoir activé la gestion des versions sur un compartiment, Simple Storage Service (Amazon S3) ajoute automatiquement un ID de version unique à chaque objet stocké (à l’aide de `PUT`, `POST` ou `CopyObject`) dans le compartiment. 

Le schéma suivant montre qu’Amazon S3 ajoute un ID de version unique à un objet ajouté à un compartiment activé pour la gestion des versions. 

![\[Illustration montrant un ID de version unique ajouté à un objet quand il est placé dans un compartiment avec gestion des versions.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_PUT_versionEnabled.png)


**Note**  
Les valeurs de l’ID de version qu’Amazon S3 attribue sont sûres pour l’URL (elles peuvent être incluses dans une URI).

Pour plus d’informations sur la gestion des versions, consultez [Conservation de plusieurs versions d’objets grâce à la gestion des versions S3](Versioning.md). Vous pouvez ajouter des versions d'objets à un compartiment activé pour la gestion des versions à l'aide de la console et de l' AWS SDKsAPI REST.

## Utilisation de la console
<a name="add-obj-versioning-enabled-bucket-console"></a>

Pour obtenir des instructions, consultez [Chargement d’objets](upload-objects.md). 

## À l'aide du AWS SDKs
<a name="add-obj-versioning-enabled-bucket-sdk"></a>

Pour des exemples de téléchargement d'objets à l'aide AWS SDKs de Java, .NET et PHP, consultez[Chargement d’objets](upload-objects.md). Les exemples de chargement d’objets dans des compartiments non versionnés et activés pour la gestion des versions sont identiques, même si dans le cas des compartiments activés pour la gestion des versions, Amazon S3 attribue un numéro de version. Sinon, le numéro de version est null. 

Pour plus d'informations sur l'utilisation des autres AWS SDKs, consultez le [AWS Developer Center](https://aws.amazon.com/code/). 

## Utilisation de l'API REST
<a name="add-obj-versioning-enabled-bucket-rest"></a>

**Pour ajouter des objets dans des compartiments activés pour la gestion des versions**

1. Activez la gestion des versions sur un compartiment grâce à une demande `PutBucketVersioning`.

   Pour plus d’informations, consultez [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html) dans la *Référence d’API Amazon Simple Storage Service*.

1. Envoyez une demande `PUT`, `POST`, ou `CopyObject` pour stocker un objet dans le compartiment.

Lorsque vous ajoutez un objet dans un compartiment activé pour la gestion des versions, Simple Storage Service (Amazon S3) renvoie l’ID de version de l’objet dans l’en-tête de la réponse `x-amz-version-id`, comme illustré dans l’exemple suivant :

```
1. x-amz-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY
```

# Liste d’objets dans un compartiment activé pour la gestion des versions
<a name="list-obj-version-enabled-bucket"></a>

Cette section fournit des exemples de listes de versions d’objet à partir d’un compartiment activé pour la gestion des versions. Amazon S3 stocke les informations relatives aux versions d’objet dans la sous-ressource *versions* associée au compartiment. Pour plus d’informations, consultez [Options de configuration des compartiments à usage général](UsingBucket.md#bucket-config-options-intro). Pour répertorier les objets d’un compartiment dont la gestion des versions est activée, vous avez besoin de l’autorisation `ListBucketVersions`.

## Utilisation de la console S3
<a name="view-object-versions"></a>

Procédez comme suit pour utiliser la console Amazon S3 pour afficher les différentes versions d’un objet.

**Pour afficher différentes versions d’un objet**

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans la liste **Buckets** (Compartiments), choisissez le nom du compartiment qui contient l'objet.

1. Pour afficher la liste des versions des objets du compartiment, choisissez le commutateur **Show versions** (Afficher les versions). 

   Pour chaque version d’objet, la console affiche un ID de version unique, la date et l’heure auxquelles la version d’objet a été créée, et d’autres propriétés. (Les objets stockés dans le compartiment avant la configuration de l’état de la gestion des versions possèdent un ID de version **null**.)

   Pour répertorier les objets sans les versions, choisissez le commutateur **List versions (Répertorier les versions)**.

Vous pouvez également afficher, télécharger et supprimer les versions d’un objet dans le panneau de présentation de l’objet sur la console. Pour de plus amples informations, veuillez consulter [Affichage des propriétés d’un objet dans la console Amazon S3](view-object-properties.md).

**Note**  
 Pour accéder aux versions d'objets antérieures à 300 versions, vous devez utiliser la AWS CLI ou l'URL de l'objet.

**Important**  
Vous pouvez annuler la suppression d’un objet uniquement si celui-ci a été supprimé en tant que version la plus récente (version actuelle). Vous ne pouvez pas restaurer une version précédente d’un objet supprimé. Pour de plus amples informations, veuillez consulter [Conservation de plusieurs versions d’objets grâce à la gestion des versions S3](Versioning.md).

## À l'aide du AWS SDKs
<a name="list-obj-version-enabled-bucket-sdk-examples"></a>

Les exemples de cette section montrent comment récupérer une liste d’objets à partir d’un compartiment activé pour la gestion des versions. Chaque demande renvoie jusqu’à 1 000 versions, sauf si vous spécifiez un nombre inférieur. Si le compartiment contient plus de versions que cette limite, vous devez envoyer une série de demandes pour récupérer la liste de toutes les versions. Ce processus de renvoi des résultats dans des « pages » s’appelle *pagination*.

Pour illustrer le fonctionnement de la pagination, les exemples limitent chaque réponse à deux versions d’objet. Après avoir récupéré la première page de résultats, chaque exemple vérifie si la liste de versions a été tronquée. Si tel est le cas, l’exemple continue de récupérer les pages jusqu’à ce que toutes les versions aient été récupérées. 

**Note**  
Les exemples suivants fonctionnent également avec un compartiment qui n’est pas activé pour la gestion des versions ou pour des objets qui n’ont pas de versions individuelles. Dans ces cas de figure, Amazon S3 renvoie la liste d’objets avec l’ID de version `null`.

 Pour plus d'informations sur l'utilisation des autres AWS SDKs, consultez le [AWS Developer Center](https://aws.amazon.com/code/). 

------
#### [ Java ]

Pour obtenir des instructions sur la création et le test d'un échantillon fonctionnel, voir [Getting Started](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) dans le guide du AWS SDK pour Java développeur.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListVersionsRequest;
import com.amazonaws.services.s3.model.S3VersionSummary;
import com.amazonaws.services.s3.model.VersionListing;

public class ListKeysVersioningEnabledBucket {

    public static void main(String[] args) {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();

            // Retrieve the list of versions. If the bucket contains more versions
            // than the specified maximum number of results, Amazon S3 returns
            // one page of results per request.
            ListVersionsRequest request = new ListVersionsRequest()
                    .withBucketName(bucketName)
                    .withMaxResults(2);
            VersionListing versionListing = s3Client.listVersions(request);
            int numVersions = 0, numPages = 0;
            while (true) {
                numPages++;
                for (S3VersionSummary objectSummary : versionListing.getVersionSummaries()) {
                    System.out.printf("Retrieved object %s, version %s\n",
                            objectSummary.getKey(),
                            objectSummary.getVersionId());
                    numVersions++;
                }
                // Check whether there are more pages of versions to retrieve. If
                // there are, retrieve them. Otherwise, exit the loop.
                if (versionListing.isTruncated()) {
                    versionListing = s3Client.listNextBatchOfVersions(versionListing);
                } else {
                    break;
                }
            }
            System.out.println(numVersions + " object versions retrieved in " + numPages + " pages");
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

Pour plus d'informations sur la configuration et l'exécution des exemples de code, consultez [Getting Started with the AWS SDK for](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) .NET dans *AWS le Guide du développeur du SDK pour* .NET. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class ListObjectsVersioningEnabledBucketTest
    {
        static string bucketName = "*** bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main(string[] args)
        {
            s3Client = new AmazonS3Client(bucketRegion);
            GetObjectListWithAllVersionsAsync().Wait();
        }

        static async Task GetObjectListWithAllVersionsAsync()
        {
            try
            {
                ListVersionsRequest request = new ListVersionsRequest()
                {
                    BucketName = bucketName,
                    // You can optionally specify key name prefix in the request
                    // if you want list of object versions of a specific object.

                    // For this example we limit response to return list of 2 versions.
                    MaxKeys = 2
                };
                do
                {
                    ListVersionsResponse response = await s3Client.ListVersionsAsync(request); 
                    // Process response.
                    foreach (S3ObjectVersion entry in response.Versions)
                    {
                        Console.WriteLine("key = {0} size = {1}",
                            entry.Key, entry.Size);
                    }

                    // If response is truncated, set the marker to get the next 
                    // set of keys.
                    if (response.IsTruncated)
                    {
                        request.KeyMarker = response.NextKeyMarker;
                        request.VersionIdMarker = response.NextVersionIdMarker;
                    }
                    else
                    {
                        request = null;
                    }
                } while (request != null);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------

## Utilisation de l'API REST
<a name="ListingtheObjectsinaVersioningEnabledBucket"></a>

**Example — Liste de toutes les versions d’objet dans un compartiment**  
Pour répertorier toutes les versions de tous les objets d’un compartiment, vous utilisez la sous-ressource `versions` dans une demande `GET Bucket`. Amazon S3 peut récupérer 1 000 objets maximum, et chaque version d’objet compte pleinement comme un objet. Par conséquent, si un compartiment contient deux clés (par exemple, `photo.gif` et `picture.jpg`), et que la première clé comporte 990 versions et la seconde 400 versions, une seule demande peut récupérer les 990 versions de `photo.gif` et uniquement les 10 versions les plus récentes de `picture.jpg`.  
Amazon S3 renvoie des versions d’objet dans l’ordre dans lequel elles sont stockées ; les plus récemment stockées sont renvoyées en premier.  
Dans une demande `GET Bucket`, incluez la sous-ressource `versions`.  

```
1. GET /?versions HTTP/1.1
2. Host: bucketName.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 +0000
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

**Example — Récupération de toutes les versions d’une clé**  
 Pour récupérer un sous-ensemble de versions d’objet, vous utilisez les paramètres de requête pour `GET Bucket`. Pour de plus amples informations, veuillez consulter [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html).   

1. Configurez le paramètre `prefix` sur la clé de l’objet que vous souhaitez récupérer.

1. Envoyez une demande `GET Bucket` grâce à la sous-ressource `versions` et `prefix`.

   `GET /?versions&prefix=objectName HTTP/1.1`

**Example — Récupération d’objets à l’aide d’un préfixe**  
L’exemple suivant récupère des objets dont la clé est ou commence par `myObject`.  

```
1. GET /?versions&prefix=myObject HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```
Vous pouvez utiliser les autres paramètres de la demande pour récupérer un sous-ensemble de toutes les versions de l’objet. Pour plus d’informations, consultez [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) dans la *Référence d’API Amazon Simple Storage Service*.

**Example — Récupération d’une liste d’objets supplémentaires si la réponse est tronquée**  
Si le nombre d’objets qui peuvent être renvoyés dans une demande `GET` dépasse la valeur de `max-keys`, la réponse contient `<isTruncated>true</isTruncated>`, et inclut la première clé (dans `NextKeyMarker`) et le premier ID de version (dans `NextVersionIdMarker`) qui satisfont la demande, mais qui n’ont pas été renvoyés. Vous utilisez ces valeurs renvoyées comme la position de départ dans une demande suivante pour récupérer les objets supplémentaires qui satisfont la demande `GET`.   
Utilisez le processus suivant pour récupérer des objets supplémentaires qui satisfont la demande `GET Bucket versions` originale à partir d’un compartiment. Pour plus d’informations sur `key-marker`, `version-id-marker`, `NextKeyMarker` et `NextVersionIdMarker`, consultez [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) dans la *référence de l’API Amazon Simple Storage Service*.  
Ces quelques réponses supplémentaires satisfont à la requête `GET` d’origine :  
+ Configurez la valeur de `key-marker` sur la clé renvoyée dans `NextKeyMarker` dans la réponse précédente.
+ Configurez la valeur de `version-id-marker` sur l’ID de version renvoyé dans `NextVersionIdMarker` dans la réponse précédente.
+ Envoyez une demande `GET Bucket versions` avec `key-marker` et `version-id-marker`.

**Example — Récupération des objets commençant par une clé et un ID de version spécifiés**  

```
1. GET /?versions&key-marker=myObject&version-id-marker=298459348571 HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

## À l'aide du AWS CLI
<a name="list-obj-version-enabled-bucket-cli"></a>

La commande suivante renvoie des métadonnées relatives à toutes les versions des objets contenus dans un compartiment. 

```
aws s3api list-object-versions --bucket amzn-s3-demo-bucket1
```

Pour plus d’informations sur `list-object-versions`, consultez [https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html) dans la *Référence des commandes de l’AWS CLI *.

# Récupération de versions d’objets à partir d’un compartiment activé pour la gestion des versions
<a name="RetrievingObjectVersions"></a>

La gestion des versions dans Simple Storage Service (Amazon S3) est un moyen de conserver plusieurs variantes d’un objet dans le même compartiment. Une simple demande `GET` récupère la version actuelle d’un objet. Le schéma suivant montre comment une demande `GET` renvoie la version actuelle de l’objet, `photo.gif`.

![\[Illustration montrant comment GET renvoie la version actuelle de l’objet.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_GET_NoVersionID.png)


Pour récupérer une version spécifique, vous devez spécifier son ID de version. Le schéma suivant montre qu’une demande `GET versionId` récupère la version spécifiée de l’objet (pas nécessairement la version actuelle).

![\[Illustration montrant comment une demande GET versionId récupère la version spécifiée de l’objet.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_GET_Versioned.png)


Vous pouvez récupérer des versions d'objets dans Amazon S3 à l'aide de la console ou de l'API REST. AWS SDKs

**Note**  
 Pour accéder aux versions d'objets antérieures à 300 versions, vous devez utiliser la AWS CLI ou l'URL de l'objet.

## Utilisation de la console S3
<a name="retrieving-object-versions"></a>

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans la liste **Buckets** (Compartiments), choisissez le nom du compartiment qui contient l'objet.

1. Dans la liste **Objets**, choisissez le nom de l’objet.

1. Choisissez **Versions**.

   Amazon S3 affiche toutes les versions de l’objet.

1. Sélectionnez la case à cocher en regard de l’**ID de version** des versions que vous souhaitez récupérer.

1. Choisissez **Actions**, choisissez **Télécharger**et enregistrez l’objet.

Vous pouvez également afficher, télécharger et supprimer les versions d’un objet dans le panneau de présentation de l’objet. Pour de plus amples informations, veuillez consulter [Affichage des propriétés d’un objet dans la console Amazon S3](view-object-properties.md).

**Important**  
Vous pouvez annuler la suppression d'un objet uniquement si celui-ci a été supprimé en tant que version la plus récente (version actuelle). Vous ne pouvez pas restaurer une version précédente d’un objet supprimé. Pour de plus amples informations, veuillez consulter [Conservation de plusieurs versions d’objets grâce à la gestion des versions S3](Versioning.md).

## À l'aide du AWS SDKs
<a name="retrieve-obj-version-sdks"></a>

Les exemples de chargement d’objets dans des compartiments non versionnés et activés pour la gestion des versions sont les mêmes. Toutefois, pour les compartiments activés pour la gestion des versions, Simple Storage Service (Amazon S3) attribue un numéro de version. Sinon, le numéro de version est null.

Pour des exemples de téléchargement d'objets à AWS SDKs l'aide de Java, .NET et PHP, consultez la section [Téléchargement d'objets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html).

Pour des exemples de liste des versions d'objets utilisés AWS SDKs pour .NET et Rust, consultez [Répertorier la version des objets dans un compartiment Amazon S3](https://docs.aws.amazon.com/code-library/latest/ug/s3_example_s3_ListObjectVersions_section.html).

## Utilisation de l'API REST
<a name="retrieve-obj-version-rest"></a>

**Pour récupérer une version d’objet spécifique**

1. Configurez la valeur `versionId` sur l’ID de la version de l’objet que vous souhaitez récupérer.

1. Envoyez une demande `GET Object versionId`.

**Example Récupération d’un objet soumis à la gestion des versions**  
La demande suivante récupère la version `L4kqtJlcpXroDTDmpUMLUo` de `my-image.jpg`.  

```
1. GET /my-image.jpg?versionId=L4kqtJlcpXroDTDmpUMLUo HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Seules les métadonnées d’un objet peuvent être récupérées, et pas son contenu. Pour plus d'informations, consultez [Récupération des métadonnées d’une version d’objet](RetMetaOfObjVersion.md).

Pour plus d’informations sur la restauration d’une version d’objet précédente, consultez [Restauration des versions précédentes](RestoringPreviousVersions.md).

# Récupération des métadonnées d’une version d’objet
<a name="RetMetaOfObjVersion"></a>

Si vous souhaitez uniquement récupérer les métadonnées d’un objet (et pas son contenu), vous utilisez l’opération `HEAD`. Par défaut, vous obtenez les métadonnées de la version la plus récente. Pour récupérer les métadonnées d’une version d’objet spécifique, vous spécifiez son ID de version.

**Pour récupérer les métadonnées d’une version d’objet**

1. Configurez la valeur `versionId` sur l’ID de la version de l’objet dont vous souhaitez récupérer les métadonnées.

1. Envoyez une demande `HEAD Object versionId`.

**Example — Récupération des métadonnées d’un objet soumis à la gestion des versions**  
La requête suivante récupère les métadonnées de la version `3HL4kqCxf3vjVBH40Nrjfkd` de `my-image.jpg`.  

```
1. HEAD /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Voici un exemple de réponse.

```
 1. HTTP/1.1 200 OK
 2. x-amz-id-2: ef8yU9AS1ed4OpIszj7UDNEHGran
 3. x-amz-request-id: 318BC8BC143432E5
 4. x-amz-version-id: 3HL4kqtJlcpXroDTDmjVBH40Nrjfkd
 5. Date: Wed, 28 Oct 2009 22:32:00 GMT
 6. Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT
 7. ETag: "fba9dede5f27731c9771645a39863328"
 8. Content-Length: 434234
 9. Content-Type: text/plain
10. Connection: close
11. Server: AmazonS3
```

# Restauration des versions précédentes
<a name="RestoringPreviousVersions"></a>

Vous pouvez utiliser la gestion des versions pour récupérer les versions précédentes d’un objet. Pour ce faire, deux approches sont possibles :
+ La copie d’une version précédente de l’objet dans le même compartiment.

  L’objet copié devient la version actuelle de cet objet et toutes les versions d’objet sont préservées.
+ La suppression définitive de la version actuelle de l’objet.

  Lorsque vous supprimez la version d’objet actuelle, vous transformez la version précédente en version actuelle de cet objet.

Etant donné que toutes les versions d’objet sont préservées, vous pouvez réaliser une version antérieure à la version actuelle en copiant une version spécifique de l’objet dans le même compartiment. Dans le schéma suivant, l’objet source (ID = 111111) est copié dans le même compartiment. Amazon S3 fournit un nouvel ID (88778877) qui devient la version actuelle de l’objet. Le compartiment possède donc la version d’objet originale (111111) et sa copie (88778877). Pour plus d’informations sur l’obtention d’une version précédente, puis son chargement pour en faire la version actuelle, consultez [Récupération des versions d’objets à partir d’un compartiment activé pour la gestion des versions](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RetrievingObjectVersions.html) et [Chargement d’objets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html).

![\[Illustration de la copie d’une version spécifique d’un objet dans le même compartiment pour en faire la version actuelle.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_COPY2.png)


Une version ultérieure `GET` récupère la version 88778877.

Le schéma suivant illustre comment la suppression de la version actuelle (121212) d’un objet permet à la version précédente (111111) de devenir l’objet actuel. Pour plus d’informations sur la suppression d’un objet, consultez [Suppression d’un objet unique](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html).

![\[Illustration montrant comment la suppression de la version actuelle d’un objet laisse la version précédente devenir l’objet actuel.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_COPY_delete2.png)


Une version ultérieure `GET` récupère la version 111111.

**Note**  
Pour restaurer des versions d’objets par lots, vous pouvez [utiliser l’opération `CopyObject`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html). L’opération `CopyObject` copie chaque objet spécifié dans le manifeste. Cependant, sachez que les objets ne sont pas nécessairement copiés dans le même ordre que celui dans lequel ils apparaissent dans le manifeste. Pour les compartiments activés pour la gestion des versions, si la préservation de l’ordre des versions actuelles ou anciennes est importante, vous devez d’abord copier toutes les anciennes versions. Ensuite, une fois la première tâche terminée, copiez les versions actuelles dans une tâche ultérieure.

## Pour restaurer les versions d’objets précédentes
<a name="restoring-obj-version-version-enabled-bucket-examples"></a>

Pour plus d'informations sur la restauration d'objets supprimés, consultez [Comment puis-je récupérer un objet Amazon S3 qui a été supprimé dans un compartiment activé pour la gestion des versions ?](https://repost.aws/knowledge-center/s3-undelete-configuration) dans le AWS re:Post Knowledge Center.

### Utilisation de la console S3
<a name="retrieving-object-versions"></a>

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans la liste **Buckets** (Compartiments), choisissez le nom du compartiment qui contient l'objet.

1. Dans la liste **Objets**, choisissez le nom de l’objet.

1. Choisissez **Versions**.

   Amazon S3 affiche toutes les versions de l’objet.

1. Sélectionnez la case à cocher en regard de l’**ID de version** des versions que vous souhaitez récupérer.

1. Choisissez **Actions**, choisissez **Télécharger**et enregistrez l’objet.

Vous pouvez également afficher, télécharger et supprimer les versions d’un objet dans le panneau de présentation de l’objet. Pour de plus amples informations, veuillez consulter [Affichage des propriétés d’un objet dans la console Amazon S3](view-object-properties.md).

**Important**  
Vous pouvez annuler la suppression d'un objet uniquement si celui-ci a été supprimé en tant que version la plus récente (version actuelle). Vous ne pouvez pas restaurer une version précédente d’un objet supprimé. Pour de plus amples informations, veuillez consulter [Conservation de plusieurs versions d’objets grâce à la gestion des versions S3](Versioning.md).

### À l'aide du AWS SDKs
<a name="restoring-obj-version-version-enabled-bucket-sdks"></a>

Pour plus d'informations sur l'utilisation des autres AWS SDKs, consultez le [AWS Developer Center](https://aws.amazon.com/code/). 

------
#### [ Python ]

L’exemple de code Python suivant restaure la version précédente d’un objet versionné en supprimant toutes les versions qui sont apparues après la version de restauration spécifiée.

```
def rollback_object(bucket, object_key, version_id):
    """
    Rolls back an object to an earlier version by deleting all versions that
    occurred after the specified rollback version.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that holds the object to roll back.
    :param object_key: The object to roll back.
    :param version_id: The version ID to roll back to.
    """
    # Versions must be sorted by last_modified date because delete markers are
    # at the end of the list even when they are interspersed in time.
    versions = sorted(
        bucket.object_versions.filter(Prefix=object_key),
        key=attrgetter("last_modified"),
        reverse=True,
    )

    logger.debug(
        "Got versions:\n%s",
        "\n".join(
            [
                f"\t{version.version_id}, last modified {version.last_modified}"
                for version in versions
            ]
        ),
    )

    if version_id in [ver.version_id for ver in versions]:
        print(f"Rolling back to version {version_id}")
        for version in versions:
            if version.version_id != version_id:
                version.delete()
                print(f"Deleted version {version.version_id}")
            else:
                break

        print(f"Active version is now {bucket.Object(object_key).version_id}")
    else:
        raise KeyError(
            f"{version_id} was not found in the list of versions for " f"{object_key}."
        )
```

------

# Suppression des versions d’objet d’un compartiment activé pour la gestion des versions
<a name="DeletingObjectVersions"></a>

Vous pouvez supprimer des versions d’objets des compartiments Amazon S3 quand vous le souhaitez. Vous pouvez également définir des règles de configuration du cycle de vie pour les objets qui possèdent un cycle de vie bien défini pour demander à Amazon S3 d’expirer les versions d’objet actuelles ou de supprimer définitivement les anciennes versions d’objet. Lorsque la gestion des versions est activée ou suspendue pour un compartiment, les actions de la configuration du cycle de vie fonctionnent comme suit :
+ L’action `Expiration` s’applique à la version actuelle de l’objet. Au lieu de supprimer la version actuelle de l’objet, Amazon S3 la conserve en tant que version ancienne en ajoutant un *marqueur de suppression*, qui devient ensuite la version actuelle.
+ L’action `NoncurrentVersionExpiration` s’applique aux anciennes versions d’objet, et Amazon S3 les supprime définitivement. Vous ne pouvez pas récupérer définitivement les objets supprimés.

Pour plus d’informations sur le cycle de vie S3, consultez [Gestion du cycle de vie des objets](object-lifecycle-mgmt.md) et [Exemples de configurations du cycle de vie S3](lifecycle-configuration-examples.md).

Pour connaître le nombre de versions actuelles et anciennes des objets de vos compartiments, vous pouvez utiliser les métriques Amazon S3 Storage Lens. S3 Storage Lens est une fonction d'analyse du stockage dans le cloud que vous pouvez utiliser pour obtenir une visibilité à l'échelle de l'organisation sur l'utilisation et l'activité du stockage d'objets. Pour plus d’informations, consultez [Using S3 Storage Lens to optimize your storage costs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-optimize-storage.html?icmpid=docs_s3_user_guide_DeletingObjectVersions.html) (Utilisation de S3 Storage Lens pour optimiser vos coûts de stockage). Pour obtenir la liste complète des métriques, consultez le [Glossaire des métriques S3 Storage Lens](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_replication.html).

**Note**  
 Les tarifs Amazon S3 normaux s’appliquent pour chaque version d’un objet stockée et transférée, y compris les versions non actuelles de l’objet. Pour plus d’informations, consultez [Tarification Amazon S3](https://aws.amazon.com/s3/pricing/). 

## Supprimer les cas d’utilisation de demandes
<a name="delete-request-use-cases"></a>

Une demande `DELETE` possède les cas d’utilisation suivants :
+ Lorsque la gestion des versions est activée, une simple demande `DELETE` ne peut pas supprimer définitivement un objet. (Une demande `DELETE` simple est une demande qui ne spécifie pas d’ID de version.) À la place, Amazon S3 insère un marqueur de suppression dans le compartiment qui devient la version actuelle de l’objet avec un nouvel ID. 

  Lorsque vous essayez de faire une demande `GET` sur un objet dont la version actuelle est un marqueur de suppression, Amazon S3 se comporte comme si l’objet avait été supprimé (même si ce n’est pas le cas) et renvoie une erreur 404. Pour plus d’informations, consultez [Utilisation des marqueurs de suppression](DeleteMarker.md).

  Le schéma suivant montre qu’une simple demande `DELETE` ne supprime pas réellement l’objet spécifié. Au lieu de cela, Amazon S3 insère un marqueur de suppression.  
![\[Illustration de l’insertion d’un marqueur de suppression.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png)
+ Pour supprimer définitivement les objets soumis à la gestion des versions, vous devez utiliser `DELETE Object versionId`.

  Le schéma suivant montre que la suppression d’un objet spécifié supprime définitivement cet objet.  
![\[Schéma qui montre comment DELETE Object versionId supprime définitivement une version d’objet spécifique.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)

## Pour supprimer des versions d’un objet
<a name="delete-object-version"></a>

Vous pouvez supprimer des versions d'objets dans Amazon S3 à l'aide de la console AWS SDKs, de l'API REST ou du AWS Command Line Interface.

### Utilisation de la console S3
<a name="deleting-object-versions"></a>

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans la liste **Buckets** (Compartiments), choisissez le nom du compartiment qui contient l'objet.

1. Dans la liste **Objets**, choisissez le nom de l’objet.

1. Choisissez **Versions**.

   Amazon S3 affiche toutes les versions de l'objet.

1. Sélectionnez la case à cocher en regard de l’**ID de version** des versions que vous supprimer définitivement.

1. Choisissez **Supprimer**.

1. Dans **Supprimer définitivement les objets ?**, saisissez **permanently delete**.
**Avertissement**  
Lorsque vous supprimez définitivement une version d’objet, l’action ne peut pas être annulée.

1. Choisissez **Supprimer les objets**.

   Amazon S3 supprime la version de l’objet.

### À l'aide du AWS SDKs
<a name="delete-obj-version-version-enabled-bucket-sdks"></a>

Pour des exemples de suppression d'objets à AWS SDKs l'aide de Java, .NET et PHP, consultez[Suppression d’objets Amazon S3](DeletingObjects.md). Les exemples de suppression d’objets dans des compartiments non versionnés et activés pour la gestion des versions sont les mêmes. Toutefois, pour les compartiments activés pour la gestion des versions, Simple Storage Service (Amazon S3) attribue un numéro de version. Sinon, le numéro de version est null. 

Pour plus d'informations sur l'utilisation des autres AWS SDKs, consultez le [AWS Developer Center](https://aws.amazon.com/code/). 

------
#### [ Python ]

L’exemple de code Python suivant supprime définitivement un objet assorti d’une gestion des versions en supprimant toutes ses versions.

```
def permanently_delete_object(bucket, object_key):
    """
    Permanently deletes a versioned object by deleting all of its versions.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that contains the object.
    :param object_key: The object to delete.
    """
    try:
        bucket.object_versions.filter(Prefix=object_key).delete()
        logger.info("Permanently deleted all versions of object %s.", object_key)
    except ClientError:
        logger.exception("Couldn't delete all versions of %s.", object_key)
        raise
```

------

### Utilisation de l'API REST
<a name="delete-obj-version-enabled-bucket-rest"></a>

**Pour supprimer une version spécifique d’un objet**
+ Dans une demande `DELETE`, spécifiez un ID de version.

**Example — Suppression d’une version spécifique**  
L’exemple suivant supprime la version `UIORUnfnd89493jJFJ` de `photo.gif`.  

```
1. DELETE /photo.gif?versionId=UIORUnfnd89493jJFJ HTTP/1.1 
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 12 Oct 2009 17:50:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=
5. Content-Type: text/plain
6. Content-Length: 0
```

### À l'aide du AWS CLI
<a name="delete-obj-version-enabled-bucket-cli"></a>

La commande suivante supprime un objet nommé test.txt d’un compartiment nommé `amzn-s3-demo-bucket1`. Pour supprimer une version spécifique d’un objet, vous devez être le propriétaire du compartiment et vous devez utiliser la sous-ressource d’ID de version.

```
aws s3api delete-object --bucket amzn-s3-demo-bucket1 --key test.txt --version-id versionID
```

Pour plus d’informations sur `delete-object`, consultez [https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) dans la *Référence des commandes de l’AWS CLI *.

Pour plus d’informations sur la suppression des versions d’objet, consultez ces rubriques :
+ [Utilisation des marqueurs de suppression](DeleteMarker.md)
+ [Suppression des marqueurs de suppression pour rendre une version plus ancienne à jour](ManagingDelMarkers.md#RemDelMarker)
+ [Suppression d’un objet à partir d’un compartiment activé pour la fonction Supprimer MFA](UsingMFADelete.md)

# Utilisation des marqueurs de suppression
<a name="DeleteMarker"></a>

Dans Amazon S3, un *marqueur de suppression* désigne un espace réservé (ou marqueur) pour un objet soumis à la gestion des versions qui a été spécifié dans une demande `DELETE` simple. Une demande `DELETE` simple est une demande qui ne spécifie pas d’ID de version. Étant donné que l’objet était dans un compartiment activé pour la gestion des versions, il n’a pas été supprimé. Toutefois, à cause du marqueur de suppression, Amazon S3 se comporte comme si l’objet est supprimé. Vous pouvez utiliser un appel `DELETE` d’API Amazon S3 sur un marqueur de suppression. Pour ce faire, vous devez effectuer la `DELETE` demande en utilisant un utilisateur ou un rôle Gestion des identités et des accès AWS (IAM) doté des autorisations appropriées.

Un marqueur de suppression possède un *nom de clé* (ou *clé*) et un ID de version comme tout autre objet. Toutefois, un marqueur de suppression diffère des autres objets des manières suivantes :
+ Un marqueur de suppression n’a pas de données qui lui sont associées.
+ Un marqueur de suppression n’est associé à aucune valeur de liste de contrôle d’accès (ACL).
+ Si vous émettez une demande `GET` pour un marqueur de suppression, la demande `GET` ne récupère rien, car le marqueur de suppression ne contient aucune donnée. Plus précisément, lorsque votre demande `GET` ne spécifie pas de `versionId`, vous obtenez une erreur 404 (Introuvable).

Les marqueurs de suppression accumulent une charge minimale pour le stockage dans Amazon S3. La taille de stockage d’un marqueur de suppression est égale à la taille du nom de clé du marqueur de suppression. Un nom de clé est une séquence de caractères Unicode. L’encodage UTF-8 du nom de clé ajoute 1 à 4 octets de stockage à votre compartiment pour chaque caractère dans le nom. Les marqueurs de suppression sont stockés dans la classe de stockage S3 standard. 

Si vous souhaitez connaître le nombre de marqueurs de suppression dont vous disposez et la classe de stockage dans laquelle ils sont stockés, vous pouvez utiliser Amazon S3 Storage Lens. Pour plus d’informations, consultez [Surveillance de votre activité et de votre utilisation du stockage avec Amazon S3 Storage Lens](storage_lens.md) et [Glossaire des métriques Amazon S3 Storage Lens](storage_lens_metrics_glossary.md).

Pour en savoir plus sur les noms de clé, consultez [Attribution d’un nom aux objets Amazon S3](object-keys.md). Pour plus d’informations sur le marqueur de suppression, consultez [Gestion des marqueurs de suppression](ManagingDelMarkers.md). 

Seul Simple Storage Service (Amazon S3) peut créer un marqueur de suppression, et il le fait dès que vous envoyez une demande `DeleteObject` sur un objet dans un compartiment activé ou désactivé pour la gestion des versions. L’objet spécifié dans la demande `DELETE` n’est pas réellement supprimé. A la place, le marqueur de suppression devient la version actuelle de l’objet. Le nom de clé de l’objet (ou clé) devient la clé du marqueur de suppression. 

Quand vous obtenez un objet sans spécifier de `versionId` dans votre demande, si sa version actuelle est un marqueur de suppression, Amazon S3 fournit les réponses suivantes :
+ Une erreur 404 (Introuvable)
+ En-tête de réponse, `x-amz-delete-marker: true`

Quand vous obtenez un objet en spécifiant un `versionId` dans votre demande, si la version actuelle est un marqueur de suppression, Amazon S3 fournit les réponses suivantes :
+ Une erreur 405 (méthode non autorisée)
+ En-tête de réponse, `x-amz-delete-marker: true`
+ Un en-tête de réponse `Last-Modified: timestamp` (uniquement lors de l'utilisation des opérations [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)ou de [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)l'API)

L’en-tête de réponse `x-amz-delete-marker: true` vous indique que l’objet consulté était un marqueur de suppression. Cet en-tête de réponse ne renvoie jamais `false`, car lorsque la valeur est `false`, la version actuelle ou spécifiée de l’objet n’est pas un marqueur de suppression.

L’en-tête de réponse `Last-Modified` indique l’heure de création des marqueurs de suppression.

La figure suivante montre comment un appel d’API `GetObject` sur un objet dont la version actuelle est un marqueur de suppression répond avec une erreur 404 (Introuvable) et avec un en-tête de réponse incluant `x-amz-delete-marker: true`.

![\[Illustration qui montre un appel GetObject pour un marqueur de suppression renvoyant une erreur 404 (Introuvable).\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound.png)


Si vous effectuez un appel `GetObject` sur un objet en spécifiant un `versionId` dans votre demande, et si la version spécifiée est un marqueur de suppression, Amazon S3 répond avec une erreur 405 (Méthode non autorisée) et les en-têtes de réponse incluent `x-amz-delete-marker: true` et `Last-Modified: timestamp`.

![\[Illustration d’un appel GetObject pour un marqueur de suppression renvoyant une erreur 405 (Méthode non autorisée).\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound_405.png)


Même s’ils sont remplacés, les marqueurs de suppression restent dans les versions de vos objets. Le seul moyen de répertorier des marqueurs de suppression (et d’autres versions d’un objet) est d’utiliser une demande [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html). Vous pouvez faire cette demande dans la AWS Management Console en répertoriant vos objets dans un compartiment à usage général et en sélectionnant **Afficher les versions**. Pour de plus amples informations, veuillez consulter [Liste d’objets dans un compartiment activé pour la gestion des versions](list-obj-version-enabled-bucket.md).

La figure suivante montre qu’une demande [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) ou [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html) ne renvoie pas d’objets dont la version actuelle est un marqueur de suppression.

![\[Illustration montrant comment un appel ListObjectsV2 ou ListObjects ne renvoie aucun marqueur de suppression.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_GETBucketwithDeleteMarkers.png)


# Gestion des marqueurs de suppression
<a name="ManagingDelMarkers"></a>

## Configuration du cycle de vie pour nettoyer automatiquement les marqueurs de suppression expirés
<a name="LifecycleDelMarker"></a>

Un marqueur de suppression d’objet expiré est un marqueur dans lequel toutes les versions d’objet sont supprimées et où il ne reste qu’un seul marqueur de suppression. Si la configuration de cycle de vie est définie pour supprimer les versions actuelles, ou si l’action `ExpiredObjectDeleteMarker` est explicitement définie, Amazon S3 supprime le marqueur de suppression de l’objet expiré. Pour obtenir un exemple, consultez [Suppression des marqueurs de suppression des objets expirés dans un compartiment avec gestion des versions](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7). 

## Suppression des marqueurs de suppression pour rendre une version plus ancienne à jour
<a name="RemDelMarker"></a>

Lorsque vous supprimez un objet d’un compartiment activé pour la gestion des versions, toutes les versions restent dans le compartiment et Simple Storage Service (Amazon S3) crée un marqueur de suppression pour l’objet. Pour annuler la suppression de l’objet, vous devez supprimer ce marqueur de suppression. Pour plus d’informations sur la gestion des versions et les marqueurs de suppression, consultez [Conservation de plusieurs versions d’objets grâce à la gestion des versions S3](Versioning.md).

Pour supprimer un marqueur de suppression définitivement, vous devez inclure son ID de version dans une demande `DeleteObject versionId`. Le schéma suivant montre comment une demande `DeleteObject versionId` supprime définitivement un marqueur de suppression.

![\[Illustration de la suppression d’un marqueur de suppression à l’aide de son ID de version.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_deleteMarkerVersioned.png)


Suite à la suppression du marqueur de suppression, une simple demande `GET` récupère désormais l’ID de version actuelle (121212) de l’objet. 

**Note**  
Si vous utilisez une demande `DeleteObject` où la version actuelle est un marqueur de suppression (sans spécifier l’ID de version du marqueur de suppression), Amazon S3 ne supprime pas le marqueur de suppression, mais à la place, `PUTs` un autre marqueur de suppression.

Pour supprimer un marqueur de suppression avec un ID de version `NULL`, vous devez transmettre l’ID de version `NULL` comme ID de version dans la demande `DeleteObject`. La figure suivante illustre comment un demande `DeleteObject` adressée sans ID de version, où la version actuelle est un marqueur de suppression, ne supprime rien, mais ajoute à la place un marqueur de suppression supplémentaire avec un ID de version unique (7498372).

![\[Illustration de la suppression d’un marqueur de suppression à l’aide d’un ID de version NULL.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_deleteMarker.png)


## Utilisation de la console S3
<a name="undelete-objects"></a>

Suivez ces étapes pour récupérer des objets supprimés qui ne sont pas des dossiers de votre compartiment S3, y compris les objets qui se trouvent dans ces dossiers. 

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans la liste **Buckets (Compartiments)**, choisissez le nom du compartiment que vous souhaitez.

1. Pour afficher la liste des **versions** des objets du compartiment, choisissez le commutateur **Répertorier les versions**. Vous pourrez voir les marqueurs de suppression pour les objets supprimés. 

   

1. Pour annuler la suppression d’un objet, vous devez supprimer le marqueur de suppression. Cochez la case en regard du **marqueur de suppression** de l’objet à récupérer, puis choisissez **Delete (Supprimer)**.

1. Confirmez la suppression sur la page **Delete objects (Supprimer les objets)**.

   1. Pour **Permanently delete objects?** (Supprimer définitivement des objets ?), saisissez **permanently delete**.

   1. Choisissez **Supprimer les objets**.

**Note**  
Vous ne pouvez pas utiliser la console Amazon S3 pour restaurer des dossiers. Vous devez utiliser le AWS CLI ou le SDK. Pour des exemples, consultez [Comment récupérer un objet Simple Storage Service (Amazon S3) supprimé d’un compartiment activé pour la gestion des versions ?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-undelete-configuration/) dans le Centre de connaissances  AWS .

## Utilisation de l'API REST
<a name="delete-marker-rest-api"></a>

**Pour supprimer définitivement un marqueur de suppression**

1. Configurez la valeur `versionId` sur l’ID de la version du marqueur de suppression que vous souhaitez supprimer.

1. Envoyez une demande `DELETE Object versionId`.

**Example — Suppression d’un marqueur de suppression**  
L’exemple suivant supprime le marqueur de suppression pour la version 4857693 `photo.gif`.  

```
1. DELETE /photo.gif?versionId=4857693 HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Lorsque vous supprimez un marqueur de suppression, Amazon S3 inclut les éléments suivants dans la réponse.

```
1. 204 NoContent 
2. x-amz-version-id: versionID 
3. x-amz-delete-marker: true
```

## À l'aide du AWS SDKs
<a name="remove-delete-marker-examples-sdk"></a>

Pour plus d'informations sur l'utilisation des autres AWS SDKs, consultez le [AWS Developer Center](https://aws.amazon.com/code/).

------
#### [ Python ]

L’exemple de code Python suivant montre comment supprimer un marqueur de suppression d’un objet et transformer ainsi la version ancienne la plus récente en la version actuelle de l’objet.

```
def revive_object(bucket, object_key):
    """
    Revives a versioned object that was deleted by removing the object's active
    delete marker.
    A versioned object presents as deleted when its latest version is a delete marker.
    By removing the delete marker, we make the previous version the latest version
    and the object then presents as *not* deleted.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that contains the object.
    :param object_key: The object to revive.
    """
    # Get the latest version for the object.
    response = s3.meta.client.list_object_versions(
        Bucket=bucket.name, Prefix=object_key, MaxKeys=1
    )

    if "DeleteMarkers" in response:
        latest_version = response["DeleteMarkers"][0]
        if latest_version["IsLatest"]:
            logger.info(
                "Object %s was indeed deleted on %s. Let's revive it.",
                object_key,
                latest_version["LastModified"],
            )
            obj = bucket.Object(object_key)
            obj.Version(latest_version["VersionId"]).delete()
            logger.info(
                "Revived %s, active version is now %s  with body '%s'",
                object_key,
                obj.version_id,
                obj.get()["Body"].read(),
            )
        else:
            logger.warning(
                "Delete marker is not the latest version for %s!", object_key
            )
    elif "Versions" in response:
        logger.warning("Got an active version for %s, nothing to do.", object_key)
    else:
        logger.error("Couldn't get any version info for %s.", object_key)
```

------

# Suppression d’un objet à partir d’un compartiment activé pour la fonction Supprimer MFA
<a name="UsingMFADelete"></a>

Lorsque vous configurez la suppression MFA, seul l’utilisateur racine peut supprimer définitivement les versions des objets ou modifier la configuration de gestion des versions sur le compartiment S3. Vous devez utiliser un dispositif MFA pour authentifier l’utilisateur racine afin d’effectuer l’action de suppression.

Si la fonction Supprimer MFA est activée dans la configuration de la gestion des versions d’un compartiment, le propriétaire du compartiment doit inclure l’en-tête de la demande `x-amz-mfa` dans les demandes pour supprimer définitivement une version d’objet ou modifier l’état de la gestion des versions du compartiment. Les demandes qui incluent `x-amz-mfa` doivent utiliser HTTPS.

La valeur de l’en-tête est la concaténation du numéro de série du périphérique d’authentification, un espace et le code d’authentification affiché dessus. Si vous n’incluez pas cet en-tête de la demande, cette dernière échoue.

Lorsque vous utilisez le, AWS CLI incluez les mêmes informations que la valeur du `mfa` paramètre.

Pour en savoir plus sur les périphériques d’authentification, consultez [Authentification multifacteur](https://aws.amazon.com/iam/details/mfa/).

Pour en savoir plus sur l’activation de la fonction Supprimer MFA, consultez [Configuration de la fonction Supprimer MFA](MultiFactorAuthenticationDelete.md).

**Note**  
La suppression d’un objet dans un compartiment activé pour la gestion des versions et pour la fonction de suppression de MFA n’est pas disponible via la AWS Management Console.

## À l'aide du AWS CLI
<a name="MFADeleteCLI"></a>

Pour supprimer un objet dans un compartiment activé pour la gestion des versions et pour la fonction de suppression de MFA, utilisez la commande suivante. Lorsque vous utilisez l’exemple de commande suivant, remplacez les `user input placeholders` par vos propres informations.

```
 aws s3api delete-object --bucket amzn-s3-demo-bucket --key OBJECT-KEY --version-id "VERSION ID" --mfa "MFA_DEVICE_SERIAL_NUMBER MFA_DEVICE_CODE"						
```

## Utilisation de l'API REST
<a name="MFADeleteAPI"></a>

L’exemple suivant montre comment supprimer `my-image.jpg` (avec la version spécifiée), qui se trouve dans un compartiment où la fonction Suppression MFA est activée. 

Pour plus d’informations, consultez [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html) dans la Référence des API Amazon Simple Storage Service

```
1. DELETE /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTPS/1.1
2. Host: bucketName.s3.amazonaws.com
3. x-amz-mfa: 20899872 301749
4. Date: Wed, 28 Oct 2009 22:32:00 GMT
5. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

# Configuration des autorisations d’objet soumis à la gestion des versions
<a name="VersionedObjectPermissionsandACLs"></a>

Les autorisations pour les objets dans Amazon S3 sont définies au niveau de la version. Chaque version est dotée de son propre propriétaire d’objet. Celui Compte AWS qui crée la version de l'objet est le propriétaire. Vous pouvez donc configurer différentes autorisations pour différentes versions du même objet. Pour ce faire, vous devez spécifier l’ID de version de l’objet dont vous souhaitez configurer les autorisations dans une demande `PUT Object versionId acl`. Pour une description détaillée et des instructions d'utilisation ACLs, voir[Gestion des identités et des accès pour Amazon S3](security-iam.md).

**Example — Configuration des autorisations pour une version d’objet**  
La demande suivante définit l'autorisation du bénéficiaire avec un ID utilisateur canonique*b4bf1b36f9716f094c3079dcf5ac9982d4f2847de46204d47448bc557fb5ac2a*, `FULL_CONTROL` sur la clé, ID de version`my-image.jpg`,. `3HL4kqtJvjVBH40Nrjfkd`  

```
 1. PUT /my-image.jpg?acl&versionId=3HL4kqtJvjVBH40Nrjfkd HTTP/1.1
 2. Host: bucket.s3.amazonaws.com
 3. Date: Wed, 28 Oct 2009 22:32:00 GMT
 4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
 5. Content-Length: 124
 6.  
 7. <AccessControlPolicy>
 8.   <Owner>
 9.     <ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
10.   </Owner>
11.   <AccessControlList>
12.     <Grant>
13.       <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
14.         <ID>a9a7b886d6fd24a52fe8ca5bef65f89a64e0193f23000e241bf9b1c61be666e9</ID>
15.       </Grantee>
16.       <Permission>FULL_CONTROL</Permission>
17.     </Grant>
18.   </AccessControlList>
19.   </AccessControlPolicy>
```

De la même façon, pour obtenir les autorisations d’une version d’objet spécifique, vous devez spécifier son ID de version dans une demande `GET Object versionId acl`. Vous devez inclure l’ID de version car, par défaut, la demande `GET Object acl` renvoie les autorisations de la version actuelle de l’objet. 

**Example — Récupération des autorisations pour une version d’objet spécifique**  
Dans l’exemple suivant, Amazon S3 renvoie les autorisations pour la clé, `my-image.jpg`, l’ID de version, `DVBH40Nr8X8gUMLUo`.  

```
1. GET /my-image.jpg?versionId=DVBH40Nr8X8gUMLUo&acl HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU
```

Pour plus d’informations, consultez [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html) dans la *Référence d’API Amazon Simple Storage Service*.

# Utilisation des objets dans un compartiment désactivé pour la gestion des versions
<a name="VersionSuspendedBehavior"></a>

Dans Simple Storage Service (Amazon S3), vous pouvez désactiver la gestion des versions pour stopper l’accumulation de nouvelles versions du même objet dans un compartiment. Vous pouvez le faire car vous ne souhaitez qu’une seule version d’un objet dans un compartiment. Ou, vous ne voudrez peut-être pas accumuler de frais pour plusieurs versions. 

Lorsque vous désactivez la gestion des versions, les objets existants du compartiment ne changent pas. Seule la façon dont Amazon S3 gère les objets dans les futures demandes change. Les rubriques de cette section expliquent les diverses opérations d’objet dans un compartiment dont la gestion des versions est désactivée, notamment l’ajout, la récupération et la suppression des objets.

Pour plus d’informations sur la gestion des versions S3, consultez [Conservation de plusieurs versions d’objets grâce à la gestion des versions S3](Versioning.md). Pour plus d’informations sur la récupération des versions d’objet, consultez [Récupération de versions d’objets à partir d’un compartiment activé pour la gestion des versions](RetrievingObjectVersions.md).

**Topics**
+ [Ajout d’objets dans des compartiments désactivés pour la gestion des versions](AddingObjectstoVersionSuspendedBuckets.md)
+ [Récupération d’objets à partir des compartiments désactivés pour la gestion des versions](RetrievingObjectsfromVersioningSuspendedBuckets.md)
+ [Suppression d’objets à partir des compartiments désactivés pour la gestion des versions](DeletingObjectsfromVersioningSuspendedBuckets.md)

# Ajout d’objets dans des compartiments désactivés pour la gestion des versions
<a name="AddingObjectstoVersionSuspendedBuckets"></a>

Vous pouvez ajouter des objets aux compartiments désactivés pour la gestion des versions dans Simple Storage Service (Amazon S3) afin de créer l’objet avec un ID de version null ou bien pour écraser toute version d’objet avec un ID de version correspondant.

Après avoir désactivé la gestion des versions sur un compartiment, Simple Storage Service (Amazon S3) ajoute ensuite automatiquement un ID de version `null` à chaque objet stocké ultérieurement (à l’aide de la demande `PUT`, `POST`, ou `CopyObject`) dans le compartiment.

Le schéma suivant montre comment Amazon S3 ajoute l’ID de version `null` à un objet lorsqu’il est ajouté à un compartiment désactivé pour la gestion des versions.

![\[Graphique de l’ajout par Amazon S3 de l’ID de version null à un objet.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended.png)


Si une version null est déjà dans le compartiment et que vous ajoutez un autre objet avec la même clé, l’objet ajouté remplace la version nulle originale. 

En cas de présence d’objets versionnés dans le compartiment, la version pour laquelle vous faites une demande `PUT` devient la version actuelle de l’objet. Le schéma suivant montre en quoi l’ajout d’un objet à un compartiment qui contient des objets versionnés ne remplace pas l’objet déjà dans le compartiment. 

Dans ce cas, la version 111111 était déjà dans le compartiment. Amazon S3 attache un ID de version null à l’objet en train d’être ajouté et le stocke dans le compartiment. La version 111111 n’est pas remplacée.

![\[Graphique de l’ajout par Amazon S3 de l’ID de version null à un objet sans remplacer la version 111111.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended3.png)


Si une version null existe déjà dans un compartiment, elle est remplacée, comme illustré dans le schéma suivant.

![\[Graphique de l’ajout par Amazon S3 de l’ID de version null à un objet tout en remplaçant le contenu d’origine.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended4.png)


Notez que même si la clé et l’ID de version (`null`) de la version null sont identiques avant et après la demande `PUT`, le contenu de la version null initialement stocké dans le compartiment est remplacé par le contenu de l’objet `PUT` dans le compartiment.

# Récupération d’objets à partir des compartiments désactivés pour la gestion des versions
<a name="RetrievingObjectsfromVersioningSuspendedBuckets"></a>

Une demande `GET Object` renvoie la version actuelle d’un objet que vous ayez activé ou non la gestion des versions sur un compartiment. Le schéma suivant montre comment une simple demande `GET` renvoie la version actuelle d’un objet.

![\[Illustration montrant comment une demande GET simple renvoie la version actuelle d’un objet.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_GET_suspended.png)


# Suppression d’objets à partir des compartiments désactivés pour la gestion des versions
<a name="DeletingObjectsfromVersioningSuspendedBuckets"></a>

Vous pouvez supprimer des objets à partir des compartiments désactivés pour la gestion des versions afin de supprimer un objet ayant un ID de version null.

Si la gestion des versions est suspendue pour un compartiment, une demande `DELETE` :
+ Peut uniquement supprimer un objet dont l’ID de version est `null`.
+ Ne supprime rien s’il n’y a aucune version null de l’objet dans le compartiment.
+ Insère un marqueur de suppression dans le compartiment.

Si la gestion des versions du compartiment est suspendue, l’opération supprime l’objet dont la valeur `versionId` est null. Si un ID de version existe, Amazon S3 insère un marqueur de suppression qui devient la version actuelle de l’objet. La figure suivante montre comment une demande `DELETE` simple supprime une version null et Amazon S3 insère un marqueur de suppression à la place avec un ID de version `null`.

![\[Illustration d’une suppression simple visant à supprimer un objet avec un ID de version NULL.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspended.png)


Pour supprimer définitivement un objet doté d’un `versionId`, vous devez inclure le `versionId` de l’objet dans la demande. Comme un marqueur de suppression ne contient aucun contenu, vous perdez le contenu pour la version `null` lorsqu’un marqueur de suppression la remplace.

Le schéma suivant montre un compartiment qui ne possède pas de version null. Dans ce cas, la commande `DELETE` ne supprime rien. À la place, Amazon S3 insère simplement un marqueur de suppression.

![\[Illustration de l’insertion d’un marqueur de suppression.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspendedNoNull.png)


Même dans un compartiment dont les versions sont suspendues, le propriétaire du compartiment peut supprimer définitivement une version spécifiée en incluant l'ID de version dans la `DELETE` demande, sauf si les autorisations relatives à la `DELETE` demande ont été explicitement refusées. Par exemple, pour refuser la suppression de tout objet doté d'un ID de `null` version, vous devez explicitement refuser les `s3:DeleteObjectVersions` autorisations `s3:DeleteObject` et.

Le schéma suivant montre que la suppression d’un objet spécifié supprime définitivement cette version de l’objet. Seul le propriétaire du compartiment peut supprimer une version d’objet spécifiée.

![\[Illustration de la suppression définitive d’un objet à l’aide d’un ID de version spécifié.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)


# Résolution des problèmes de gestion des versions
<a name="troubleshooting-versioning"></a>

Les rubriques suivantes peuvent vous aider à résoudre des problèmes courants de gestion des versions sur Amazon S3.

**Topics**
+ [Je souhaite récupérer des objets qui ont été supprimés accidentellement dans un compartiment avec la gestion des versions.](#recover-objects)
+ [Je souhaite supprimer définitivement les objets avec la gestion des versions](#delete-objects-permanent)
+ [Je constate une dégradation des performances après avoir activé la gestion des versions sur les compartiments](#performance-degradation)

## Je souhaite récupérer des objets qui ont été supprimés accidentellement dans un compartiment avec la gestion des versions.
<a name="recover-objects"></a>

En général, lorsque des versions d’objets sont supprimées des compartiments S3, Amazon S3 n’a aucun moyen de les récupérer. Toutefois, si vous avez activé la gestion des versions S3 sur votre compartiment S3, une demande `DELETE` qui ne spécifie pas d’ID de version ne peut pas supprimer définitivement un objet. Au lieu de cela, un marqueur de suppression est ajouté en tant qu’espace réservé. Ce marqueur de suppression devient la version actuelle de l’objet. 

Pour vérifier si vos objets supprimés sont définitivement ou temporairement supprimés (avec un marqueur de suppression à leur place), procédez comme suit : 

1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Dans le panneau de navigation de gauche, choisissez **Compartiments**.

1. Dans la liste **Compartiments**, choisissez le nom du compartiment qui contient l’objet.

1. Dans la liste **Objets**, activez le bouton **Afficher les versions** à droite de la barre de recherche, puis recherchez l’objet supprimé dans la barre de recherche. Cette option n’est disponible que si la gestion des versions a précédemment été activée sur le compartiment.

   Vous pouvez également utiliser [S3 Inventory pour rechercher des objets supprimés](storage-inventory.md#storage-inventory-contents).

1. Si vous ne trouvez pas l’objet après avoir activé l’option **Afficher les versions** ou créé un rapport d’inventaire, et que vous ne trouvez pas non plus de [marqueur de suppression](DeleteMarker.md) de l’objet, la suppression est définitive et l’objet ne peut pas être récupéré.



Vous pouvez également vérifier le statut d'un objet supprimé à l'aide de l'opération `HeadObject` API depuis le AWS Command Line Interface (AWS CLI). Pour ce faire, utilisez la commande `head-object` suivante et remplacez `user input placeholders` par vos propres informations : 

`aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html`

Si vous exécutez la commande `head-object` sur un objet avec la gestion des versions dont la version actuelle est un marqueur de suppression, vous recevrez une erreur 404 Introuvable. Par exemple : 

Une erreur s'est produite (404) lors de l'appel de l' HeadObject opération : Introuvable

Si vous exécutez la commande `head-object` sur un objet avec la gestion des versions et que vous fournissez l’ID de version de l’objet, Amazon S3 récupère les métadonnées de l’objet, confirmant ainsi que l’objet existe toujours et qu’il n’est pas supprimé définitivement.

`aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID`

```
{
"AcceptRanges": "bytes",
"ContentType": "text/html",
"LastModified": "Thu, 16 Apr 2015 18:19:14 GMT",
"ContentLength": 77,
"VersionId": "Zg5HyL7m.eZU9iM7AVlJkrqAiE.0UG4q",
"ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
"Metadata": {}
}
```

Si l’objet est trouvé et que la version la plus récente est un marqueur de suppression, la version précédente de l’objet existe toujours. Le marqueur de suppression étant la version actuelle de l’objet, vous pouvez récupérer l’objet en supprimant le marqueur de suppression. 

Une fois que vous avez supprimé définitivement le marqueur de suppression, la deuxième version la plus récente de l’objet devient la version actuelle de l’objet, ce qui rend votre objet à nouveau disponible. Pour une représentation visuelle de la façon dont les objets sont récupérés, consultez [Suppression des marqueurs de suppression](ManagingDelMarkers.md#RemDelMarker).

Pour supprimer une version spécifique d’un objet, vous devez être le propriétaire du compartiment. Pour supprimer un marqueur de suppression définitivement, vous devez inclure son ID de version dans une demande `DeleteObject`. Pour supprimer le marqueur de suppression, utilisez la commande suivante et remplacez `user input placeholders` par vos propres informations : 

****  
`aws s3api delete-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID`

Pour plus d’informations sur la commande `delete-object`, consultez [https://docs.aws.amazon.com//cli/latest/reference/s3api/delete-object.html](https://docs.aws.amazon.com//cli/latest/reference/s3api/delete-object.html) dans la *Référence des commandes de l’AWS CLI *. Pour plus d’informations sur la suppression permanente de marqueurs de suppression, consultez [Gestion des marqueurs de suppression](ManagingDelMarkers.md).

## Je souhaite supprimer définitivement les objets avec la gestion des versions
<a name="delete-objects-permanent"></a>

Dans un compartiment avec la gestion des versions, une demande `DELETE` sans ID de version ne peut pas supprimer de façon permanente un objet. Au lieu de cela, une telle demande insère un marqueur de suppression.

Pour supprimer définitivement des objets avec la gestion des versions, vous pouvez choisir l’une des méthodes suivantes :
+ Créez une règle de cycle de vie S3 pour supprimer définitivement les anciennes versions. Pour supprimer définitivement les versions anciennes d’objets, sous **Supprimer définitivement les anciennes versions des objets**, dans **Jours après lesquels les objets deviennent anciens**, saisissez le nombre de jours. Vous pouvez éventuellement spécifier le nombre de versions plus récentes à conserver en saisissant une valeur sous **Nombre de versions plus récentes à conserver**. Pour plus d’informations sur la création de cette règle, consultez [Setting an S3 Lifecycle configuration](how-to-set-lifecycle-configuration-intro.md) (Définition d’une configuration du cycle de vie S3).
+ Supprimez une version spécifiée en incluant l’ID de version dans la demande `DELETE`. Pour plus d’informations, consultez [How to delete versioned objects permanently](DeletingObjectVersions.md#delete-request-use-cases) (Comment supprimer des objets avec la gestion des versions de façon permanente).
+ Créez une règle de cycle de vie pour faire expirer les versions actuelles. Pour faire expirer les versions actuelles des objets, sous **Expirer les versions actuelles d’objets**, dans **Jours après la création de l’objet**, saisissez le nombre de jours. Pour plus d’informations sur la création de cette règle de cycle de vie, consultez [Setting an S3 Lifecycle configuration](how-to-set-lifecycle-configuration-intro.md) (Définition d’une configuration du cycle de vie S3).
+ Pour supprimer définitivement tous les objets avec la gestion des versions et supprimer les marqueurs, créez deux règles de cycle de vie : l’une pour faire expirer les versions actuelles et supprimer définitivement les versions anciennes des objets, et l’autre pour supprimer les marqueurs de suppression d’objets expirés.

Dans un compartiment avec la gestion des versions, une demande `DELETE` qui ne spécifie pas d’ID de version ne peut supprimer que les objets dotés d’un identifiant de version `NULL`. Si l’objet a été chargé lorsque la gestion des versions était activée, une demande `DELETE` qui ne spécifie pas d’ID de version crée un marqueur de suppression de cet objet.

**Note**  
Pour les compartiments avec le verrouillage des objets S3, une demande d’objet `DELETE` avec un ID de version d’objet protégé provoque une erreur 403 Accès refusé. Une demande d’objet `DELETE` sans ID de version ajoute un marqueur de suppression en tant que version la plus récente de l’objet avec une réponse 200 OK. Les objets protégés par le verrouillage des objets ne peuvent pas être supprimés définitivement tant que leurs périodes de rétention et leurs conservations légales ne sont pas levées. Pour plus d’informations, consultez [Fonctionnement du verrouillage d’objet S3](object-lock.md#object-lock-overview).

## Je constate une dégradation des performances après avoir activé la gestion des versions sur les compartiments
<a name="performance-degradation"></a>

Une dégradation des performances peut se produire sur les compartiments avec la gestion des versions s’il y a trop de marqueurs de suppression ou d’objets avec la gestion des versions et si les meilleures pratiques ne sont pas suivies.

**Marqueurs de suppression trop nombreux**  
Après avoir activé la gestion des versions sur un compartiment, une demande `DELETE` faite à un objet sans ID de version crée un marqueur de suppression avec un ID de version unique. Les configurations de cycle de vie avec une règle **Expirer les versions actuelles d’objets** ajoutent un marqueur de suppression avec un ID de version unique à chaque objet. Un nombre excessif de marqueurs de suppression peut réduire les performances du compartiment.

Lorsque la gestion des versions est suspendue sur un compartiment, Amazon S3 marque l’ID de version comme `NULL` sur les nouveaux objets créés. Dans un compartiment avec la gestion des versions suspendue, l’action d’expiration entraîne la création par Amazon S3 d’un marqueur de suppression avec l’ID de version `NULL`. Dans un compartiment avec la gestion des versions suspendue, un marqueur de suppression `NULL` est créé pour chaque demande de suppression. Ces marqueurs de suppression `NULL` sont également appelés marqueurs de suppression d’objet expiré lorsque toutes les versions d’objet sont supprimées et qu’il ne reste qu’un seul marqueur de suppression. Si trop de marqueurs de suppression `NULL` s’accumulent, les performances du compartiment se dégradent.

**Objets avec la gestion des versions trop nombreux**  
Si un compartiment avec la gestion des versions contient des objets contenant des millions de versions, le nombre d’erreurs 503 Service indisponible peut augmenter. Si vous remarquez une augmentation importante du nombre de réponses HTTP 503 Service indisponible reçues pour des demandes d’objet `PUT` ou `DELETE` vers un compartiment avec la gestion des versions, il est possible qu’un ou plusieurs objets du compartiment aient des millions de versions. Lorsque vous avez des objets avec des millions de versions, Amazon S3 limite automatiquement les demandes vers le compartiment. La limitation des demandes protège votre compartiment d’une quantité excessive de trafic de demandes qui pourrait potentiellement gêner d’autres demandes effectuées auprès du même compartiment. 

Pour déterminer quels objets ont des millions de versions, utilisez S3 Inventory. S3 Inventory génère un rapport qui fournit une liste de fichiers plats des objets d’un compartiment. Pour plus d’informations, consultez [Catalogage et analyse de vos données avec S3 Inventory](storage-inventory.md).

Pour vérifier si le compartiment contient un nombre élevé d’objets avec la gestion des versions, utilisez les métriques de S3 Storage Lens pour afficher **Nombre d’objets de version actuelle** **Nombre d’objets de version ancienne** et **Nombre d’objets marqueur de suppression**. Pour plus d’informations sur les métriques de Storage Lens, consultez [Glossaire des métriques Amazon S3 Storage Lens](storage_lens_metrics_glossary.md).

L’équipe Amazon S3 encourage les clients à examiner les applications qui remplacent souvent le même objet et créent potentiellement des millions de versions de cet objet, afin de déterminer si l’application fonctionne comme prévu. Par exemple, une application qui remplace le même objet toutes les minutes pendant une semaine peut créer plus de dix mille versions. Nous recommandons de stocker moins de cent mille versions pour chaque objet. Si votre cas d'utilisation nécessite des millions de versions pour un ou plusieurs objets, contactez l' AWS Support équipe pour obtenir de l'aide afin de déterminer la meilleure solution.

**Bonnes pratiques**  
Pour éviter les problèmes de dégradation des performances liés à la gestion des versions, nous vous recommandons de suivre les bonnes pratiques suivantes :
+ Activez une règle de cycle de vie pour faire expirer les anciennes versions des objets. Par exemple, vous pouvez créer une règle de cycle de vie pour faire expirer les versions anciennes 30 jours après la fin de la période d’inactivité de l’objet. Vous pouvez également conserver plusieurs anciennes versions si vous ne souhaitez pas toutes les supprimer. Pour plus d’informations, consultez [Setting an S3 Lifecycle configuration](how-to-set-lifecycle-configuration-intro.md) (Définition d’une configuration du cycle de vie S3).
+ Activez une règle de cycle de vie pour supprimer les marqueurs de suppression d’objets expirés auxquels aucun objet de données n’est associé dans le compartiment. Pour plus d’informations, consultez [Suppression des marqueurs de suppression d’objet expiré](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7).

Pour en savoir plus sur les bonnes pratiques d’optimisation des performances d’Amazon S3, consultez [Schémas de conception des bonnes pratiques](optimizing-performance.md).