

# Cómo evitar que un objeto se sobrescriba con escrituras condicionales
<a name="conditional-writes"></a>

Mediante las escrituras condicionales, puede agregar un encabezado adicional a las solicitudes `WRITE` para especificar condiciones previas a la operación de Amazon S3. Para escribir objetos de forma condicional, agregue el encabezado HTTP `If-None-Match` o `If-Match`.

El encabezado `If-None-Match` evita sobrescribir datos existentes al validar que no haya un objeto con el mismo nombre de clave ya en el bucket.

De forma alternativa, puede agregar el encabezado `If-Match` para verificar la etiqueta de entidad (ETag) de un objeto antes de escribirlo. Con este encabezado, Amazon S3 compara el valor de ETag proporcionado con el valor de ETag del objeto en S3. Si los valores de ETag no coinciden, se produce un error en la operación.

Los propietarios de buckets pueden utilizar políticas de bucket para aplicar escrituras condicionales a los objetos cargados. Para obtener más información, consulte [Aplicación de escrituras condicionales en buckets de Amazon S3](conditional-writes-enforce.md).

**nota**  
Si desea utilizar escrituras condicionales, debe utilizar la versión 4 de AWS Signature para firmar la solicitud.

**Topics**
+ [

## Cómo evitar sobrescrituras de objetos basadas en nombres de clave
](#conditional-write-key-names)
+ [

## Cómo evitar sobrescrituras si el objeto ha cambiado
](#conditional-write-etags)
+ [

## Comportamiento de escritura condicional
](#conditional-error-response)
+ [

## Escenarios de escritura condicional
](#conditional-write-scenarios)
+ [

# Aplicación de escrituras condicionales en buckets de Amazon S3
](conditional-writes-enforce.md)

## Cómo evitar sobrescrituras de objetos basadas en nombres de clave
<a name="conditional-write-key-names"></a>

Puede utilizar el encabezado condicional HTTP `If-None-Match` para comprobar si un objeto ya existe en el bucket especificado en función del nombre de clave antes de crearlo o copiarlo en el bucket de destino.

Las escrituras condicionales con el encabezado HTTP `If-None-Match` comprobarán la existencia de un objeto durante la operación `WRITE`. Si se encuentra un nombre de clave idéntico en el bucket, la operación producirá un error. Sin el encabezado HTTP `If-None-Match`, si carga o copia un objeto con un nombre de clave idéntico en un bucket sin versión o con versiones suspendidas, el objeto se sobrescribe. Para obtener más información sobre el uso de nombres de clave, consulte [Denominación de objetos de Amazon S3](object-keys.md).

**nota**  
El encabezado `If-None-Match` HTTP solo se aplica a la versión actual de un objeto en un bucket de versiones.

Para realizar escrituras condicionales con el encabezado HTTP `If-None-Match`, debe tener el permiso `s3:PutObject`. Esto permite a la persona que llama comprobar la presencia de objetos en el bucket. El encabezado `If-None-Match` espera el valor \$1 (asterisco).

Puede utilizar el encabezado `If-None-Match` con las siguientes API:
+ [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)

### Colocación condicional mediante la AWS CLI
<a name="conditional-writes-putobject-CLI-key-names"></a>

El siguiente comando `put-object` de ejemplo intenta realizar una escritura condicional para un objeto con el nombre de clave `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 "*"       
```

Para obtener más información, consulte [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) en la *Referencia de comandos de la AWS CLI*.

Para obtener información sobre AWS CLI, consulte [¿Qué es AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) en la *Guía del usuario de AWS Command Line Interface*. 

### Copia condicional mediante la AWS CLI
<a name="conditional-writes-copyobject-CLI-key-names"></a>

El comando de ejemplo `copy-object` intenta copiar un objeto en un bucket de destino con una escritura condicional para un objeto con el nombre de clave `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 "*"            
```

Para obtener más información, consulte [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) en la *Referencia de comandos de la AWS CLI*.

Para obtener información sobre AWS CLI, consulte [¿Qué es AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) en la *Guía del usuario de AWS Command Line Interface*. 

### Carga condicional de multiparte mediante la AWS CLI
<a name="conditional-writes-mpu-complete-CLI-key-names"></a>

El comando de ejemplo `complete-multipart-upload` intenta completar una carga multiparte con una escritura condicional para un objeto con el nombre de clave `dir-1/my_images.tar.bz2`. En este ejemplo, el prefijo file:// se usa para cargar la estructura JSON desde un archivo de la carpeta local denominada `mpustruct` que muestra todas las partes que se han cargado para esta carga multiparte específica.

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

Para obtener más información, consulte [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) en la *Referencia de comandos de la AWS CLI*.

Para obtener información sobre AWS CLI, consulte [¿Qué es AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) en la *Guía del usuario de AWS Command Line Interface*. 

## Cómo evitar sobrescrituras si el objeto ha cambiado
<a name="conditional-write-etags"></a>

La ETag de un objeto es una cadena que es única para el objeto y refleja un cambio en el contenido del objeto. Puede utilizar el encabezado `If-Match` para comparar el valor de ETag de un objeto en un bucket de Amazon S3 con uno que proporcione durante la operación `WRITE`. Si los valores de ETag no coinciden, se produce un error en la operación. Para obtener más información sobre las ETag, consulte [Uso de Content-MD5 y ETag para verificar los objetos cargados](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5).

Para realizar escrituras condicionales con un encabezado HTTP `If-Match`, debe tener los permisos `s3:PutObject` y `s3:GetObject`. Esto permite al intermediario comprobar la ETag y verificar el estado de los objetos en el bucket. El encabezado `If-Match` espera el valor de la ETag en forma de cadena.

Puede utilizar el encabezado `If-Match` con las siguientes API:
+ [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)

### Colocación condicional mediante la AWS CLI
<a name="conditional-writes-putobject-CLI-etags"></a>

El siguiente comando `put-object` de ejemplo intenta realizar una escritura condicional con el valor de ETag proporcionado `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"         
```

Para obtener más información, consulte [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) en la *Referencia de comandos de la AWS CLI*.

Para obtener información sobre AWS CLI, consulte [¿Qué es AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) en la *Guía del usuario de AWS Command Line Interface*. 

### Copia condicional mediante la AWS CLI
<a name="conditional-writes-copyobject-CLI-etags"></a>

El siguiente comando `copy-object` de ejemplo intenta realizar una escritura condicional con el valor de ETag proporcionado `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"             
```

Para obtener más información, consulte [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) en la *Referencia de comandos de la AWS CLI*.

Para obtener información sobre AWS CLI, consulte [¿Qué es AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) en la *Guía del usuario de AWS Command Line Interface*. 

### Carga condicional de multiparte mediante la AWS CLI
<a name="conditional-writes-mpu-complete-CLI-etags"></a>

El comando de ejemplo `complete-multipart-upload` intenta completar una carga multiparte con una escritura condicional con el valor de ETag `6805f2cfc46c0f04559748bb039d69ae` proporcionado. En este ejemplo, el prefijo file:// se usa para cargar la estructura JSON desde un archivo de la carpeta local denominada `mpustruct` que muestra todas las partes que se han cargado para esta carga multiparte específica.

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

Para obtener más información, consulte [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) en la *Referencia de comandos de la AWS CLI*.

Para obtener información sobre AWS CLI, consulte [¿Qué es AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) en la *Guía del usuario de AWS Command Line Interface*. 

## Comportamiento de escritura condicional
<a name="conditional-error-response"></a>

**Copias de escrituras condicionales con encabezado `If-None-Match`**  
Las escrituras condicionales con el encabezado `If-None-Match` se comparan con los objetos existentes en un bucket. Si no existe ningún objeto con el mismo nombre de clave en el bucket, la operación de escritura se realiza correctamente y se obtiene una respuesta de `200 OK`. Si existe un objeto, se produce un error en la operación de escritura y se obtiene una respuesta de `412 Precondition Failed`.  
Para los buckets con el control de versiones habilitado, si no hay ninguna versión del objeto actual con el mismo nombre o si la versión actual del objeto es un marcador de eliminación, la operación de escritura se realiza correctamente. De lo contrario, se produce un error en la operación de escritura y se produce una respuesta `412 Precondition Failed`.  
Si se realizan varias escrituras o copias condicionales para el mismo nombre de objeto, la primera operación de escritura que finalice se realiza correctamente. Amazon S3 producirá un error en las escrituras posteriores con una respuesta `412 Precondition Failed`.  
También puede recibir una respuesta `409 Conflict` en caso de solicitudes simultáneas si una solicitud de eliminación de un objeto se realiza correctamente antes de que se complete una operación de escritura condicional en ese objeto. Si se utilizan escrituras condicionales con `PutObject`, es posible que las cargas se vuelvan a intentar después de recibir un error `409 Conflict`. Cuando se utiliza `CompleteMultipartUpload`, se debe volver a iniciar la carga multiparte completa con `CreateMultipartUpload` para volver a cargar el objeto tras recibir un error `409 Conflict`.

**Escrituras o copias condicionales con encabezado `If-Match`**  
El encabezado `If-Match` se compara con los objetos existentes en un bucket. Si existe un objeto con el mismo nombre de clave y ETag coincidente, la operación de escritura se realiza correctamente y se obtiene una respuesta `200 OK`. Si la ETag no coincide, se produce un error en la operación de escritura y se produce una respuesta `412 Precondition Failed`.  
También puede recibir una respuesta `409 Conflict` en caso de solicitudes simultáneas.  
Recibirá una respuesta `404 Not Found` si una solicitud simultánea de eliminación de un objeto se realiza correctamente antes de que finalice una operación de escritura condicional en ese objeto, porque la clave del objeto ya no existe. Debe volver a cargar el objeto cuando reciba una respuesta `404 Not Found`.  
Si no hay ninguna versión del objeto actual con el mismo nombre o si la versión actual del objeto es un marcador de eliminación, se produce el error `404 Not Found` en la operación.

## Escenarios de escritura condicional
<a name="conditional-write-scenarios"></a>

Tenga en cuenta los siguientes escenarios en los que dos clientes ejecutan operaciones en el mismo bucket. 

**Escrituras condicionales durante las cargas multiparte**  
Las escrituras condicionales no consideran ninguna solicitud de cargas multiparte en curso, ya que aún no se trata de objetos completamente escritos. Considere el siguiente ejemplo en el que el cliente 1 carga un objeto mediante la carga multiparte. Durante la carga multiparte, el cliente 2 puede escribir correctamente el mismo objeto con la operación de escritura condicional. Posteriormente, cuando el cliente 1 intenta completar la carga multiparte mediante una escritura condicional, la carga produce un error.

**nota**  
Este escenario dará lugar a una respuesta `412 Precondition Failed` para los encabezados `If-None-Match` y `If-Match`.

![\[Un ejemplo de dos clientes que escriben elementos con el mismo nombre de clave. Uno con UploadPart para MPU y otro con PutObject y una escritura condicional. Se produce un error en la operación CompleteMultipartUpload, que se inicia después.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/conwrite_put_mpu.png)


**Eliminaciones simultáneas durante las cargas multiparte**  
Si una solicitud de eliminación se realiza correctamente antes de que se complete una solicitud de escritura condicional, Amazon S3 devuelve una respuesta `409 Conflict` o `404 Not Found` para la operación de escritura. Esto se debe a que la solicitud de eliminación que se inició antes tiene prioridad sobre la operación de escritura condicional. En esos casos, debe iniciar una nueva carga multiparte.

**nota**  
Este escenario producirá una respuesta `409 Conflict` para un encabezado `If-None-Match` y una respuesta `404 Not Found` para un encabezado `If-Match`.

![\[Un ejemplo de dos clientes, uno que utiliza la carga multiparte y otro que envía una solicitud de eliminación una vez que se ha iniciado la MPU. La solicitud de eliminación finaliza antes de que comience la escritura condicional.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/conwrite_delete_mpu.png)


**nota**  
Para reducir los costos de almacenamiento, se recomienda configurar una regla del ciclo de vida para eliminar las cargas multiparte incompletas al cabo de un número específico de días mediante la acción `AbortIncompleteMultipartUpload`. Para obtener más información sobre cómo crear una regla de ciclo de vida para eliminar las cargas multiparte incompletas, consulte [Configuración de una política de ciclo de vida del bucket para eliminar cargas multiparte incompletas](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html).

# Aplicación de escrituras condicionales en buckets de Amazon S3
<a name="conditional-writes-enforce"></a>

Mediante el uso de las políticas de bucket de Amazon S3, puede aplicar escrituras condicionales para cargas de objetos en los buckets de uso general.

Una política de bucket está basada en recursos que puede utilizar para conceder permisos de acceso al bucket de Amazon S3 y a los objetos que contiene. Solo el propietario del bucket puede asociar una política a un bucket. Para obtener más información acerca de las políticas de bucket, consulte [Políticas de buckets para Amazon S3](bucket-policies.md).

Puede utilizar las claves de condición `s3:if-match` o `s3:if-none-match` como el elemento `Condition` opcional o bloque `Condition` para especificar cuándo está en vigor una política. Para cargas multiparte, debe especificar la clave de condición `s3:ObjectCreationOperation` para eximir las operaciones `CreateMultipartUpload`, `UploadPart` y `UploadPartCopy`, ya que estas API no aceptan encabezados condicionales. Para obtener más información sobre el uso de condiciones en las políticas de bucket, consulte [Ejemplos de políticas de bucket que utilizan claves de condición](amazon-s3-policy-keys.md).

**nota**  
Si utiliza una política de bucket para aplicar escrituras condicionales, no puede realizar operaciones de copia en el bucket o prefijo especificado en la política de bucket. Las solicitudes `CopyObject` sin un encabezado HTTP `If-None-Match` o `If-Match` producen un error `403 Access Denied`. Las solicitudes `CopyObject` realizadas con esos encabezados HTTP generan un error con una respuesta `501 Not Implemented`.

En los siguientes ejemplos se muestra cómo utilizar condiciones en una política de bucket para que los clientes utilicen el encabezado HTTP `If-None-Match` o `If-Match`.

**Topics**
+ [

## Ejemplo 1: permitir solo cargas de objetos mediante solicitudes `PutObject` y `CompleteMultipartUpload` que incluyan el encabezado `if-none-match`
](#conditional-writes-enforce-ex1)
+ [

## Ejemplo 2: permitir solo cargas de objetos mediante solicitudes `PutObject` y `CompleteMultipartUpload` que incluyan el encabezado `if-match`
](#conditional-writes-enforce-ex2)
+ [

## Ejemplo 3: permitir solo solicitudes de carga de objeto que incluyan el encabezado `if-none-match` o `if-match`
](#conditional-writes-enforce-ex3)

## Ejemplo 1: permitir solo cargas de objetos mediante solicitudes `PutObject` y `CompleteMultipartUpload` que incluyan el encabezado `if-none-match`
<a name="conditional-writes-enforce-ex1"></a>

Esta política permite a la cuenta 111122223333, usuaria Alice, escribir en el bucket *amzn-s3-demo-bucket1* si la solicitud incluye el encabezado `if-none-match`, lo que garantiza que la clave de objeto no exista ya en el bucket. Todas las solicitudes `PutObject` y `CompleteMultipartUpload` al bucket especificado deben incluir el encabezado `if-none-match` para que se realicen correctamente. Mediante este encabezado, los clientes pueden escribir en este bucket solo si la clave de objeto no existe en el bucket.

**nota**  
Esta política también establece la clave de condición `s3:ObjectCreationOperation` que permite cargas multiparte mediante las API `CreateMultipartUpload`, `UploadPart` y `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"
                }
            }
        }
    ]
}
```

------

## Ejemplo 2: permitir solo cargas de objetos mediante solicitudes `PutObject` y `CompleteMultipartUpload` que incluyan el encabezado `if-match`
<a name="conditional-writes-enforce-ex2"></a>

Esta política permite que la cuenta 111122223333, usuaria Alice, escriba en *amzn-s3-demo-bucket1* solo si la solicitud incluye el encabezado `if-match`. Este encabezado compara el valor de ETag de un objeto en S3 con uno que proporcione durante la operación `WRITE`. Si los valores se ETag no coinciden, se produce un error en la operación. Todas las solicitudes `PutObject` y `CompleteMultipartUpload` al bucket especificado deben incluir el encabezado `if-match` para que se realicen correctamente. 

**nota**  
Esta política también establece la clave de condición `s3:ObjectCreationOperation` que permite cargas multiparte mediante las API `CreateMultipartUpload`, `UploadPart` y `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/*"
        }
    ]
}
```

## Ejemplo 3: permitir solo solicitudes de carga de objeto que incluyan el encabezado `if-none-match` o `if-match`
<a name="conditional-writes-enforce-ex3"></a>

Esta política permite que la cuenta 111122223333, usuaria Alice, escriba en *amzn-s3-demo-bucket1* si las solicitudes incluyen el encabezado `if-none-match` o `if-match`. Esto permite a Alice cargar un objeto si el nombre de clave no existe en el bucket o, si el nombre de la clave existe, Alice puede sobrescribir el objeto si la ETag del objeto coincide con la ETag proporcionada en la solicitud `PUT`. 

**nota**  
Esta política también establece la clave de condición `s3:ObjectCreationOperation` que permite cargas multiparte mediante las API `CreateMultipartUpload`, `UploadPart` y `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/*"
        }
    ]
}
```

------