

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Aggiunta di precondizioni alle operazioni S3 con richieste condizionali
<a name="conditional-requests"></a>

È possibile utilizzare le richieste condizionali per aggiungere precondizioni alle operazioni S3. Per utilizzare le richieste condizionali, si aggiunge un'intestazione supplementare all'operazione API di Amazon S3. Questa intestazione specifica una condizione che, se non viene soddisfatta, comporta il fallimento dell'operazione S3.

Le letture condizionali sono supportate per le richieste `GET`, `HEAD` e `COPY`. È possibile aggiungere condizioni preliminari per restituire o copiare un oggetto in base al relativo tag Entity (ETag) o alla data dell'ultima modifica. Questo può limitare un'operazione S3 agli oggetti aggiornati a partire da una data specifica. Puoi anche limitare un'operazione S3 a una specifica. ETag In questo modo si potrebbe garantire la restituzione o la copia solo di una versione specifica dell'oggetto. Per ulteriori informazioni sui metadata degli oggetti, consulta [Utilizzo dei metadati degli oggetti](UsingMetadata.md).

Le scritture condizionali possono garantire l'assenza di oggetti esistenti con lo stesso nome di chiave nel bucket durante operazioni `PUT`. Questo impedisce la sovrascrittura di oggetti esistenti con nomi di chiavi identici. Allo stesso modo, è possibile utilizzare le scritture condizionali per verificare se l'oggetto ETag è rimasto invariato prima di aggiornarlo. Ciò impedisce di sovrascrivere involontariamente un oggetto senza conoscere lo stato del suo contenuto. È possibile utilizzare scritture condizionali per [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html), o richieste. [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) Per ulteriori informazioni sui nomi delle chiavi, consultare [Denominazione di oggetti Amazon S3](object-keys.md).

Le eliminazioni condizionali valutano se l’oggetto esiste o è immutato prima di eliminarlo. È possibile eseguire eliminazioni condizionali utilizzando i bucket `DeleteObject` or `DeleteObjects` APIs in general purpose e directory. Per ulteriori informazioni sulle eliminazioni condizionali, consulta [Come eseguire le eliminazioni condizionali](conditional-deletes.md). Non è previsto alcun costo aggiuntivo per le letture e le scritture condizionali, né per le eliminazioni condizionali. Vengono addebitate solo le tariffe esistenti per le richieste applicabili, comprese quelle non andate a buon fine. Per informazioni sulle funzionalità e sui prezzi di Amazon S3, consulta [Prezzi di Amazon S3](https://aws.amazon.com/s3/pricing).

**Topics**
+ [Come recuperare o copiare gli oggetti in base ai metadati con letture condizionali](conditional-reads.md)
+ [Come prevenire la sovrascrittura degli oggetti con le scritture condizionali](conditional-writes.md)
+ [Come eseguire le eliminazioni condizionali](conditional-deletes.md)

# Come recuperare o copiare gli oggetti in base ai metadati con letture condizionali
<a name="conditional-reads"></a>

Con la lettura condizionale, è possibile aggiungere un'intestazione supplementare alla richiesta di lettura per aggiungere precondizioni all'operazione S3. Se queste precondizioni non sono soddisfatte, la richiesta di lettura fallisce.

È possibile usare la lettura condizionale sulle richieste `GET`, `HEAD` o `COPY` per restituire un oggetto solo in base ai suoi metadati.

Quando si carica un oggetto, Amazon S3 crea metadati controllati dal sistema che possono essere modificati solo da S3. I tag di entità (ETags) e Last-Modified sono esempi di metadati controllati dal sistema. Un oggetto ETag è una stringa che rappresenta una versione specifica di un oggetto. La data di ultima modifica è costituita da metadati che rappresentano la data di creazione dell'oggetto o l'ultima data di modifica, a seconda di quale sia la più recente.

Con le letture condizionali, è possibile restituire un oggetto in base alla data dell'oggetto ETag o alla data dell'ultima modifica. È possibile specificare un ETag valore nella richiesta e restituire l'oggetto solo se il valore corrisponde. ETag In questo modo si potrebbe garantire la restituzione o la copia di una specifica versione di un oggetto. È possibile specificare un valore di ultima modifica con la richiesta di lettura e restituire un oggetto solo se questo è stato modificato a partire da una data fornita dall'utente. 

## Supportato APIs
<a name="conditional-read-apis"></a>

Il seguente APIs supporto per S3 utilizza letture condizionali:
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)

È possibile utilizzare le seguenti intestazioni per restituire un oggetto in base al tag di entità (ETag) o alla data dell'ultima modifica. Per ulteriori informazioni sui metadati degli oggetti, ad esempio ETags Last-Modified, consulta. [Metadata di oggetti definiti dal sistema](UsingMetadata.md#SysMetadata)

