

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.

# Ajout de conditions préalables aux opérations S3 avec des demandes conditionnelles
<a name="conditional-requests"></a>

Vous pouvez utiliser des demandes conditionnelles pour ajouter des conditions préalables à vos opérations S3. Pour utiliser des demandes conditionnelles, vous devez ajouter un en-tête supplémentaire à votre opération d’API Amazon S3. Cet en-tête spécifie une condition qui, si elle n’est pas remplie, entraînera l’échec de l’opération S3.

Les lectures conditionnelles sont prises en charge pour les demandes `GET`, `HEAD` et `COPY`. Vous pouvez ajouter des conditions préalables pour renvoyer ou copier un objet en fonction de sa balise Entity (ETag) ou de sa date de dernière modification. Cela permet de limiter une opération S3 aux objets mis à jour depuis une date spécifiée. Vous pouvez également limiter une opération S3 à une opération spécifique ETag. Cela permet de garantir que vous ne renvoyez ou ne copiez qu’une version d’objet spécifique. Pour en savoir plus sur les métadonnées d’objet, consultez [Utilisation des métadonnées d’objet](UsingMetadata.md).

Les écritures conditionnelles permettent de garantir qu’aucun objet ne porte le même nom de clé dans votre compartiment pendant les opérations `PUT`. Cela empêche l’écrasement d’objets existants portant des noms de clé identiques. De même, vous pouvez utiliser les écritures conditionnelles pour vérifier si l'objet ETag est inchangé avant de le mettre à jour. Cela permet d’éviter les écrasements involontaires d’un objet sans connaître l’état de son contenu. Vous pouvez utiliser des écritures conditionnelles pour [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html), ou [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)des demandes. Pour en savoir plus sur les noms de clé, consultez [Attribution d’un nom aux objets Amazon S3](object-keys.md).

Les suppressions conditionnelles évaluent si votre objet existe ou s’il n’a pas été modifié avant de le supprimer. Vous pouvez effectuer des suppressions conditionnelles à l'aide des compartiments `DeleteObject` ou `DeleteObjects` APIs à usage général et des compartiments de répertoire. Pour plus d’informations sur les suppressions conditionnelles, consultez [Réalisation de suppressions conditionnelles](conditional-deletes.md). Les lectures, écritures et suppressions conditionnelles n’occasionnent aucun coût supplémentaire. Vous ne payez que les tarifs existants pour les demandes applicables, y compris celles ayant échoué. Pour en savoir plus sur les fonctions et la tarification d’Amazon S3, consultez [Tarification Amazon S3](https://aws.amazon.com/s3/pricing).

**Topics**
+ [

# Comment récupérer ou copier des objets en fonction des métadonnées avec des lectures conditionnelles
](conditional-reads.md)
+ [

# Comment empêcher le remplacement d’objets par des écritures conditionnelles
](conditional-writes.md)
+ [

# Réalisation de suppressions conditionnelles
](conditional-deletes.md)

# Comment récupérer ou copier des objets en fonction des métadonnées avec des lectures conditionnelles
<a name="conditional-reads"></a>

Avec les lectures conditionnelles, vous pouvez inclure un en-tête supplémentaire à votre demande de lecture afin d’ajouter des conditions préalables à votre opération S3. Si ces conditions préalables ne sont pas remplies, la demande de lecture échouera.

Vous pouvez utiliser des lectures conditionnelles au niveau des demandes `GET`, `HEAD` ou `COPY` pour ne renvoyer un objet qu’en fonction de ses métadonnées.

Lorsque vous chargez un objet, Amazon S3 crée des métadonnées contrôlées par le système qui ne peuvent être modifiées que par S3. Les balises d'entité (ETags) et Last-Modified sont des exemples de métadonnées contrôlées par le système. Un objet ETag est une chaîne représentant une version spécifique d'un objet. La date de dernière modification fait partie des métadonnées représentant la date de création ou la date de la dernière modification de l’objet, la date la plus récente étant retenue.

Avec les lectures conditionnelles, vous pouvez renvoyer un objet en fonction de sa date de dernière modification ETag ou de sa date de dernière modification. Vous pouvez spécifier une ETag valeur avec votre demande et renvoyer l'objet uniquement si la ETag valeur correspond. Cela vous permet de ne renvoyer ou ne copier qu’une version spécifique d’un objet. Vous pouvez spécifier une valeur de dernière modification dans votre demande de lecture et ne renvoyer que les objets modifiés depuis une date que vous avez indiquée. 

## Soutenu APIs
<a name="conditional-read-apis"></a>

Le APIs support S3 suivant utilise des lectures conditionnelles :
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)

Vous pouvez utiliser les en-têtes suivants pour renvoyer un objet en fonction de la balise d'entité (ETag) ou de la date de dernière modification. Pour plus d'informations sur les métadonnées d'objets telles que ETags et Last-Modified, consultez. [Métadonnées d’objet définies par le système](UsingMetadata.md#SysMetadata)

**[https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)**  

