Réalisation de suppressions conditionnelles - Amazon Simple Storage Service

Réalisation de suppressions conditionnelles

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 plus d’informations, consultez Application de suppressions conditionnelles dans des compartiments Amazon S3.

Note

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

Comment vérifier si votre objet a été modifié avant de le supprimer

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 plus d’informations, consultez Utilisation de Content-MD5 et de ETag pour vérifier les objets chargés..

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. En cas de succès, l’API DeleteObjects renvoie message 200 OK et fournit le statut de chaque objet dans le corps de la réponse à la demande de suppression par lot. Si les conditions préalables à une demande DeleteObjects ne sont pas satisfaites, Amazon S3 supprime les objets et renvoie le message d’échec Pre-condition.

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’en-tête If-Match avec la valeur ETag avec les API suivantes :

L’exemple de commande delete-object suivant tente d’effectuer une suppression conditionnelle avec la valeur de la balise d’entité 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 delete-object dans la Référence des commandes de l’AWS CLI.

L’exemple de commande delete-objects suivant tente d’effectuer une suppression conditionnelle avec la valeur de la balise d’entité 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 delete-objects dans la Référence des commandes de l’AWS CLI.

Pour plus d’informations sur l’AWS CLI, consultez Qu’est-ce que l’AWS Command Line Interface ? dans le Guide de l’utilisateur AWS Command Line Interface.

Comment vérifier si votre objet existe avant de le supprimer

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.

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’en-tête If-Match avec la valeur * avec les API suivantes :

L’exemple de commande delete-object suivant tente d’effectuer la suppression conditionnelle d’un objet dont le nom de clé my_images.tar.bz2 possède une valeur * qui représente n’importe quelle balise d’entité.

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

Pour plus d’informations, consultez delete-object dans la Référence des commandes de l’AWS CLI.

L’exemple de commande delete-objects suivant tente d’effectuer la suppression conditionnelle d’un objet dont le nom de clé my_images.tar.bz2 possède une valeur * qui représente n’importe quelle balise d’entité.

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

Pour plus d’informations, consultez delete-objects dans la Référence des commandes de l’AWS CLI.

Pour plus d’informations sur l’AWS CLI, consultez Qu’est-ce que l’AWS Command Line Interface ? dans le Guide de l’utilisateur AWS Command Line Interface.