Política POST
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).
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.
{ "expiration": "2007-12-01T12:00:00.000Z", "conditions": [ {"acl": "public-read" }, {"bucket": "johnsmith" }, ["starts-with", "$key", "user/eric/"], ] }
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
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 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:
Este ejemplo es una alternativa para indicar que la ACL se debe establecer en public-read:
|
|
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:
|
|
Tipos de contenido coincidentes en una lista separada por comas |
Los valores de los tipos de contenido de una condición
El valor siguiente cumpliría la condición:
El valor siguiente no cumpliría la condición:
notaLos elementos de datos distintos de |
|
Coincidencia con cualquier contenido |
Para configurar la política POST para permitir cualquier contenido dentro de un campo de formulario, utilice
|
|
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:
|
las condiciones específicas admitidas en una política POST se describen en Condiciones.
Condiciones
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.
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. Esta condición admite la coincidencia exacta y el tipo de coincidencia de condiciones |
bucket |
Especifica el nombre del bucket aceptable. 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. Esta condición admite el tipo de coincidencia de condiciones |
Cache-Control
|
Encabezados específicos de REST. Para obtener más información, consulte POST Object. Esta condición admite el tipo de coincidencia exacta y de coincidencia de condiciones |
key |
El nombre de clave aceptable o un prefijo del objeto cargado. Esta condición admite el tipo de coincidencia exacta y de coincidencia de condiciones |
success_action_redirect
|
URL al que el cliente es redirigido después de la carga exitosa. Esta condición admite el tipo de coincidencia exacta y de coincidencia de condiciones |
success_action_status |
El código de estado devuelto al cliente después de la carga exitosa si no se especifica 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 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. Es una cadena del formulario siguiente:
Por ejemplo:
Para Amazon S3, la cadena aws-service es Esta condición admite la coincidencia exacta. |
x-amz-date |
El valor de la fecha especificado en la cadena con formato ISO8601. Por ejemplo, Esto es obligatorio si se incluye un documento de política POST con la solicitud. Esta condición admite la coincidencia exacta. |
x-amz-security-token |
Token de seguridad de Amazon DevPay. Cada solicitud que utiliza Amazon DevPay requiere dos campos de formulario Para obtener más información sobre Amazon DevPay, consulte Uso de DevPay en la Guía del usuario de Amazon Simple Storage Service. |
x-amz-meta-* |
Metadatos especificados por el usuario. Esta condición admite el tipo de coincidencia exacta y de coincidencia de condiciones |
x-amz-* |
Consulte POST Object (POST Object para otros encabezados 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
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 |
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).