**[https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)**  

+ `If-Match`— Restituisce l'oggetto solo se ETag corrisponde a quello fornito. 
+ `If-Modified-Since` - Restituisce l'oggetto solo se è stato modificato dal momento specificato.
+ `If-None-Match`— Restituisce l'oggetto solo se ETag non corrisponde a quello fornito.
+ `If-Unmodified-Since` - Restituisce l'oggetto solo se non è stato modificato dal momento specificato.

Per ulteriori informazioni su queste intestazioni, sugli errori restituiti e sull'ordine con cui S3 gestisce più intestazioni condizionali in una singola richiesta, consulta [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) nel Riferimento API di Amazon Simple Storage Service.

**[https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)**  

+ `If-Match`— Restituisce l'oggetto solo se ETag corrisponde a quello fornito. 
+ `If-Modified-Since` - Restituisce l'oggetto solo se è stato modificato dal momento specificato.
+ `If-None-Match`— Restituisce l'oggetto solo se ETag non corrisponde a quello fornito.
+ `If-Unmodified-Since` - Restituisce l'oggetto solo se non è stato modificato dal momento specificato.

Per ulteriori informazioni su queste intestazioni, sugli errori restituiti e sull'ordine con cui S3 gestisce più intestazioni condizionali in una singola richiesta, consulta [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) nel Riferimento API di Amazon Simple Storage Service.

**[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)**  

+ `x-amz-copy-source-if-match`— Copia l'oggetto sorgente solo se ETag corrisponde a quello fornito. 
+ `x-amz-copy-source-if-modified-since` - Copia l'oggetto di origine solo se è stato modificato dal momento specificato.
+ `x-amz-copy-source-if-none-match`— Copia l'oggetto sorgente solo se ETag non corrisponde a quello fornito.
+ `x-amz-copy-source-if-unmodified-since` - Copia l'oggetto di origine solo se non è stato modificato dal momento specificato.
+ `If-Match`— Copia l'oggetto solo se ETag corrisponde a quello fornito. `If-Match`si aspetta il ETag valore come stringa.
+ `If-None-Match`— Copia l'oggetto solo se ETag non corrisponde a quello fornito. `If-None-Match`si aspetta il carattere '\$1' (asterisco).

Per ulteriori informazioni su queste intestazioni, sugli errori restituiti e sull'ordine con cui S3 gestisce più intestazioni condizionali in una singola richiesta, consulta [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) nel Riferimento API di Amazon Simple Storage Service.

# Come prevenire la sovrascrittura degli oggetti con le scritture condizionali
<a name="conditional-writes"></a>

Utilizzando le scritture condizionali, è possibile aggiungere un'ulteriore intestazione alle richieste `WRITE` per specificare le precondizioni per le operazioni su Amazon S3. Per scrivere oggetti in modo condizionato, aggiungi l'intestazione HTTP `If-None-Match` o `If-Match`.

L'intestazione `If-None-Match` impedisce la sovrascrittura dei dati esistenti, verificando che non vi sia già un oggetto con lo stesso nome di chiave nel bucket.

In alternativa, puoi aggiungere l'`If-Match`intestazione per controllare il tag di entità di un oggetto (ETag) prima di scrivere un oggetto. Con questa intestazione, Amazon S3 confronta il valore ETag fornito con il valore ETag dell'oggetto in S3. Se i ETag valori non corrispondono, l'operazione fallisce.

I proprietari dei bucket possono usare le policy di bucket per imporre la scrittura condizionale degli oggetti caricati. Per ulteriori informazioni, consulta [Applicazione delle scritture condizionali sui bucket Amazon S3](conditional-writes-enforce.md).

**Nota**  
Per utilizzare le scritture condizionali, è necessario utilizzare AWS Signature Version 4 per firmare la richiesta.