+ `If-Match`— Renvoie l'objet uniquement s'il ETag correspond à celui fourni. 
+ `If-Modified-Since` : renvoie l’objet uniquement s’il a été modifié depuis l’heure spécifiée.
+ `If-None-Match`— Renvoie l'objet uniquement s'il ETag ne correspond pas à celui fourni.
+ `If-Unmodified-Since` : renvoie l’objet uniquement s’il n’a pas été modifié depuis l’heure spécifiée.

Pour plus d’informations sur ces en-têtes, les erreurs renvoyées et l’ordre dans lequel S3 gère plusieurs en-têtes conditionnels dans une seule demande, consultez [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) dans la Référence d’API Amazon Simple Storage Service.

**[https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)**  

+ `If-Match`— Renvoie l'objet uniquement s'il ETag correspond à celui fourni. 
+ `If-Modified-Since` : renvoie l’objet uniquement s’il a été modifié depuis l’heure spécifiée.
+ `If-None-Match`— Renvoie l'objet uniquement s'il ETag ne correspond pas à celui fourni.
+ `If-Unmodified-Since` : renvoie l’objet uniquement s’il n’a pas été modifié depuis l’heure spécifiée.

Pour plus d’informations sur ces en-têtes, les erreurs renvoyées et l’ordre dans lequel S3 gère plusieurs en-têtes conditionnels dans une seule demande, consultez [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) dans la Référence d’API Amazon Simple Storage Service.

**[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)**  

+ `x-amz-copy-source-if-match`— Copie l'objet source uniquement s'il ETag correspond à celui fourni. 
+ `x-amz-copy-source-if-modified-since` : copie l’objet source uniquement s’il a été modifié depuis l’heure spécifiée.
+ `x-amz-copy-source-if-none-match`— Copie l'objet source uniquement s'il ETag ne correspond pas à celui fourni.
+ `x-amz-copy-source-if-unmodified-since` : copie l’objet source uniquement s’il n’a pas été modifié depuis l’heure spécifiée.
+ `If-Match`— Copie l'objet uniquement s'il ETag correspond à celui fourni. `If-Match`attend la ETag valeur sous forme de chaîne.
+ `If-None-Match`— Copie l'objet uniquement s'il ETag ne correspond pas à celui fourni. `If-None-Match`attend le caractère « \$1 » (astérisque).

Pour plus d’informations sur ces en-têtes, les erreurs renvoyées et l’ordre dans lequel S3 gère plusieurs en-têtes conditionnels dans une seule demande, consultez [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) dans la Référence d’API Amazon Simple Storage Service.

# Comment empêcher le remplacement d’objets par des écritures conditionnelles
<a name="conditional-writes"></a>

Avec les écritures conditionnelles, vous pouvez ajouter un en-tête supplémentaire à vos demandes `WRITE` afin de spécifier les conditions préalables à une opération Amazon S3. Pour écrire des objets de manière conditionnelle, ajoutez l’en-tête HTTP `If-None-Match` ou `If-Match`.

L’en-tête `If-None-Match` empêche le remplacement de données existantes en validant qu’aucun objet portant le même nom de clé ne se trouve déjà dans votre compartiment.

Vous pouvez également ajouter l'`If-Match`en-tête pour vérifier la balise d'entité (ETag) d'un objet avant d'écrire un objet. Avec cet en-tête, Amazon S3 compare la ETag valeur fournie avec la ETag valeur de l'objet dans S3. Si les ETag valeurs ne correspondent pas, l'opération échoue.

Les propriétaires de compartiments peuvent utiliser des stratégies de compartiment pour appliquer des écritures conditionnelles aux objets chargés. Pour de plus amples informations, veuillez consulter [Application d’écritures conditionnelles sur des compartiments Amazon S3](conditional-writes-enforce.md).

**Note**  
Pour utiliser les écritures conditionnelles, vous devez utiliser AWS la version 4 de Signature pour signer la demande.

