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.
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.
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
.
Tópicos
Exemplo 1: permitir somente uploads de objetos usando solicitações PutObject
e CompleteMultipartUpload
que incluam o cabeçalho if-none-match
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
.
{ "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
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
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
.
{ "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
/*" } ] }