**Topics**
+ [Come impedire la sovrascrittura degli oggetti in base ai nomi delle chiavi](#conditional-write-key-names)
+ [Come impedire la sovrascrittura se l'oggetto è stato modificato](#conditional-write-etags)
+ [Comportamento di scrittura condizionale](#conditional-error-response)
+ [Scenari di scrittura condizionati](#conditional-write-scenarios)
+ [Applicazione delle scritture condizionali sui bucket Amazon S3](conditional-writes-enforce.md)

## Come impedire la sovrascrittura degli oggetti in base ai nomi delle chiavi
<a name="conditional-write-key-names"></a>

È possibile utilizzare l'intestazione `If-None-Match` condizionale HTTP per verificare se un oggetto esiste già nel bucket specificato in base al nome della chiave prima di crearlo o copiarlo nel bucket di destinazione.

Le scritture condizionali con l'intestazione HTTP `If-None-Match` controllano l'esistenza di un oggetto durante l'operazione `WRITE`. Se nel bucket viene trovato un nome di chiave identico, l'operazione fallisce. Senza l'`If-None-Match`intestazione HTTP, se carichi o copi un oggetto con un nome di chiave identico in un bucket senza versione o con versione sospesa, l'oggetto viene sovrascritto. Per ulteriori informazioni sull'uso dei nomi delle chiavi, consulta [Denominazione di oggetti Amazon S3](object-keys.md).

**Nota**  
L'`If-None-Match`intestazione HTTP si applica solo alla versione corrente di un oggetto in un bucket di versione.

Per eseguire scritture condizionali con l'intestazione HTTP `If-None-Match` è necessario disporre dell'autorizzazione `s3:PutObject`. Ciò consente al chiamante di verificare la presenza di oggetti nel bucket. L'intestazione `If-None-Match` prevede il valore \$1 (asterisco).

È possibile utilizzare l'`If-None-Match`intestazione con quanto segue: 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)

### Inserimento condizionale utilizzando il AWS CLI
<a name="conditional-writes-putobject-CLI-key-names"></a>

Il seguente comando di esempio `put-object` tenta di eseguire una scrittura condizionale per un oggetto con il nome della chiave `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 "*"       
```

Per ulteriori informazioni, consulta [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) nella *documentazione di riferimento dei comandi della AWS CLI *.

Per informazioni su AWS CLI, vedi [Cos'è il AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)? nella *Guida AWS Command Line Interface per l'utente*. 

### Copia condizionale utilizzando il AWS CLI
<a name="conditional-writes-copyobject-CLI-key-names"></a>

Il comando di `copy-object` esempio seguente tenta di copiare un oggetto in un bucket di destinazione con una scrittura condizionale per un oggetto con il nome della chiave. `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 "*"            
```

Per ulteriori informazioni, consulta [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) nella *documentazione di riferimento dei comandi della AWS CLI *.

Per informazioni su AWS CLI, vedere [What is](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) the? AWS Command Line Interface nella *Guida AWS Command Line Interface per l'utente*. 

### Caricamento condizionale in più parti utilizzando il AWS CLI
<a name="conditional-writes-mpu-complete-CLI-key-names"></a>

Il comando di `complete-multipart-upload` esempio seguente tenta di completare un caricamento in più parti con una scrittura condizionale per un oggetto con il nome della chiave. `dir-1/my_images.tar.bz2` In questo esempio, il prefisso file://viene utilizzato per caricare la struttura JSON da un file nella cartella locale denominata whose (elenco di tutte le parti `mpustruct` che sono state caricate per questo specifico caricamento multiparte).

```
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 "*"             
```

Per ulteriori informazioni, consulta [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) nella *documentazione di riferimento dei comandi della AWS CLI *.

[Per informazioni su AWS CLI, consulta What is the? AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) nella *Guida AWS Command Line Interface per l'utente*. 

## Come impedire la sovrascrittura se l'oggetto è stato modificato
<a name="conditional-write-etags"></a>

Un oggetto ETag è una stringa che è unica per l'oggetto e riflette una modifica al contenuto dell'oggetto. Puoi utilizzare l'`If-Match`intestazione per confrontare il ETag valore di un oggetto in un bucket Amazon S3 con uno fornito durante l'operazione. `WRITE` Se i ETag valori non corrispondono, l'operazione fallisce. Per ulteriori informazioni su ETags, vedere[Utilizzo di Content- MD5 and the ETag per verificare gli oggetti caricati](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5).

Per eseguire scritture condizionali con l'intestazione HTTP `If-Match` è necessario disporre delle autorizzazioni `s3:PutObject` e `s3:GetObject`. Ciò consente al chiamante di controllare ETag e verificare lo stato degli oggetti nel bucket. L'`If-Match`intestazione prevede che il ETag valore sia una stringa.

È possibile utilizzare l'`If-Match`intestazione con quanto segue: 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)

### Inserimento condizionale utilizzando il AWS CLI
<a name="conditional-writes-putobject-CLI-etags"></a>

Il comando di `put-object` esempio seguente tenta di eseguire una scrittura condizionale con il valore fornito ETag . `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"         
```

Per ulteriori informazioni, consulta [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) nella *documentazione di riferimento dei comandi della AWS CLI *.

Per informazioni su AWS CLI, vedere [What is the AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)? nella *Guida AWS Command Line Interface per l'utente*. 

### Copia condizionale utilizzando il AWS CLI
<a name="conditional-writes-copyobject-CLI-etags"></a>

Il comando di `copy-object` esempio seguente tenta di eseguire una scrittura condizionale con il valore fornito ETag . `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"             
```

Per ulteriori informazioni, consulta [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) nella *documentazione di riferimento dei comandi della AWS CLI *.

Per informazioni su AWS CLI, vedere [What is the AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)? nella *Guida AWS Command Line Interface per l'utente*. 

### Caricamento condizionale in più parti utilizzando il AWS CLI
<a name="conditional-writes-mpu-complete-CLI-etags"></a>

Il comando di `complete-multipart-upload` esempio seguente tenta di completare un caricamento in più parti con una scrittura condizionale utilizzando il valore fornito. ETag `6805f2cfc46c0f04559748bb039d69ae` In questo esempio, il prefisso file://viene utilizzato per caricare la struttura JSON da un file nella cartella locale denominata This List di tutte le parti `mpustruct` che sono state caricate per questo specifico caricamento multiparte.

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

Per ulteriori informazioni, consulta [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) nella *documentazione di riferimento dei comandi della AWS CLI *.

[Per informazioni su AWS CLI, consulta What is the? AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) nella *Guida AWS Command Line Interface per l'utente*. 

## Comportamento di scrittura condizionale
<a name="conditional-error-response"></a>

**Scritture o copie condizionali con intestazione `If-None-Match`**  
Le scritture condizionali con l'intestazione `If-None-Match` vengono valutate rispetto agli oggetti esistenti in un bucket. Se non c'è nessun oggetto esistente con lo stesso nome di chiave nel bucket, l'operazione di scrittura ha successo, con una risposta `200 OK`. Se c'è un oggetto esistente, l'operazione di scrittura fallisce e la risposta è `412 Precondition Failed`.  
Per i bucket con controllo delle versioni abilitato, se non esiste una versione corrente dell'oggetto con lo stesso nome o se la versione corrente dell'oggetto è un marcatore di cancellazione, l'operazione di scrittura va a buon fine. Altrimenti, si ottiene un'operazione di scrittura fallita con una risposta `412 Precondition Failed`.  
Se vengono eseguite più scritture o copie condizionali per lo stesso nome di oggetto, la prima operazione di scrittura completata ha esito positivo. Amazon S3 quindi non riesce a eseguire le scritture successive con una risposta `412 Precondition Failed`.  
È inoltre possibile ricevere una risposta `409 Conflict` nel caso di richieste concorrenti, se una richiesta di cancellazione di un oggetto ha successo prima che un'operazione di scrittura condizionale su quell'oggetto sia completata. Quando si usano le scritture condizionali con `PutObject`, i caricamenti possono essere ritentati dopo aver ricevuto un errore `409 Conflict`. Quando si usa `CompleteMultipartUpload`, l'intero caricamento multiparte deve essere riavviato con `CreateMultipartUpload` per caricare nuovamente l'oggetto dopo aver ricevuto un errore `409 Conflict`.

**Scritture o copie condizionali con intestazione `If-Match`**  
L'intestazione `If-Match` viene valutata rispetto agli oggetti esistenti in un bucket. Se esiste un oggetto esistente con lo stesso nome di chiave e la stessa corrispondenza ETag, l'operazione di scrittura ha esito positivo e restituisce una risposta. `200 OK` Se ETag non corrisponde, l'operazione di scrittura ha esito negativo e viene restituita una `412 Precondition Failed` risposta.  
È anche possibile ricevere una risposta `409 Conflict` in caso di richieste simultanee.  
Si riceverà una risposta `404 Not Found` se una richiesta di cancellazione concorrente di un oggetto riesce prima che un'operazione di scrittura condizionale su quell'oggetto sia completata, poiché la chiave dell'oggetto non esiste più. È necessario ricaricare l'oggetto quando si riceve una risposta `404 Not Found`.  
Se non esiste una versione corrente dell'oggetto con lo stesso nome o se la versione corrente dell'oggetto è un marcatore di cancellazione, l'operazione fallisce con un errore `404 Not Found`.

## Scenari di scrittura condizionati
<a name="conditional-write-scenarios"></a>

Si considerino i seguenti scenari in cui due client eseguono operazioni sullo stesso bucket. 

**Scrittura condizionale durante il caricamento multiparte**  
Le scritture condizionali non considerano le richieste di caricamento multiparte in corso, poiché non sono ancora oggetti completamente scritti. Si consideri il seguente esempio in cui il client 1 sta caricando un oggetto utilizzando il caricamento multiparte. Durante il caricamento multiparte, il client 2 è in grado di scrivere con successo lo stesso oggetto con l'operazione di scrittura condizionale. Successivamente, quando il client 1 tenta di completare il caricamento multiparte utilizzando una scrittura condizionale, il caricamento non riesce.

**Nota**  
In questo caso si otterrà una risposta `412 Precondition Failed` per entrambe le intestazioni `If-None-Match` e `If-Match`.

![\[Un esempio di due client che scrivono elementi con lo stesso nome di chiave. Uno con UploadPart MPU e uno con PutObject scrittura condizionale. L' CompleteMultipartUpload operazione, che inizia dopo, fallisce.\]](http://docs.aws.amazon.com/it_it/AmazonS3/latest/userguide/images/conwrite_put_mpu.png)


**Cancellazioni simultanee durante il caricamento di più parti**  
Se una richiesta di cancellazione riesce prima che una richiesta di scrittura condizionale possa essere completata, Amazon S3 restituisce una risposta `409 Conflict` o `404 Not Found` per l'operazione di scrittura. Questo perché la richiesta di cancellazione avviata in precedenza ha la precedenza sull'operazione di scrittura condizionale. In questi casi, è necessario avviare un nuovo caricamento multiparte.

**Nota**  
In questo caso si otterrà una risposta `409 Conflict` per un'intestazione `If-None-Match` e una risposta `404 Not Found` per un'intestazione `If-Match`.

![\[Un esempio di due client, uno che utilizza il caricamento multiparte e l'altro che invia una richiesta di cancellazione dopo l'avvio dell'MPU. La richiesta di cancellazione termina prima dell'inizio della scrittura condizionale.\]](http://docs.aws.amazon.com/it_it/AmazonS3/latest/userguide/images/conwrite_delete_mpu.png)


**Nota**  
Per ridurre al minimo i costi di archiviazione, ti consigliamo di configurare una regola del ciclo di vita per eliminare i caricamenti in più parti incompleti dopo un numero di giorni specificato utilizzando l'operazione `AbortIncompleteMultipartUpload`. Per ulteriori informazioni sulla creazione di una regola del ciclo di vita per eliminare i caricamenti in più parti incompleti, consulta [Configurazione del ciclo di vita del bucket per l'eliminazione dei caricamenti in più parti incompleti](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html).

# Applicazione delle scritture condizionali sui bucket Amazon S3
<a name="conditional-writes-enforce"></a>

Utilizzando le policy di bucket Amazon S3, è possibile imporre scritture condizionali per il caricamento di oggetti nei bucket per uso generico.

Una policy di bucket è una policy basata sulle risorse che può essere utilizzata per concedere le autorizzazioni di accesso al bucket Amazon S3 e agli oggetti in esso contenuti. Solo il proprietario del bucket può associare una policy a un bucket. Per ulteriori informazioni sulle policy di bucket, consulta [Policy dei bucket per Amazon S3](bucket-policies.md).

È possibile utilizzare le chiavi di condizione `s3:if-match` o `s3:if-none-match` come l'elemento opzionale `Condition` o il blocco `Condition` per specificare quando una policy è in vigore. Per i caricamenti in più parti è necessario specificare la chiave `s3:ObjectCreationOperation` condizionale per esentare `UploadPartCopy` le operazioni, e `CreateMultipartUpload``UploadPart`, poiché queste APIs non accettano intestazioni condizionali. Per ulteriori informazioni sull'uso delle condizioni nelle policy di bucket, consulta [Esempi di policy per i bucket che utilizzano le chiavi di condizione](amazon-s3-policy-keys.md).

**Nota**  
Se si usa una policy di bucket per imporre scritture condizionali, non è possibile eseguire operazioni di copia sul bucket o sul prefisso specificato nella policy di bucket. Le richieste `CopyObject` senza un'intestazione HTTP `If-None-Match` o `If-Match` falliscono con un errore `403 Access Denied`. Le richieste `CopyObject` fatte con queste intestazioni HTTP falliscono con una risposta `501 Not Implemented`.

Gli esempi seguenti mostrano come utilizzare le condizioni in una policy di bucket per forzare i client a usare l'intestazione HTTP `If-None-Match` o `If-Match`.

**Topics**
+ [Esempio 1: Consentire solo il caricamento di oggetti utilizzando le richieste `PutObject` e `CompleteMultipartUpload` che includono l'intestazione `if-none-match`](#conditional-writes-enforce-ex1)
+ [Esempio 2: Consentire solo il caricamento di oggetti utilizzando le richieste `PutObject` e `CompleteMultipartUpload` che includono l'intestazione `if-match`](#conditional-writes-enforce-ex2)
+ [Esempio 3: Consentire solo le richieste di caricamento di oggetti che includono l'intestazione `if-none-match` o `if-match`](#conditional-writes-enforce-ex3)

## Esempio 1: Consentire solo il caricamento di oggetti utilizzando le richieste `PutObject` e `CompleteMultipartUpload` che includono l'intestazione `if-none-match`
<a name="conditional-writes-enforce-ex1"></a>

Questa policy consente all’account 111122223333, utente Alice, di scrivere nel bucket *amzn-s3-demo-bucket1* se la richiesta include l’intestazione `if-none-match`, assicurando che la chiave dell’oggetto non sia già presente nel bucket. Tutte le richieste `PutObject` e `CompleteMultipartUpload` al bucket specificato devono includere l'intestazione `if-none-match` per avere successo. Utilizzando questa intestazione, i clienti possono scrivere su questo bucket solo se la chiave dell'oggetto non esiste nel bucket.

**Nota**  
Questa politica imposta anche la chiave `s3:ObjectCreationOperation` condizionale che consente i caricamenti in più parti utilizzando, e. `CreateMultipartUpload` `UploadPart` `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"
                }
            }
        }
    ]
}
```

------

## Esempio 2: Consentire solo il caricamento di oggetti utilizzando le richieste `PutObject` e `CompleteMultipartUpload` che includono l'intestazione `if-match`
<a name="conditional-writes-enforce-ex2"></a>

Questa policy consente all'account 111122223333, utente Alice, di scrivere su *amzn-s3-demo-bucket1* solo se la richiesta include l'intestazione `if-match`. Questa intestazione confronta il ETag valore di un oggetto in S3 con quello fornito durante l'operazione. `WRITE` Se i ETag valori non corrispondono, l'operazione fallirà. Tutte le richieste `PutObject` e `CompleteMultipartUpload` al bucket specificato devono includere l'intestazione `if-match` per avere successo. 

**Nota**  
Questo criterio imposta anche la chiave di `s3:ObjectCreationOperation` condizione che consente il caricamento in più parti utilizzando `CreateMultipartUpload``UploadPart`, e. `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/*"
        }
    ]
}
```

## Esempio 3: Consentire solo le richieste di caricamento di oggetti che includono l'intestazione `if-none-match` o `if-match`
<a name="conditional-writes-enforce-ex3"></a>

Questa policy consente all'account 111122223333 e all'utente Alice di scrivere su *amzn-s3-demo-bucket1* se le richieste includono l'intestazione `if-none-match` o `if-match`. Ciò consente ad Alice di caricare un oggetto se il nome della chiave non esiste nel bucket, o se il nome della chiave esiste, Alice può sovrascrivere l'oggetto se l'oggetto ETag corrisponde a quello ETag fornito nella richiesta. `PUT` 

**Nota**  
Questa politica imposta anche la chiave di `s3:ObjectCreationOperation` condizione che consente il caricamento in più parti utilizzando, e. `CreateMultipartUpload` `UploadPart` `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/*"
        }
    ]
}
```

------

# Come eseguire le eliminazioni condizionali
<a name="conditional-deletes"></a>

È possibile utilizzare le eliminazioni condizionali per valutare se l’oggetto esiste o è immutato prima di eliminarlo. È possibile eseguire le eliminazioni condizionali utilizzando le operazioni API `DeleteObject` o `DeleteObjects` nei bucket di directory e per uso generico S3. Per effettuare una richiesta di eliminazione condizionale, è possibile utilizzare l’intestazione `HTTP If-Match` con il valore di precondizione `*` per verificare se l’oggetto esiste o l’intestazione `If-Match` con il valore fornito `ETag` per verificare se l’oggetto è stato modificato.

Puoi applicare le eliminazioni condizionali a livello di bucket per uso generico utilizzando i bucket S3 o le policy Identity and Access Management (IAM). Per ulteriori informazioni, consulta [Applicazione delle eliminazioni condizionali sui bucket Amazon S3](conditional-delete-enforce.md). 

**Nota**  
Le valutazioni delle eliminazioni condizionali si applicano solo alla versione corrente dell’oggetto. 

**Topics**
+ [Come verificare se l’oggetto è stato modificato prima di eliminarlo](#conditional-deletes-etags)
+ [Come verificare se l’oggetto esiste prima di eliminarlo](#conditional-delete)
+ [Applicazione delle eliminazioni condizionali sui bucket Amazon S3](conditional-delete-enforce.md)

## Come verificare se l’oggetto è stato modificato prima di eliminarlo
<a name="conditional-deletes-etags"></a>

 Con le eliminazioni condizionali, è possibile proteggere l’applicazione dall’eliminazione accidentale di oggetti. È possibile utilizzare l’intestazione `HTTP If-Match` con il valore `ETag` per verificare se un oggetto è stato modificato. Se il valore `ETag` di un oggetto in un bucket S3 non corrisponde al valore `ETag` fornito durante l’operazione di eliminazione, l’operazione non riesce. Per eliminare in modo condizionale più oggetti utilizzando l’operazione `DeleteObjects`, è necessario fornire il valore `ETag` nell’elemento `ETag` dell’oggetto nel corpo della richiesta XML. Per ulteriori informazioni, consulta [Utilizzo di Content- MD5 and the ETag per verificare gli oggetti caricati](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5). 

**Nota**  
Per eseguire eliminazioni condizionali con l’intestazione `If-Match` con il valore `ETag`, è necessario disporre delle autorizzazioni `s3:DeleteObject` e `s3:GetObject`. 

L’intestazione `If-Match` con il valore `ETag` viene valutata rispetto agli oggetti esistenti in un bucket. Se non è presente un oggetto con lo stesso nome di chiave ed `ETag` corrispondente, la richiesta `DeleteObject` ha esito positivo e restituisce una risposta `204 No content`. Se `ETag` non corrisponde, l’operazione di eliminazione non riesce con una risposta `412 Precondition Failed`. Per eliminare in modo condizionale più oggetti utilizzando l'`DeleteObjects`operazione, è possibile fornire il `ETag` valore nell'`ETag`elemento dell'oggetto nel corpo della richiesta XML. Se la richiesta ha esito positivo, l'`DeleteObjects`operazione risponde con un `200 OK` e fornisce lo stato di ogni oggetto nel corpo della risposta. Se la precondizione ha esito positivo, la risposta per l’oggetto verrà acquisita nell’elemento `<Deleted>` del corpo della risposta. Se la precondizione non riesce, la risposta per l’oggetto verrà acquisita nell’elemento `<Error>` del corpo della risposta.

 È inoltre possibile ricevere una risposta di errore `409 Conflict` nel caso di richieste concorrenti, se una richiesta `DELETE` o `PUT` per un oggetto ha esito positivo prima che un’operazione di eliminazione condizionale sia stata completata su quell’oggetto. Si riceverà una risposta `404 Not Found` se una richiesta di cancellazione concorrente di un oggetto riesce prima che un'operazione di scrittura condizionale su quell'oggetto sia completata, poiché la chiave dell'oggetto non esiste più. 

È possibile utilizzare l'`If-Match`intestazione con il `ETag` valore per quanto segue: APIs
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)

### Usando il AWS CLI
<a name="conditional-deletes-deleteobject-CLI-etags"></a>

Il comando di `delete-object` esempio seguente tenta di eseguire un'eliminazione condizionale con il ETag valore `6805f2cfc46c0f04559748bb039d69al` fornito.

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

Per ulteriori informazioni, consulta [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html) nella *documentazione di riferimento dei comandi della AWS CLI *. 

Il comando di `delete-objects` esempio seguente tenta di eseguire un'eliminazione condizionale con il valore fornito ETag . `6805f2cfc46c0f04559748bb039d69al`

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

Per ulteriori informazioni, consulta [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html) nella *documentazione di riferimento dei comandi della AWS CLI *. 

Per informazioni su AWS CLI, vedere [What is the AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)? nella *Guida AWS Command Line Interface per l'utente*. 

## Come verificare se l’oggetto esiste prima di eliminarlo
<a name="conditional-delete"></a>

 È possibile utilizzare l’intestazione `If-Match` con il valore `*` per verificare se l’oggetto esiste prima di tentare di eliminarlo. Il valore `*` indica che l’operazione deve procedere solo se l’oggetto esiste, indipendentemente dal fatto che sia stato modificato o meno. 

Gli indicatori di eliminazione sono oggetti speciali contenuti nei bucket per uso generico S3 con controllo delle versioni che indicano che un oggetto è stato eliminato. Sono segnaposto che fanno apparire l’oggetto eliminato, conservando le versioni precedenti. Pertanto, quando si utilizza `If-Match:*` con un’API `DeleteObject`, l’operazione avrà esito positivo con `204 No Content` solo se l’oggetto esiste. Se l’ultima versione dell’oggetto è un indicatore di eliminazione, l’oggetto non esiste e l’API `DeleteObject` non riesce e restituisce una risposta `412 Precondition Failed`. Per ulteriori informazioni sui contrassegni di eliminazione, consulta [Utilizzo dei contrassegni di eliminazione](DeleteMarker.md).

Per eliminare in modo condizionale più oggetti utilizzando l’operazione `DeleteObjects`, è possibile fornire `*` nell’elemento `ETag` dell’oggetto nel corpo della richiesta XML. Se la precondizione ha esito positivo, l’operazione `DeleteObjects` risponde con `200 OK` e fornisce lo stato di ogni oggetto nel corpo della risposta. Se la precondizione ha esito positivo, la risposta per l’oggetto verrà acquisita nell’elemento `<Deleted>` del corpo della risposta. Se la precondizione non riesce, la risposta per l’oggetto verrà acquisita nell’elemento `<Error>` del corpo della risposta. Se l’oggetto non esiste durante la valutazione delle precondizioni, S3 rifiuta la richiesta e restituisce una risposta di errore `Not Found`. 

**Nota**  
 Per eseguire eliminazioni condizionali con `If-Match:*`, è necessario disporre delle autorizzazioni `s3:DeleteObject`. 

È possibile utilizzare l'`If-Match`intestazione con il `*` valore per quanto segue: APIs
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)

### Usando il AWS CLI
<a name="conditional-deleteobject-CLI-etags"></a>

Il comando di `delete-object` esempio seguente tenta di eseguire un'eliminazione condizionale per un oggetto il cui nome `my_images.tar.bz2` chiave ha un valore `*` che rappresenta qualsiasi ETag. 

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

Per ulteriori informazioni, consulta [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html) nella *documentazione di riferimento dei comandi della AWS CLI *.

Il comando di `delete-objects` esempio seguente tenta di eseguire un'eliminazione condizionale per un oggetto il cui nome `my_images.tar.bz2` chiave ha un valore `*` che rappresenta qualsiasi. ETag 

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

Per ulteriori informazioni, consulta [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html) nella *documentazione di riferimento dei comandi della AWS CLI *.

Per informazioni su AWS CLI, vedere [What is the AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)? nella *Guida AWS Command Line Interface per l'utente*. 

# Applicazione delle eliminazioni condizionali sui bucket Amazon S3
<a name="conditional-delete-enforce"></a>

 Utilizzando le policy di bucket Amazon S3, è possibile applicare l’intestazione `If-Match` con le eliminazioni condizionali per gli oggetti nei bucket per uso generico. Se l’intestazione `If-Match` non esiste, la richiesta verrà rifiutata con un errore `403 Access Denied`. Una policy di bucket è una policy basata su risorse che puoi utilizzare per concedere autorizzazioni di accesso al bucket e agli oggetti che contiene. Solo il proprietario del bucket può associare una policy a un bucket. Per ulteriori informazioni sulle policy di bucket, consulta [Policy dei bucket per Amazon S3](bucket-policies.md). 

Gli esempi seguenti mostrano come utilizzare le condizioni in una policy di bucket per forzare i client a utilizzare l’intestazione HTTP `If-Match`.

**Topics**
+ [Esempio 1: consentire le eliminazioni condizionali solo utilizzando l’intestazione `If-Match` con il valore `ETag`](#conditional-writes-enforce-ex1)
+ [Esempio 2: consentire le eliminazioni condizionali solo utilizzando l’intestazione `If-Match` con il valore `*`](#conditional-deletes-enforce-ex2)

## Esempio 1: consentire le eliminazioni condizionali solo utilizzando l’intestazione `If-Match` con il valore `ETag`
<a name="conditional-writes-enforce-ex1"></a>

Puoi utilizzare questa policy di bucket per consentire solo le eliminazioni condizionali con le richieste `DeleteObject` e `DeleteObjects` che includono l’intestazione `If-Match` con il valore `ETag`. La `Null` condizione garantisce la presenza dell'`If-Match`intestazione e l'`s3:GetObject`autorizzazione viene concessa perché le eliminazioni condizionali con un ETag valore specifico richiedono entrambe le autorizzazioni. `s3:DeleteObject` `s3:GetObject` Tutte le eliminazioni non condizionali vengono negate e le eliminazioni condizionali vengono autorizzate.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowConditionalDeletes",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:DeleteObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "Null": {
                    "s3:if-match": "false"
                }
            }
        },
         {
            "Sid": "AllowGetObjectBecauseConditionalDeleteIfMatchETag",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

## Esempio 2: consentire le eliminazioni condizionali solo utilizzando l’intestazione `If-Match` con il valore `*`
<a name="conditional-deletes-enforce-ex2"></a>

Puoi utilizzare questa policy di bucket per consentire solo le eliminazioni condizionali con le richieste `DeleteObject` e `DeleteObjects` che includono l’intestazione `If-Match` con il valore `*`. La `Null` condizione garantisce la presenza dell'`If-Match`intestazione. Poiché non `s3:GetObject` è concessa, le eliminazioni condizionali con un ETag valore specifico avranno esito negativo. Solo `If-Match: *` (operazione che verifica l'esistenza dell'oggetto e richiede solo l'`s3:DeleteObject`autorizzazione) avranno esito positivo. Tutte le eliminazioni non condizionali verrebbero negate e solo `If-Match: *` le eliminazioni condizionali avrebbero esito positivo.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowConditionalDeletes",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Alice"
            },
            "Action": "s3:DeleteObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "Null": {
                    "s3:if-match": "false"
                }
            }
        }
    ]
}
```