**Topics**
+ [

## Comment empêcher le remplacement d’objets en fonction des noms de clé
](#conditional-write-key-names)
+ [

## Comment empêcher les remplacements si l’objet a changé
](#conditional-write-etags)
+ [

## Comportement des écritures conditionnelles
](#conditional-error-response)
+ [

## Scénarios d’écritures conditionnelles
](#conditional-write-scenarios)
+ [

# Application d’écritures conditionnelles sur des compartiments Amazon S3
](conditional-writes-enforce.md)

## Comment empêcher le remplacement d’objets en fonction des noms de clé
<a name="conditional-write-key-names"></a>

Vous pouvez utiliser l'en-tête `If-None-Match` conditionnel HTTP pour vérifier si un objet existe déjà dans le compartiment spécifié en fonction de son nom de clé avant de le créer ou de le copier dans le compartiment de destination.

Les écritures conditionnelles avec l’en-tête HTTP `If-None-Match` vérifient l’existence d’un objet pendant l’opération `WRITE`. Si un nom de clé identique est trouvé dans le compartiment, l’opération échoue. Sans l'`If-None-Match`en-tête HTTP, si vous chargez ou copiez un objet portant un nom de clé identique dans un bucket non versionné ou dont la version est suspendue, l'objet est remplacé. Pour en savoir plus sur l’utilisation des noms de clé, consultez [Attribution d’un nom aux objets Amazon S3](object-keys.md).

**Note**  
L'`If-None-Match`en-tête HTTP s'applique uniquement à la version actuelle d'un objet dans un compartiment de versions.

Pour effectuer des écritures conditionnelles avec l’en-tête HTTP `If-None-Match`, vous devez avoir l’autorisation `s3:PutObject`. Cela permet à l’appelant de vérifier la présence d’objets dans le compartiment. L’en-tête `If-None-Match` s’attend à recevoir la valeur \$1 (astérisque).

Vous pouvez utiliser l'`If-None-Match`en-tête avec les éléments suivants APIs :
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)

### Mise conditionnelle à l'aide du AWS CLI
<a name="conditional-writes-putobject-CLI-key-names"></a>

L’exemple de commande `put-object` suivant tente d’effectuer une écriture conditionnelle pour un objet portant le nom de clé `dir-1/my_images.tar.bz2`.

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-none-match "*"       
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) dans la *Référence des commandes de l’AWS CLI *.

Pour plus d'informations sur le AWS CLI, voir [Qu'est-ce que le AWS Command Line Interface ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dans le *guide de AWS Command Line Interface l'utilisateur*. 

### Copie conditionnelle à l'aide du AWS CLI
<a name="conditional-writes-copyobject-CLI-key-names"></a>

L'`copy-object`exemple de commande suivant tente de copier un objet dans un compartiment de destination avec une écriture conditionnelle pour un objet portant le nom de clé`dir-1/my_images.tar.bz2`.

```
aws s3api copy-object --copy-source amzn-s3-demo-bucket/key --key dir-1/my_images.tar.bz2 --bucket amzn-s3-demo-bucket2 --if-none-match "*"            
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html) dans la *Référence des commandes de l’AWS CLI *.

Pour plus d'informations sur le AWS CLI, voir [Qu'est-ce que le AWS Command Line Interface ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dans le *guide de AWS Command Line Interface l'utilisateur*. 

### Téléchargement partitionné conditionnel à l'aide du AWS CLI
<a name="conditional-writes-mpu-complete-CLI-key-names"></a>

L'`complete-multipart-upload`exemple de commande suivant tente de terminer un téléchargement partitionné par une écriture conditionnelle pour un objet portant le nom `dir-1/my_images.tar.bz2` de clé. Dans cet exemple, le préfixe file ://est utilisé pour charger la structure JSON à partir d'un fichier du dossier local nommé `mpustruct` which list de toutes les parties qui ont été téléchargées pour ce téléchargement partitionné spécifique.

```
aws s3api complete-multipart-upload --multipart-upload file://mpustruct --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --upload-id upload-id  --if-none-match "*"             
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html) dans la *Référence des commandes de l’AWS CLI *.

Pour plus d'informations sur le AWS CLI, voir [Qu'est-ce que le AWS Command Line Interface ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dans le *guide de AWS Command Line Interface l'utilisateur*. 

## Comment empêcher les remplacements si l’objet a changé
<a name="conditional-write-etags"></a>

Un objet ETag est une chaîne unique à l'objet qui reflète une modification du contenu de l'objet. Vous pouvez utiliser l'`If-Match`en-tête pour comparer la ETag valeur d'un objet dans un compartiment Amazon S3 avec celle que vous avez fournie pendant l'`WRITE`opération. Si les ETag valeurs ne correspondent pas, l'opération échoue. Pour plus d'informations sur ETags, voir[Utilisation du contenu MD5 et du ETag pour vérifier les objets téléchargés](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5).

Pour effectuer des écritures conditionnelles avec un en-tête HTTP `If-Match`, vous devez disposer des autorisations `s3:PutObject` et `s3:GetObject`. Cela permet à l'appelant de vérifier ETag et de vérifier l'état des objets contenus dans le compartiment. L'`If-Match`en-tête attend la ETag valeur sous forme de chaîne.

Vous pouvez utiliser l'`If-Match`en-tête avec les éléments suivants APIs :
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)

### Mise conditionnelle à l'aide du AWS CLI
<a name="conditional-writes-putobject-CLI-etags"></a>

L'`put-object`exemple de commande suivant tente d'effectuer une écriture conditionnelle avec la ETag valeur fournie`6805f2cfc46c0f04559748bb039d69ae`.

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-match "6805f2cfc46c0f04559748bb039d69ae"         
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) dans la *Référence des commandes de l’AWS CLI *.

Pour plus d'informations sur le AWS CLI, voir [Qu'est-ce que le AWS Command Line Interface ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dans le *guide de AWS Command Line Interface l'utilisateur*. 

### Copie conditionnelle à l'aide du AWS CLI
<a name="conditional-writes-copyobject-CLI-etags"></a>

L'`copy-object`exemple de commande suivant tente d'effectuer une écriture conditionnelle avec la ETag valeur fournie`6805f2cfc46c0f04559748bb039d69ae`.

