

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.

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

------