

# Política POST
<a name="sigv4-HTTPPOSTConstructPolicy"></a>

**Topics**
+ [Expiration](#sigv4-HTTPPOSTExpiration)
+ [Coincidencia de condiciones](#sigv4-ConditionMatching)
+ [Condiciones](#sigv4-PolicyConditions)
+ [Secuencia de escape de caracteres](#sigv4-HTTPPOSTEscaping)

La política necesaria para realizar solicitudes autenticadas mediante HTTP POST es un documento con codificación UTF-8 y base64 escrito en Notación de objetos de JavaScript (JSON) que especifica las condiciones que debe cumplir la solicitud. Según cómo diseñe el documento de la política, puede controlar la granularidad del acceso por carga, por usuario, para todas las cargas o de acuerdo con otros diseños que se ajusten a sus necesidades.

En esta sección, se describe la política POST. Para ver ejemplos de cálculos de firmas mediante la política POST, consulte [Ejemplo: carga basada en el navegador con HTTP POST (con AWS Signature Version 4)](sigv4-post-example.md).

**nota**  
Aunque el documento de política es opcional, recomendamos encarecidamente que se utilice para controlar lo que se permite en la solicitud. Si hace que se pueda escribir en el bucket públicamente, no tendrá ningún control sobre qué usuarios pueden escribir en el bucket.  
 

A continuación, se muestra un ejemplo de un documento de política POST.

```
1. { "expiration": "2007-12-01T12:00:00.000Z",
2.   "conditions": [
3.     {"acl": "public-read" },
4.     {"bucket": "johnsmith" },
5.     ["starts-with", "$key", "user/eric/"],
6.   ]
7. }
```

La política POST siempre contiene los elementos `expiration` y `conditions`. La política de ejemplo usa dos tipos de coincidencia de condiciones (coincidencia exacta y coincidencia por prefijo). En las secciones siguientes, se describen estos elementos.

## Expiration
<a name="sigv4-HTTPPOSTExpiration"></a>

El elemento de `expiration` especifica la fecha de vencimiento y la hora de la política POST en el formato de fecha ISO8601 GMT. Por ejemplo, `2013-08-01T12:00:00.000Z` especifica que la política POST no es válida después de la medianoche GMT del 1 de agosto de 2013.

## Coincidencia de condiciones
<a name="sigv4-ConditionMatching"></a>

A continuación, se incluye una tabla en la que se describen los tipos de coincidencia de condiciones que puede utilizar para especificar las condiciones de la política POST (que se describen en la siguiente sección). Aunque debe especificar al menos una condición para cada campo del formulario que especifica en el formulario, puede crear criterios de coincidencia más complejos especificando varias condiciones para un campo de formulario.


|  Tipo de coincidencia de condiciones |  Descripción  | 
| --- | --- | 
| Coincidencias exactas | El valor del campo del formulario debe coincidir con el valor especificado. En este ejemplo se indica que la ACL se debe establecer en public-read:<pre>{"acl": "public-read" }</pre><br />Este ejemplo es una alternativa para indicar que la ACL se debe establecer en public-read:<pre>[ "eq", "$acl", "public-read" ]</pre> | 
| Empieza por | El valor debe empezar por el valor especificado. En este ejemplo, se indica que la clave de objeto debe empezar con user/user1:<pre>["starts-with", "$key", "user/user1/"]</pre> | 
| Tipos de contenido coincidentes en una lista separada por comas | Los valores de los tipos de contenido de una condición `starts-with` que incluyen comas se interpretan como listas. Cada valor de la lista debe cumplir la condición para que se cumpla toda la condición. Por ejemplo, se proporciona la siguiente condición:<pre>["starts-with", "$Content-Type", "image/"]</pre><br />El valor siguiente cumpliría la condición:<pre>"image/jpg,image/png,image/gif"</pre><br />El valor siguiente no cumpliría la condición:<pre>["image/jpg,text/plain"]</pre>Los elementos de datos distintos de `Content-Type` se tratan como cadenas, independientemente de la presencia de comas. | 
| Coincidencia con cualquier contenido | Para configurar la política POST para permitir cualquier contenido dentro de un campo de formulario, utilice `starts-with` con un valor vacío (“”). Este ejemplo permite cualquier valor para `success_action_redirect`:<pre>["starts-with", "$success_action_redirect", ""]</pre> | 
| Especificación de rangos | Para campos de formulario que aceptan rangos, separe el límite superior e inferior con una coma. Este ejemplo permite un tamaño de archivo de 1 a 10 MiB:<pre>["content-length-range", 1048576, 10485760]</pre> | 

las condiciones específicas admitidas en una política POST se describen en [Condiciones](#sigv4-PolicyConditions).

## Condiciones
<a name="sigv4-PolicyConditions"></a>

Las `conditions` en una política POST son una matriz de objetos, cada uno de los cuales se utiliza para validar la solicitud. Puede usar estas condiciones para restringir lo que está permitido en la solicitud. Por ejemplo, las condiciones de política anteriores requieren lo siguiente:

 
+ La solicitud debe especificar el nombre del bucket `johnsmith`.
+ El nombre de la clave del objeto debe tener el prefijo `user/eric`.
+ La ACL del objeto debe estar configurada en `public-read`.

Cada campo de formulario que especifique en un formulario (excepto `x-amz-signature`, `file`, `policy` y los nombres de campo que tienen un prefijo `x-ignore-`) debe aparecer en la lista de condiciones. 

**nota**  
 Todas las variables en el formulario se expanden antes de validar la política POST. Por lo tanto, todas las coincidencias de condiciones deben estar contra los campos de formulario expandidos. Suponga que desea restringir el nombre de la clave del objeto a un prefijo específico (`user/user1`). En este caso, defina el campo del formulario de clave en `user/user1/${filename}`. La política POST debería ser `[ "starts-with", "$key", "user/user1/" ]` (no ingrese `[ "starts-with", "$key", "user/user1/${filename}" ]`). Para obtener más información, consulte [Coincidencia de condiciones](#sigv4-ConditionMatching). 

Las condiciones de los documentos de la política se describen en la tabla siguiente.


| Nombre del elemento | Descripción | 
| --- | --- | 
| acl | Especifica el valor de ACL que se debe utilizar en el envío del formulario. <br />Esta condición admite la coincidencia exacta y el tipo de coincidencia de condiciones `starts-with` que se analizan en la siguiente sección. | 
| bucket | Especifica el nombre del bucket aceptable. <br />Esta condición admite el tipo de coincidencia exacta de condiciones. | 
| content-length-range | El tamaño mínimo y máximo permitido para el contenido cargado. <br />Esta condición admite el tipo de coincidencia de condiciones `content-length-range`. | 
| Cache-Control`Content-Type`<br />`Content-Disposition`<br />`Content-Encoding`<br />`Expires` | Encabezados específicos de REST. Para obtener más información, consulte [POST Object](RESTObjectPOST.md).<br />Esta condición admite el tipo de coincidencia exacta y de coincidencia de condiciones `starts-with`. | 
| key | El nombre de clave aceptable o un prefijo del objeto cargado.<br />Esta condición admite el tipo de coincidencia exacta y de coincidencia de condiciones `starts-with`. | 
| success\_action\_redirect`redirect` | URL al que el cliente es redirigido después de la carga exitosa.<br />Esta condición admite el tipo de coincidencia exacta y de coincidencia de condiciones `starts-with`. | 
| success\_action\_status | El código de estado devuelto al cliente después de la carga exitosa si no se especifica `success_action_redirect`.<br />Esta condición admite la coincidencia exacta. | 
| x-amz-algorithm | El algoritmo de firma que se debe utilizar durante el cálculo de la firma. Para AWS Signature Version 4, el valor es `AWS4-HMAC-SHA256`. <br />Esta condición admite la coincidencia exacta. | 
| x-amz-credential | Las credenciales que utilizó para calcular la firma. Proporciona el ID de clave de acceso y la información de alcance que identifica la región y el servicio para los que es válida la firma. Debe ser el mismo alcance que utilizó al calcular la clave de firma para el cálculo de la firma. <br />Es una cadena del formulario siguiente:<br />`{{<your-access-key-id>}}/{{<date>}}/{{<aws-region>}}/{{<aws-service>}}/aws4_request`<br />Por ejemplo:<br />` AKIAIOSFODNN7EXAMPLE/20130728/us-east-1/s3/aws4_request`<br />Para Amazon S3, la cadena aws-service es `s3`. Para obtener una lista de las cadenas de `aws-region` de Amazon S3, consulte [Regiones y puntos de conexión](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) en *Referencia general de AWS*. Esto es obligatorio si se incluye un documento de política POST con la solicitud.<br />Esta condición admite la coincidencia exacta. | 
| x-amz-date | El valor de la fecha especificado en la cadena con formato ISO8601. Por ejemplo, `20130728T000000Z`. La fecha debe ser la misma que utilizó al crear la clave de firma para el cálculo de la firma.<br />Esto es obligatorio si se incluye un documento de política POST con la solicitud.<br />Esta condición admite la coincidencia exacta. | 
| x-amz-security-token | Token de seguridad de Amazon DevPay. <br />Cada solicitud que utiliza Amazon DevPay requiere dos campos de formulario `x-amz-security-token`: uno para el token de producto y otro para el token de usuario. Como consecuencia, los valores deben estar separados por comas. Por ejemplo, si el token de usuario es `eW91dHViZQ==` y el token del producto es `b0hnNVNKWVJIQTA=`, se debe establecer la entrada de política POST en: `{ "x-amz-security-token": "eW91dHViZQ==,b0hnNVNKWVJIQTA=" }`.<br />Para obtener más información sobre Amazon DevPay, consulte [Uso de DevPay](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingDevPay.html) en la *Guía del usuario de Amazon Simple Storage Service*. | 
| x-amz-meta-\* | Metadatos especificados por el usuario. <br />Esta condición admite el tipo de coincidencia exacta y de coincidencia de condiciones `starts-with`.  | 
| x-amz-\* | Consulte POST Object ([POST Object](RESTObjectPOST.md) para otros encabezados `x-amz-*`). <br />Esta condición admite la coincidencia exacta. | 

**nota**  
 Si el conjunto de herramientas agrega más campos de formulario (por ejemplo, Flash agrega `filename`), debe agregarlos al documento de política POST. Si puede controlar esta funcionalidad, añada el prefijo `x-ignore-` al campo para que Amazon S3 omita la característica y no afecte futuras versiones de esta característica. 

## Secuencia de escape de caracteres
<a name="sigv4-HTTPPOSTEscaping"></a>

Los caracteres a los que se debe aplicar una secuencia de escape en un documento de política POST se describen en la tabla siguiente.


|  Secuencia de escape  |  Descripción  | 
| --- | --- | 
| \\\\ | Barra inversa | 
| \\$ | Símbolo de dólar | 
| \\b | Retroceso | 
| \\f | Salto de página | 
| \\n | Nueva línea | 
| \\r | Salto de línea | 
| \\t | Tabulador horizontal | 
| \\v | Tabulador vertical | 
| \\u{{xxxx}} | Todos los caracteres Unicode | 

Ahora que ya conoce los formularios y las políticas y entiende cómo funciona la firma, puede probar un ejemplo de carga de POST. Debe escribir el código para calcular la firma. El ejemplo proporciona un formulario de muestra y una política POST que puede usar para probar los cálculos de firma. Para obtener más información, consulte [Ejemplo: carga basada en el navegador con HTTP POST (con AWS Signature Version 4)](sigv4-post-example.md).