

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à.

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