```
aws s3api copy-object --copy-source amzn-s3-demo-bucket/key --key dir-1/my_images.tar.bz2 --bucket amzn-s3-demo-bucket2 --if-match "6805f2cfc46c0f04559748bb039d69ae"             
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html) dans la *Référence des commandes de l’AWS CLI *.

Pour plus d'informations sur le AWS CLI, voir [Qu'est-ce que le AWS Command Line Interface ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dans le *guide de AWS Command Line Interface l'utilisateur*. 

### Téléchargement partitionné conditionnel à l'aide du AWS CLI
<a name="conditional-writes-mpu-complete-CLI-etags"></a>

L'`complete-multipart-upload`exemple de commande suivant tente de terminer un téléchargement partitionné avec une écriture conditionnelle à l'aide de la ETag valeur `6805f2cfc46c0f04559748bb039d69ae` fournie. Dans cet exemple, le préfixe file ://est utilisé pour charger la structure JSON à partir d'un fichier du dossier local nommé `mpustruct` which list de toutes les parties qui ont été téléchargées pour ce téléchargement partitionné spécifique.

```
aws s3api complete-multipart-upload --multipart-upload file://mpustruct --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --upload-id upload-id --if-match "6805f2cfc46c0f04559748bb039d69ae"             
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/complete-multipart-upload.html) dans la *Référence des commandes de l’AWS CLI *.

Pour plus d'informations sur le AWS CLI, voir [Qu'est-ce que le AWS Command Line Interface ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dans le *guide de AWS Command Line Interface l'utilisateur*. 

## Comportement des écritures conditionnelles
<a name="conditional-error-response"></a>

**Rédactions ou copies conditionnelles avec en-tête `If-None-Match`**  
Les écritures conditionnelles avec l’en-tête `If-None-Match` sont évaluées par rapport aux objets existants dans un compartiment. S’il n’existe aucun objet portant le même nom de clé dans le compartiment, l’opération d’écriture réussit, ce qui entraîne une réponse `200 OK`. S’il existe un objet, l’opération d’écriture échoue, ce qui entraîne une réponse `412 Precondition Failed`.  
Pour les compartiments pour lesquels la gestion des versions est activée, s’il n’existe aucune version d’objet portant le même nom, ou si la version actuelle de l’objet est un marqueur de suppression, l’opération d’écriture réussit. Dans le cas contraire, l’opération d’écriture échoue avec une réponse `412 Precondition Failed`.  
Si plusieurs écritures ou copies conditionnelles ont lieu pour le même nom d'objet, la première opération d'écriture terminée aboutit. Amazon S3 abandonne alors les écritures suivantes avec une réponse `412 Precondition Failed`.  
Vous pouvez également recevoir une réponse `409 Conflict` en cas de demandes simultanées si une demande de suppression d’un objet aboutit avant la fin d’une opération d’écriture conditionnelle sur cet objet. Lorsque vous utilisez des écritures conditionnelles avec `PutObject`, les chargements peuvent faire l’objet d’une nouvelle tentative après réception d’une erreur `409 Conflict`. Lors de l’utilisation de `CompleteMultipartUpload`, le chargement partitionné complet doit être relancé avec `CreateMultipartUpload` pour charger à nouveau l’objet après réception d’une erreur `409 Conflict`.

**Ecritures ou copies conditionnelles avec `If-Match` en-tête**  
L’en-tête `If-Match` est évalué par rapport aux objets existants dans un compartiment. S'il existe un objet portant le même nom de clé et correspondant ETag, l'opération d'écriture réussit, ce qui entraîne une `200 OK` réponse. Si ce ETag n'est pas le cas, l'opération d'écriture échoue avec une `412 Precondition Failed` réponse.  
Vous pouvez également recevoir une réponse `409 Conflict` en cas de demandes simultanées.  
Vous recevrez une réponse `404 Not Found` si une demande de suppression simultanée d’un objet aboutit avant la fin d’une opération d’écriture conditionnelle sur cet objet, car la clé de l’objet n’existe plus. Lorsque vous recevez une réponse `404 Not Found`, vous devez charger à nouveau l’objet.  
S’il n’existe aucune version d’objet portant le même nom, ou si la version actuelle de l’objet est un marqueur de suppression, l’opération échoue avec une erreur `404 Not Found`.

## Scénarios d’écritures conditionnelles
<a name="conditional-write-scenarios"></a>

Examinez les scénarios suivants dans lesquels deux clients exécutent des opérations sur le même compartiment. 

**Écritures conditionnelles lors des chargements partitionnés**  
Les écritures conditionnelles ne prennent pas en compte les demandes de chargement partitionné en cours, car il ne s’agit pas encore d’objets entièrement écrits. Prenons l’exemple suivant où le client 1 charge un objet à l’aide du chargement partitionné. Pendant le chargement partitionné, le client 2 est en mesure d’écrire avec succès ce même objet grâce à l’opération d’écriture conditionnelle. Par la suite, lorsque le client 1 essaie de finaliser le chargement partitionné à l’aide d’une écriture conditionnelle, le chargement échoue.

**Note**  
Ce scénario entraîne une réponse `412 Precondition Failed` à la fois pour les en-têtes en-têtes `If-None-Match` et `If-Match`.

