View a markdown version of this page

Política POST - Amazon Simple Storage Service

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:

{"acl": "public-read" }

Este ejemplo es una alternativa para indicar que la ACL se debe establecer en public-read:

[ "eq", "$acl", "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:

["starts-with", "$key", "user/user1/"]

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:

["starts-with", "$Content-Type", "image/"]

El valor siguiente cumpliría la condición:

"image/jpg,image/png,image/gif"

El valor siguiente no cumpliría la condición:

["image/jpg,text/plain"]
nota

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:

["starts-with", "$success_action_redirect", ""]

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:

["content-length-range", 1048576, 10485760]

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 starts-with que se analizan en la siguiente sección.

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 content-length-range.

Cache-Control

Content-Type

Content-Disposition

Content-Encoding

Expires

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 starts-with.

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 starts-with.

success_action_redirect

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 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.

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.

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:

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

Por ejemplo:

AKIAIOSFODNN7EXAMPLE/20130728/us-east-1/s3/aws4_request

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 en Referencia general de AWS. Esto es obligatorio si se incluye un documento de política POST con la solicitud.

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.

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 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=" }.

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 starts-with.

x-amz-*

Consulte POST Object (POST Object para otros encabezados x-amz-*).

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

\uxxxx

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).