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.
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.
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
.
Temas
Ejemplo 1: permitir solo cargas de objetos mediante solicitudes PutObject
y CompleteMultipartUpload
que incluyan el encabezado if-none-match
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
.
{ "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
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
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 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
.
{ "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
/*" } ] }