Application d’écritures conditionnelles sur des compartiments Amazon S3 - Amazon Simple Storage Service

Application d’écritures conditionnelles sur des compartiments Amazon S3

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

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 Amazon S3 et aux objets qu’il contient. Seul le propriétaire du compartiment peut associer une stratégie à un compartiment. Pour plus d’informations sur les stratégies de compartiment, consultez Stratégies de compartiment pour Amazon S3.

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 chargements partitionnés, vous devez spécifier la clé de condition s3:ObjectCreationOperation pour exempter les opérations CreateMultipartUpload, UploadPart et UploadPartCopy, car ces API n’acceptent pas les en-têtes conditionnels. Pour plus d’informations sur l’utilisation de conditions dans les stratégies de compartiment, consultez Exemples de stratégies de compartiment utilisant des clés de condition.

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.

Exemple 1 : Autoriser uniquement les chargements d’objets à l’aide de demandes PutObject et CompleteMultipartUpload incluant l’en-tête if-none-match

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 stratégie définit également la clé de condition s3:ObjectCreationOperation qui autorise les chargements partitionnés à l’aide des API CreateMultipartUpload, UploadPart et UploadPartCopy.

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

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 valeur de la balise d’entité d’un objet dans S3 avec celle que vous avez fournie pendant l’opération WRITE. Si les valeurs de la balise d’entité 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 stratégie définit également la clé de condition s3:ObjectCreationOperation qui autorise les chargements partitionnés à l’aide des API CreateMultipartUpload, UploadPart et UploadPartCopy.

{ "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

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. Elle autorise Alice à charger un objet si le nom de la clé n’existe pas dans le compartiment. Si le nom de la clé existe, Alice peut remplacer l’objet si sa balise d’entité correspond à celle fournie dans la demande PUT.

Note

Cette stratégie définit également la clé de condition s3:ObjectCreationOperation qui autorise les chargements partitionnés à l’aide des API CreateMultipartUpload, UploadPart et UploadPartCopy.

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