

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.

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

------