

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.

# 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"
                }
            }
        }
    ]
}
```