

# Impor gravações condicionais em buckets do Amazon S3
<a name="conditional-writes-enforce"></a>

Ao usar as políticas de bucket do Amazon S3, você pode impor gravações condicionais para uploads de objetos em buckets de uso geral.

Uma política de bucket é uma política baseada em recursos que você pode usar para conceder permissões de acesso ao bucket do Amazon S3 e aos objetos contidos nele. Só o proprietário do bucket pode associar uma política a um bucket. Para obter mais informações sobre políticas de bucket, consulte [Políticas de bucket para o Amazon S3](bucket-policies.md).

Você pode usar as chaves de condição `s3:if-match` ou `s3:if-none-match` como elemento `Condition` opcional ou o bloco `Condition` para especificar quando uma política está em vigor. Para uploads fracionados, você deve especificar a chave de condição `s3:ObjectCreationOperation` para isentar as operações `CreateMultipartUpload`, `UploadPart` e `UploadPartCopy`, pois essas APIs não aceitam cabeçalhos condicionais. Para ter mais informações sobre como usar condições em políticas de bucket, consulte [Exemplos de políticas de bucket usando chaves de condição](amazon-s3-policy-keys.md).

**nota**  
Se você usar uma política de bucket para impor gravações condicionais, não poderá realizar operações de cópia no bucket ou no prefixo especificado na política de bucket. As solicitações `CopyObject` sem um cabeçalho HTTP `If-None-Match` ou `If-Match` falham com um erro `403 Access Denied`. As solicitações `CopyObject` feitas com esses cabeçalhos HTTP falham com uma resposta `501 Not Implemented`.

Os exemplos a seguir mostram como usar condições em uma política de bucket para forçar os clientes a usar o cabeçalho HTTP `If-None-Match` ou `If-Match`.

**Topics**
+ [Exemplo 1: permitir somente uploads de objetos usando solicitações `PutObject` e `CompleteMultipartUpload` que incluam o cabeçalho `if-none-match`](#conditional-writes-enforce-ex1)
+ [Exemplo 2: permitir somente uploads de objetos usando solicitações `PutObject` e `CompleteMultipartUpload` que incluam o cabeçalho `if-match`](#conditional-writes-enforce-ex2)
+ [Exemplo 3: permitir somente solicitações de upload de objetos que incluam o cabeçalho `if-none-match` ou `if-match`](#conditional-writes-enforce-ex3)

## Exemplo 1: permitir somente uploads de objetos usando solicitações `PutObject` e `CompleteMultipartUpload` que incluam o cabeçalho `if-none-match`
<a name="conditional-writes-enforce-ex1"></a>

Essa política permite que a conta 111122223333, usuária Alice, grave no bucket *amzn-s3-demo-bucket1* se a solicitação incluir o cabeçalho `if-none-match`, garantindo que a chave de objeto ainda não exista no bucket. Todas as solicitações `PutObject` e `CompleteMultipartUpload` ao bucket especificado devem incluir o cabeçalho `if-none-match` para serem bem-sucedidas. Usando esse cabeçalho, os clientes só poderão gravar nesse bucket se a chave de objeto não existir no bucket.

**nota**  
Essa política também define a chave de condição `s3:ObjectCreationOperation` que permite uploads fracionados usando as APIs `CreateMultipartUpload`, `UploadPart` e `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"
                }
            }
        }
    ]
}
```

------

## Exemplo 2: permitir somente uploads de objetos usando solicitações `PutObject` e `CompleteMultipartUpload` que incluam o cabeçalho `if-match`
<a name="conditional-writes-enforce-ex2"></a>

Essa política permite que a conta 111122223333, usuário Alice, grave em *amzn-s3-demo-bucket1* somente se a solicitação incluir o cabeçalho `if-match`. Esse cabeçalho compara o valor da ETag de um objeto no S3 com o valor fornecido durante a operação `WRITE`. Se esses valores de ETag não forem correspondentes, a operação vai falhar. Todas as solicitações `PutObject` e `CompleteMultipartUpload` ao bucket especificado devem incluir o cabeçalho `if-match` para serem bem-sucedidas. 

**nota**  
Essa política também define a chave de condição `s3:ObjectCreationOperation` que permite uploads fracionados usando as APIs `CreateMultipartUpload`, `UploadPart` e `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/*"
        }
    ]
}
```

## Exemplo 3: permitir somente solicitações de upload de objetos que incluam o cabeçalho `if-none-match` ou `if-match`
<a name="conditional-writes-enforce-ex3"></a>

Essa política permite que a conta 111122223333, usuário Alice, grave em *amzn-s3-demo-bucket1* se as solicitações incluírem o cabeçalho `if-none-match` ou `if-match`. Isso permite que Alice faça upload de um objeto se o nome de chave não existir no bucket. Se o nome de chave existir, Alice poderá sobrescrever o objeto se a ETag do objeto corresponder à ETag fornecida na solicitação `PUT`. 

**nota**  
Essa política também define a chave de condição `s3:ObjectCreationOperation` que permite uploads fracionados usando as APIs `CreateMultipartUpload`, `UploadPart` e `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/*"
        }
    ]
}
```

------