So führen Sie bedingte Löschungen durch
Sie können bedingte Löschungen verwenden, um zu prüfen, ob Ihr Objekt existiert oder unverändert ist, bevor es gelöscht wird. Sie können bedingte Löschungen mithilfe der DeleteObject- oder DeleteObjects-API-Operationen in S3-Allzweck-Buckets und Verzeichnis-Buckets durchführen. Wenn Sie eine bedingte Löschanforderung stellen, können Sie zunächst den HTTP If-Match Header mit dem Wert der Vorbedingung verwenden, * um zu überprüfen, ob das Objekt existiert, oder den If-Match Header mit dem von Ihnen bereitgestellten ETag, um zu überprüfen, ob das Objekt geändert wurde.
Sie können bedingte Löschungen auf einer Allzweck-Bucket-Ebene mithilfe von S3-Bucket- oder IAM-Richtlinien (Identity and Access Management) erzwingen. Weitere Informationen finden Sie unter Erzwingen von bedingten Löschungen auf Amazon S3 Buckets.
Anmerkung
Bedingte Löschauswertungen gelten nur für die aktuelle Version des Objekts.
Themen
So prüfen Sie, ob Ihr Objekt vor dem Löschen geändert wurde
Mit bedingten Löschungen können Sie Ihre Anwendung vor versehentlichem Löschen von Objekten schützen. Sie können den Header HTTP If-Match mit dem Wert ETag verwenden, um zu prüfen, ob ein Objekt geändert wurde. Wenn der ETag Wert eines Objekts in einem S3-Bucket nicht mit dem Wert ETag übereinstimmt, den Sie während des Löschvorgangs angegeben haben, schlägt der Vorgang fehl. Um mehrere Objekte mithilfe des DeleteObjects-Vorgangs bedingt zu löschen, müssen Sie den ETag-Wert im ETag-Element des Objekts im Hauptteil der XML-Anfrage angeben. Weitere Informationen finden Sie unter Verwenden von Content-MD5 und des ETag, um hochgeladene Objekte zu überprüfen.
Anmerkung
Um bedingte Löschungen mit dem Header If-Match mit dem Wert ETag durchzuführen, benötigen Sie die Berechtigungen s3:DeleteObject und s3:GetObject.
Der If-Match-Header mit dem ETag-Wert wird anhand vorhandener Objekte in einem Bucket ausgewertet. Wenn es ein vorhandenes Objekt mit demselben Schlüsselnamen und dem passenden ETag gibt, ist die DeleteObject Anfrage erfolgreich und gibt eine 204 No content Antwort zurück. Wenn das ETag nicht übereinstimmt, schlägt der Löschvorgang mit einer 412 Precondition Failed-Antwort fehl. Bei Erfolg antwortet die DeleteObjects-API mit einem 200 OK und gibt den Status jedes Objekts im Antworttext der Batch-Löschanfrage an. Wenn die Vorbedingungen für eine DeleteObjects-Anfrage nicht erfüllt sind, löscht Amazon S3 die Objekte und gibt eine Pre-condition fehlgeschlagene Fehlerantwort zurück.
Bei gleichzeitigen Anfragen kann es auch zu einer 409 Conflict-Fehlermeldung kommen, wenn eine DELETE- oder PUT-Objektanfrage erfolgreich ist, bevor eine bedingte Löschoperation für dieses Objekt abgeschlossen ist. Sie erhalten eine 404 Not
Found-Antwort, wenn eine gleichzeitige Löschanforderung für ein Objekt erfolgreich ist, bevor ein bedingter Schreibvorgang für dieses Objekt abgeschlossen ist, da der Objektschlüssel nicht mehr existiert.
Sie können den If-Match-Header mit dem ETag-Wert für die folgenden APIs verwenden:
Der folgende delete-object-Beispielbefehl versucht, einen bedingten Schreibvorgang mit dem angegebenen ETag-Wert 6805f2cfc46c0f04559748bb039d69al durchzuführen.
aws s3api delete-object --bucketamzn-s3-demo-bucket--key dir-1/my_images.tar.bz2--if-match "6805f2cfc46c0f04559748bb039d69al"
Weitere Informationen finden Sie unter delete-object
Der folgende delete-objects-Beispielbefehl versucht, einen bedingten Schreibvorgang mit dem angegebenen ETag-Wert 6805f2cfc46c0f04559748bb039d69al durchzuführen.
aws s3api delete-objects --bucketamzn-s3-demo-bucket--delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "6805f2cfc46c0f04559748bb039d69al"}]}'
Weitere Informationen finden Sie unter delete-objects
Weitere Informationen zu AWS CLI, finden Sie unter Was ist AWS Command Line Interface? im AWS Command Line Interface-Benutzerhandbuch.
So prüfen Sie, ob Ihr Objekt existiert, bevor Sie es löschen
Sie können den If-Match-Header mit dem *-Wert verwenden, um zu überprüfen, ob das Objekt existiert, bevor Sie versuchen, es zu löschen. Der *-Wert bedeutet, dass der Vorgang nur fortgesetzt werden soll, wenn das Objekt existiert, unabhängig davon, ob es geändert wurde oder nicht.
Löschmarkierungen sind spezielle Objekte in versionierten S3-Allzweck-Buckets, die anzeigen, dass ein Objekt gelöscht wurde. Sie sind Platzhalter, die das Objekt als gelöscht erscheinen lassen, während die vorherigen Versionen erhalten bleiben. Wenn Sie also If-Match:* mit einer DeleteObject-API verwenden, ist die Operation nur dann mit einem „204 No Content“ erfolgreich, wenn das Objekt vorhanden ist. Wenn es sich bei der neuesten Version des Objekts um eine Löschmarkierung handelt, ist das Objekt nicht vorhanden und die DeleteObject API schlägt fehl und gibt eine 412 Precondition Failed Antwort zurück. Weitere Informationen zu Löschmarkierungen finden Sie unter Arbeiten mit Löschmarkierungen.
Um mehrere Objekte mithilfe der DeleteObjects-Operation bedingt zu löschen, können Sie * im ETag-Element des Objekts im Hauptteil der XML-Anfrage angeben. Wenn die Vorbedingung erfolgreich ist, antwortet der DeleteObjects-Vorgang mit einem 200 OK und gibt den Status jedes Objekts im Antworttext an. Wenn die Vorbedingung erfolgreich ist, wird die Antwort für dieses Objekt im <Deleted> Element des Antworttextes erfasst. Wenn die Vorbedingung fehlschlägt, wird die Antwort für dieses Objekt im <Error> Element des Antworttextes erfasst. Wenn das Objekt bei der Auswertung einer der Vorbedingungen nicht existiert, lehnt S3 die Anfrage ab und gibt eine Not Found-Fehlerantwort zurück.
Anmerkung
Um bedingte Löschungen mit If-Match:* durchführen zu können, benötigen Sie die entsprechenden s3:DeleteObject-Berechtigungen.
Sie können den If-Match-Header mit dem *-Wert für die folgenden APIs verwenden:
Der folgende delete-object-Beispielbefehl versucht, ein bedingtes Löschen für ein Objekt mit dem Schlüsselnamen durchzuführen, dessen my_images.tar.bz2* Wert für ein beliebiges ETag steht.
aws s3api delete-object --bucketamzn-s3-demo-bucket--key dir-1/my_images.tar.bz2--if-match "*"
Weitere Informationen finden Sie unter delete-object
Der folgende delete-objects-Beispielbefehl versucht, ein bedingtes Löschen für ein Objekt mit dem Schlüsselnamen durchzuführen, dessen my_images.tar.bz2* Wert für ein beliebiges ETag steht.
aws s3api delete-objects --bucketamzn-s3-demo-bucket--delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "*"}]}'
Weitere Informationen finden Sie unter delete-objects
Weitere Informationen zu AWS CLI, finden Sie unter Was ist AWS Command Line Interface? im AWS Command Line Interface-Benutzerhandbuch.