![\[Exemple de deux clients écrivant des éléments portant le même nom de clé. Un avec UploadPart pour MPU PutObject et un avec écriture conditionnelle. L' CompleteMultipartUpload opération, qui démarre après, échoue.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/conwrite_put_mpu.png)


**Suppressions simultanées lors de chargements partitionnés**  
Si une demande de suppression aboutit avant qu’une demande d’écriture conditionnelle ne se termine, Amazon S3 renvoie une réponse `409 Conflict` ou `404 Not Found` pour l’opération d’écriture. Cela est dû au fait que la demande de suppression initiée précédemment a priorité sur l’opération d’écriture conditionnelle. Dans ce cas, vous devrez lancer un nouveau chargement partitionné.

**Note**  
Ce scénario génère une réponse `409 Conflict` pour un en-tête `If-None-Match` et une réponse `404 Not Found` pour un en-tête `If-Match`.

![\[Exemple de deux clients, l’un utilisant le chargement partitionné et l’autre envoyant une demande de suppression après le démarrage du chargement partitionné. La demande de suppression se termine avant le début de l’écriture conditionnelle.\]](http://docs.aws.amazon.com/fr_fr/AmazonS3/latest/userguide/images/conwrite_delete_mpu.png)


**Note**  
Pour réduire vos coûts de stockage, nous vous recommandons de configurer une règle du cycle de vie pour supprimer les chargements partitionnés incomplets après un certain nombre de jours à l’aide de l’action `AbortIncompleteMultipartUpload`. Pour plus d’informations sur la création d’une règle de cycle de vie pour supprimer les chargements partitionnés incomplets, consultez [Configuration d’une politique de cycle de vie de compartiment pour abandonner les chargements multiparties incomplets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html).

# Application d’écritures conditionnelles sur des compartiments Amazon S3
<a name="conditional-writes-enforce"></a>

Avec des politiques de compartiments Amazon S3, vous pouvez appliquer des écritures conditionnelles pour les chargements d’objets dans vos compartiments à usage général.

Une politique de compartiment est une politique basée sur les ressources que vous pouvez utiliser pour accorder des autorisations d’accès à votre compartiment Amazon S3 et aux objets qu’il contient. Seul le propriétaire du compartiment peut associer une politique à un compartiment. Pour plus d’informations sur les stratégies de compartiment, consultez [Politiques de compartiment pour Amazon S3](bucket-policies.md).

Vous pouvez utiliser les clés de condition `s3:if-match` ou `Condition` comme élément `s3:if-none-match` ou bloc `Condition` facultatif pour spécifier des conditions lorsqu’une politique est appliquée. Pour les téléchargements partitionnés, vous devez spécifier la clé de `s3:ObjectCreationOperation` condition pour exempter les `UploadPartCopy` opérations`CreateMultipartUpload`, et`UploadPart`, car celles-ci APIs n'acceptent pas les en-têtes conditionnels. Pour plus d’informations sur l’utilisation de conditions dans les politiques de compartiment, consultez [Exemples de politiques de compartiment utilisant des clés de condition](amazon-s3-policy-keys.md).

**Note**  
Si vous utilisez une stratégie de compartiment pour appliquer des écritures conditionnelles, vous ne pouvez pas effectuer d’opérations de copie vers le compartiment ou le préfixe spécifié dans cette stratégie de compartiment. Les demandes `CopyObject` sans en-tête HTTP `If-None-Match` ou `If-Match` échouent avec une erreur `403 Access Denied`. Les demandes `CopyObject` effectuées avec ces en-têtes HTTP échouent avec une réponse `501 Not Implemented`.

Les exemples suivants montrent comment utiliser les conditions d’une stratégie de compartiment pour obliger les clients à utiliser l’en-tête HTTP `If-None-Match` ou `If-Match`.

**Topics**
+ [

## Exemple 1 : Autoriser uniquement les chargements d’objets à l’aide de demandes `PutObject` et `CompleteMultipartUpload` incluant l’en-tête `if-none-match`
](#conditional-writes-enforce-ex1)
+ [

## Exemple 2 : Autoriser uniquement les chargements d’objets à l’aide de demandes `PutObject` et `CompleteMultipartUpload` incluant l’en-tête `if-match`
](#conditional-writes-enforce-ex2)
+ [

## Exemple 3 : Autoriser uniquement les demandes de chargement d’objets incluant l’en-tête `if-none-match` ou `if-match`
](#conditional-writes-enforce-ex3)

## Exemple 1 : Autoriser uniquement les chargements d’objets à l’aide de demandes `PutObject` et `CompleteMultipartUpload` incluant l’en-tête `if-none-match`
<a name="conditional-writes-enforce-ex1"></a>

Cette stratégie permet au compte 111122223333, l’utilisatrice Alice, d’écrire dans le compartiment *amzn-s3-demo-bucket1* si la demande inclut l’en-tête `if-none-match`, garantissant ainsi que la clé d’objet n’existe pas déjà dans le compartiment. Toutes les demandes `PutObject` et `CompleteMultipartUpload` adressées au compartiment spécifié doivent inclure l’en-tête `if-none-match` pour aboutir. Avec cet en-tête, les clients ne peuvent écrire dans ce compartiment que si la clé d’objet n’existe pas dans le compartiment.

**Note**  
Cette politique définit également la clé de `s3:ObjectCreationOperation` condition qui autorise les téléchargements partitionnés à l'aide des touches `CreateMultipartUpload``UploadPart`, et. `UploadPartCopy` APIs

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowConditionalPut",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Condition": {
                "Null": {
                    "s3:if-none-match": "false"
                }
            }
        },
        {
            "Sid": "AllowConditionalPutwithMPUs",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Condition": {
                "Bool": {
                    "s3:ObjectCreationOperation": "false"
                }
            }
        }
    ]
}
```

------

## Exemple 2 : Autoriser uniquement les chargements d’objets à l’aide de demandes `PutObject` et `CompleteMultipartUpload` incluant l’en-tête `if-match`
<a name="conditional-writes-enforce-ex2"></a>

Cette politique permet au compte 111122223333 et spécifiquement à l’utilisatrice Alice d’écrire dans *amzn-s3-demo-bucket1* uniquement si la demande inclut l’en-tête `if-match`. Cet en-tête compare la ETag valeur d'un objet dans S3 avec celle que vous avez fournie pendant l'`WRITE`opération. Si les ETag valeurs ne correspondent pas, l'opération échouera. Toutes les demandes `PutObject` et `CompleteMultipartUpload` adressées au compartiment spécifié doivent inclure l’en-tête `if-match` pour aboutir. 

**Note**  
Cette politique définit également la clé de `s3:ObjectCreationOperation` condition qui autorise les téléchargements partitionnés à l'aide des touches `CreateMultipartUpload``UploadPart`, et. `UploadPartCopy` APIs

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPutObject",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
        },
        {
            "Sid": "BlockNonConditionalObjectCreation",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Condition": {
                "Null": {
                    "s3:if-match": "true"
                },
                "Bool": {
                    "s3:ObjectCreationOperation": "true"
                }
            }
        },
        {
            "Sid": "AllowGetObjectBecauseConditionalPutIfMatchETag",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*"
        }
    ]
}
```

## Exemple 3 : Autoriser uniquement les demandes de chargement d’objets incluant l’en-tête `if-none-match` ou `if-match`
<a name="conditional-writes-enforce-ex3"></a>

Cette politique permet au compte 111122223333 et spécifiquement à l’utilisatrice Alice d’écrire dans *amzn-s3-demo-bucket1* si la demande inclut l’en-tête `if-none-match` ou `if-match`. Cela permet à Alice de télécharger un objet si le nom de clé n'existe pas dans le compartiment, ou si le nom de clé existe, Alice peut remplacer l'objet s'il ETag correspond à celui ETag fourni dans la `PUT` demande. 

**Note**  
Cette politique définit également la clé de `s3:ObjectCreationOperation` condition qui autorise les téléchargements partitionnés à l'aide des touches `CreateMultipartUpload``UploadPart`, et. `UploadPartCopy` APIs

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": " AllowConditionalPutifAbsent",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Condition": {
                "Null": {
                    "s3:if-none-match": "false"
                }
            }
        },
        {
            "Sid": "AllowConditionalPutIfMatchEtag",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Condition": {
                "Null": {
                    "s3:if-match": "false"
                }
            }
        },
        {
            "Sid": "AllowConditionalObjectCreation",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Condition": {
                "Bool": {
                    "s3:ObjectCreationOperation": "false"
                }
            }
        },
        {
            "Sid": " AllowGetObjectBecauseConditionalPutIfMatchETag",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*"
        }
    ]
}
```

------

# Réalisation de suppressions conditionnelles
<a name="conditional-deletes"></a>

Vous pouvez utiliser les suppressions conditionnelles pour déterminer si votre objet existe ou s’il n’a pas été modifié avant de le supprimer. Vous pouvez effectuer des suppressions conditionnelles à l’aide des opérations d’API `DeleteObject` et `DeleteObjects` dans les compartiments d’inventaire et les compartiments à usage général S3. Pour commencer, lorsque vous demandez une suppression conditionnelle, vous pouvez utiliser l’en-tête `HTTP If-Match` avec la valeur de la condition préalable `*` pour vérifier si l’objet existe, ou l’en-tête `If-Match` avec votre valeur `ETag` pour vérifier si l’objet a été modifié.

Vous pouvez appliquer des suppressions conditionnelles à un compartiment à usage général en utilisant une stratégie de compartiment S3 ou des politiques Gestion des identités et des accès (IAM). Pour de plus amples informations, veuillez consulter [Application de suppressions conditionnelles dans des compartiments Amazon S3](conditional-delete-enforce.md). 

**Note**  
Les évaluations des suppressions conditionnelles s’appliquent uniquement à la version en cours de l’objet. 

**Topics**
+ [

## Comment vérifier si votre objet a été modifié avant de le supprimer
](#conditional-deletes-etags)
+ [

## Comment vérifier si votre objet existe avant de le supprimer
](#conditional-delete)
+ [

# Application de suppressions conditionnelles dans des compartiments Amazon S3
](conditional-delete-enforce.md)

## Comment vérifier si votre objet a été modifié avant de le supprimer
<a name="conditional-deletes-etags"></a>

 Les suppressions conditionnelles vous permettent de protéger votre application contre les suppressions accidentelles d’objets. Vous pouvez utiliser l’en-tête `HTTP If-Match` avec la valeur `ETag` pour vérifier si un objet a été modifié. Si la valeur `ETag` d’un objet d’un compartiment S3 ne correspond pas à la valeur `ETag` que vous avez fournie lors de l’opération de suppression, celle-ci échoue. Pour supprimer de manière conditionnelle plusieurs objets à l’aide de l’opération `DeleteObjects`, vous devez fournir la valeur `ETag` dans l’élément `ETag` de l’objet dans le corps de la demande XML. Pour de plus amples informations, veuillez consulter [Utilisation du contenu MD5 et du ETag pour vérifier les objets téléchargés](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5). 

**Note**  
Pour effectuer des suppressions conditionnelles avec l’en-tête `If-Match` contenant la valeur `ETag`, vous devez disposer des autorisations `s3:DeleteObject` et `s3:GetObject`. 

L’en-tête `If-Match` avec la valeur `ETag` est comparé aux objets existants d’un compartiment. Si un objet portant le même nom de clé et correspondant à la `ETag` existe, la demande `DeleteObject` aboutit et retourne une réponse `204 No content`. Si la `ETag` ne correspond pas, l’opération de suppression échoue et renvoie une réponse `412 Precondition Failed`. Pour supprimer plusieurs objets de manière conditionnelle à l'aide de `DeleteObjects` cette opération, vous pouvez fournir la `ETag` valeur dans l'`ETag`élément de l'objet dans le corps de la demande XML. Si la demande aboutit, l'`DeleteObjects`opération répond par un `200 OK` et fournit l'état de chaque objet dans le corps de la réponse. Si la condition préalable est remplie, la réponse pour cet objet est capturée dans l’élément `<Deleted>` du corps de la réponse. Si la condition préalable n’est pas remplie, la réponse pour cet objet est capturée dans l’élément `<Error>` du corps de la réponse.

 Vous pouvez également recevoir le message d’erreur `409 Conflict` en cas de demandes simultanées si une demande `DELETE` ou `PUT` aboutit avant la fin d’une opération de suppression conditionnelle de cet objet. Vous recevrez une réponse `404 Not Found` si une demande de suppression simultanée d’un objet aboutit avant la fin d’une opération d’écriture conditionnelle sur cet objet, car la clé de l’objet n’existe plus. 

Vous pouvez utiliser l'`If-Match`en-tête avec la `ETag` valeur suivante APIs :
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)

### À l'aide du AWS CLI
<a name="conditional-deletes-deleteobject-CLI-etags"></a>

L'`delete-object`exemple de commande suivant tente d'effectuer une suppression conditionnelle avec la ETag valeur fournie`6805f2cfc46c0f04559748bb039d69al`.

```
aws s3api delete-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --if-match "6805f2cfc46c0f04559748bb039d69al"       
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html) dans la *Référence des commandes de l’AWS CLI *. 

