signin pricing funciona como cloudfront aws amazon-web-services amazon-cloudfront

amazon-web-services - pricing - aws signin amazon



Múltiples declaraciones de política para la política personalizada de CloudFront(cookies firmadas) (5)

AWS admite oficialmente solo una declaración en una sola política. Sin embargo, hay una solución alternativa si necesita 4 o menos declaraciones . Para cada declaración, puede crear un par separado de una cookie de CloudFront-Policy y una firma de CloudFront con su propia ruta . El tamaño de este par de cookies sería de alrededor de 600-900 bytes. Dado que el encabezado de la cookie tiene un límite de alrededor de 4Kb, definitivamente no puede usar más de 5 pares. Usar 5 pares tiene un cambio alto para alcanzar el límite del encabezado.

¿Es posible crear una política con varias declaraciones cuando se usa una política personalizada de CloudFront para cookies firmadas (no URL firmadas)?

He leído la documentation y, aunque todos los ejemplos solo tienen una declaración, no puedo ver una regla explícita con respecto al número de declaraciones permitidas.

Si no es posible tener varias declaraciones de políticas, será difícil dar a un usuario particular acceso con cookies firmadas, por ejemplo, cinco archivos aleatorios que usen solo la seguridad de CloudFront. Cualquier consejo sobre cómo hacer eso sería apreciado.

Esta pregunta se publica de forma cruzada aquí: https://forums.aws.amazon.com/thread.jspa?threadID=223440&tstart=0


Es molesto que no haya nada en los documentos que diga que solo puedes tener un elemento en la matriz de Statement , ¡pero eso es AWS docs para ti!

De todos modos, una forma de evitar esta limitación, es establecer múltiples cookies en diferentes niveles de ruta. Deberá generar una cookie firmada para cada ruta que desee y configurar cada cookie en la aplicación que esté usando. Puede imaginar un punto final en su api que genere todas las cookies necesarias, las establezca todas en el encabezado, y su front end luego configure todas esas cookies.

Más específicamente, querrá crear una cookie de CloudFront-Key-Pair-Id con su id de clave de acceso de Cloudfront y el alcance de la path de las cookies al nivel más alto en el que se establecerán sus políticas. Utilice el SDK de AWS CloudFront para firmar una cookie para cada Resource . Cree un par de cookies de CloudFront-Policy y CloudFront-Signature para cada ruta que corresponda a la ruta de Resource .

Digamos que tengo los siguientes dos Resource y quiero darles acceso a ambos: https://cfsub.cloudfront.net/animals/dogs/* https://cfsub.cloudfront.net/animals/cats/*

Yo crearía:

  • 1 cookie de CloudFront-Key-Pair-Id con una ruta de /animals
  • 1 cookie de CloudFront-Policy con la política base64 generada al ejecutar la política personalizada de los perros a través del firmante de cloudfront. Esta cookie debe tener un camino de /animals/dogs .
  • 1 CloudFront-Policy mismo para los gatos.
  • 1 cookie de CloudFront-Signature con la firma generada al ejecutar la política personalizada de perros a través del firmante de cloudfront. Esta cookie debe tener un camino de /animals/cats
  • 1 CloudFront-Signature mismo para gatos.

Todas estas cookies deben tener un dominio establecido en su dominio de cfsub.cloudfront.net

Envíe todos aquellos hasta su aplicación web o aplicación móvil.


No puedo dar información definitiva sobre este tema, es una pregunta explícita sobre la cual alguien en Amazon puede dar información relevante.

Dicho esto, creo que las políticas de CloudFront pueden incluir varias declaraciones. Su esquema es similar a las políticas de IAM, pero no creo que funcione exactamente como usted espera.

Con las políticas de IAM, puede adjuntar varias declaraciones a una política, pero están OED en todas las declaraciones:

En general, cada declaración en una política incluye información sobre un solo permiso. Si su política incluye varias declaraciones, se aplica un OR lógico en todas las declaraciones en el momento de la evaluación. De manera similar, si se aplican varias políticas a una solicitud, se aplica un OR lógico en todas las políticas en el momento de la evaluación ... Documentación de políticas IAM

En la documentación a la que se vinculó, el valor de la clave de la Statement es una matriz en la que puede incluir varias declaraciones, pero se ORARÁ en ellas. Hay más información sobre cómo se evalúan las políticas, lo que ayudará a limitar el acceso a los archivos en los que está trabajando.

Dar acceso a cinco archivos aleatorios será un desafío que no creo que se pueda lograr solo con las políticas de acceso de CloudFront. Las condiciones disponibles no están diseñadas teniendo en cuenta este caso de uso.

Como señaló Rodrigo M , el uso de la API de AWS a partir de un script puede lograr lo que está intentando hacer. Desafortunadamente, esa es la única ruta que puedo imaginar que logrará lo que estás intentando.

Si encuentra una forma de realizar esta tarea utilizando solo las políticas de CloudFront (sin otros servicios de AWS), estaré bastante interesado en la solución. Sería una política creativa y bastante útil.


Para tu información

Me enfrenté con el mismo problema y me contacté con el equipo de soporte oficial de AWS.

Hello, thanks for offering us a great service. I am an software engineer from Japan. Can we have multiple custom policies, like below syntax? { "Statement": [ { ... }, { ... }, { ... }, ] } I have searched on the web, and found ones who are trying to do the same thing and forums/Q&A as well. However we found no answer from AWS official support teams nor documents saying about that. JSON syntax is array, so it seems to work with multiple statements but do not work. So, if it does not work, would you add a sentence about that on the official document?

Y luego, obtuve la respuesta ayer:

I just heard back this morning. You''re correct, adding more than one statement to a custom policy is not supported. I''m updating the documentation now.

Por lo tanto, creo que en pocos días se actualizará la documentación de que no se pueden establecer varias declaraciones de política para la Política personalizada de CF para cookies previamente firmadas.


Tengo un requisito similar y he probado que AWS CloudFront con política enlatada incluye varios recursos para restringir el acceso a diferentes URL. La política es un objeto json válido, se ve a continuación:

{ "Statement":[ { "Resource":"https://qssnkgp0nnr9vo.cloudfront.net/foo/*", "Condition":{ "DateLessThan":{ "AWS:EpochTime":1492666203 } } }, { "Resource":"https://qssnkgp0nnr9vo.cloudfront.net/bar/*", "Condition":{ "DateLessThan":{ "AWS:EpochTime":1492666203 } } } ] }

Después de firmar la política y enviar una solicitud a CloudFront, resultó que AWS CloudFront no la admite. Obtuvo una respuesta al 403 que decía que era una política con formato incorrecto.

HTTP/1.1 403 Forbidden <?xml version="1.0" encoding="UTF-8"?><Error><Code>MalformedPolicy</Code><Message>Malformed Policy</Message></Error>