L'`delete-objects`exemple de commande suivant tente d'effectuer une suppression conditionnelle avec la ETag valeur fournie`6805f2cfc46c0f04559748bb039d69al`.

```
aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "6805f2cfc46c0f04559748bb039d69al"}]}' 
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html) dans la *Référence des commandes de l’AWS CLI *. 

Pour plus d'informations sur le AWS CLI, voir [Qu'est-ce que le AWS Command Line Interface ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dans le *guide de AWS Command Line Interface l'utilisateur*. 

## Comment vérifier si votre objet existe avant de le supprimer
<a name="conditional-delete"></a>

 Vous pouvez utiliser l’en-tête `If-Match` avec la valeur `*` pour vérifier si l’objet existe avant de tenter de le supprimer. La valeur `*` signifie que l’opération ne doit avoir lieu que si l’objet existe, qu’il ait été modifié ou non. 

Les marqueurs de suppression sont des objets spéciaux contenus dans des compartiments à usage général S3 pour lesquels la gestion des versions est active. Ils indiquent qu’un objet a été supprimé. Ce sont des espaces réservés qui font apparaître l’objet comme supprimé tout en préservant les versions précédentes. Par conséquent, lorsque vous utilisez `If-Match:*` avec une API `DeleteObject`, l’opération n’aboutit et ne renvoie la réponse `204 No Content` que si l’objet existe. Si la version la plus récente de l’objet est un marqueur de suppression, l’objet n’existe pas et l’API `DeleteObject` échoue et renvoie la réponse `412 Precondition Failed`. Pour plus d'informations sur les marqueurs de suppression, consultez [Utilisation des marqueurs de suppression](DeleteMarker.md).

Pour supprimer de manière conditionnelle plusieurs objets à l’aide de l’opération `DeleteObjects`, vous pouvez fournir la valeur `*` dans l’élément `ETag` de l’objet dans le corps de la demande XML. Si la condition préalable est remplie, l’opération `DeleteObjects` renvoie la réponse `200 OK` et indique le statut de chaque objet dans le corps de la réponse. Si la condition préalable est remplie, la réponse pour cet objet est capturée dans l’élément `<Deleted>` du corps de la réponse. Si la condition préalable n’est pas remplie, la réponse pour cet objet est capturée dans l’élément `<Error>` du corps de la réponse. Si l’objet n’existe pas lors de l’évaluation de l’une des conditions préalables, S3 rejette la demande et renvoie le message d’erreur `Not Found`. 

**Note**  
 Pour effectuer des suppressions conditionnelles avec `If-Match:*`, vous devez disposer de l’autorisation `s3:DeleteObject`. 

Vous pouvez utiliser l'`If-Match`en-tête avec la `*` valeur suivante APIs :
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)

### À l'aide du AWS CLI
<a name="conditional-deleteobject-CLI-etags"></a>

L'`delete-object`exemple de commande suivant tente d'effectuer une suppression conditionnelle pour un objet dont le nom `my_images.tar.bz2` de clé possède une valeur représentant n'importe `*` laquelle ETag. 

```
aws s3api delete-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --if-match "*"
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html) dans la *Référence des commandes de l’AWS CLI *.

L'`delete-objects`exemple de commande suivant tente d'effectuer une suppression conditionnelle pour un objet dont le nom `my_images.tar.bz2` de clé possède une valeur représentant n'importe `*` laquelle ETag. 

```
aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "*"}]}' 
```

Pour plus d’informations, consultez [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html) dans la *Référence des commandes de l’AWS CLI *.

Pour plus d'informations sur le AWS CLI, voir [Qu'est-ce que le AWS Command Line Interface ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) dans le *guide de AWS Command Line Interface l'utilisateur*. 

# Application de suppressions conditionnelles dans des compartiments Amazon S3
<a name="conditional-delete-enforce"></a>

 Avec les stratégies de compartiment Amazon S3, vous pouvez appliquer un en-tête `If-Match` avec des suppressions conditionnelles d’objets de compartiments à usage général. Si l’en-tête `If-Match` n’existe pas, la demande est refusée et le message `403 Access Denied` est renvoyé. Une stratégie de compartiment est une stratégie basée sur les ressources que vous pouvez utiliser pour accorder des autorisations d'accès à votre compartiment et aux objets qu'il contient. Seul le propriétaire du compartiment peut associer une politique à un compartiment. Pour plus d’informations sur les stratégies de compartiment, consultez [Politiques de compartiment pour Amazon S3](bucket-policies.md). 

Les exemples suivants montrent comment utiliser les conditions d’une stratégie de compartiment pour obliger les clients à utiliser l’en-tête HTTP `If-Match`.

**Topics**
+ [

## Exemple 1 : autoriser uniquement les suppressions conditionnelles en utilisant l’en-tête `If-Match` avec la valeur `ETag`
](#conditional-writes-enforce-ex1)
+ [

## Exemple 2 : autoriser uniquement les suppressions conditionnelles en utilisant l’en-tête `If-Match` avec la valeur `*`
](#conditional-deletes-enforce-ex2)

## Exemple 1 : autoriser uniquement les suppressions conditionnelles en utilisant l’en-tête `If-Match` avec la valeur `ETag`
<a name="conditional-writes-enforce-ex1"></a>

Vous pouvez utiliser cette stratégie de compartiment pour autoriser uniquement les suppressions conditionnelles à l’aide des demandes `DeleteObject` et `DeleteObjects` qui incluent l’en-tête `If-Match` avec la valeur `ETag`. La `Null` condition garantit la présence de l'`If-Match`en-tête et l'`s3:GetObject`autorisation est accordée car les suppressions conditionnelles avec une ETag valeur spécifique nécessitent à la fois des `s3:GetObject` autorisations `s3:DeleteObject` et des autorisations. Toutes les suppressions non conditionnelles sont refusées et les suppressions conditionnelles sont acceptées.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowConditionalDeletes",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:DeleteObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "Null": {
                    "s3:if-match": "false"
                }
            }
        },
         {
            "Sid": "AllowGetObjectBecauseConditionalDeleteIfMatchETag",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

## Exemple 2 : autoriser uniquement les suppressions conditionnelles en utilisant l’en-tête `If-Match` avec la valeur `*`
<a name="conditional-deletes-enforce-ex2"></a>

Vous pouvez utiliser cette stratégie de compartiment pour autoriser uniquement les suppressions conditionnelles à l’aide des demandes `DeleteObject` et `DeleteObjects` qui incluent l’en-tête `If-Match` avec la valeur `*`. La `Null` condition garantit la présence de l'`If-Match`en-tête. Comme elle n'`s3:GetObject`est pas accordée, les suppressions conditionnelles avec une ETag valeur spécifique échoueront ; seules les suppressions `If-Match: *` (qui vérifient l'existence de l'objet et ne nécessitent qu'une `s3:DeleteObject` autorisation) seront couronnées de succès. Toutes les suppressions non conditionnelles seraient refusées, et seules les suppressions `If-Match: *` conditionnelles aboutiraient.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowConditionalDeletes",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:DeleteObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "Null": {
                    "s3:if-match": "false"
                }
            }
        }
    ]
}
```