2009-06-04 25 views

Respuesta

0

Realmente no. Podría ejecutar una instancia EC2 y un proxy a través de eso.

+1

uhhhhh. no. que derrota el propósito de un CDN. – FlavorScape

3

Utilizo Apache RewriteMap para reasignar enlaces relativos a las extensiones de archivo seleccionadas - * .jpg, * .gif, * swf, * .fla a Cloudfront. Básicamente hace que la url de sus imágenes presente como enlaces relativos a su sitio. No impide el descubrimiento de la url S3/cloudfront totalmente, solo agrega una capa de dificultad para el ladrón.

Puede valer la pena intentarlo, aplique las restricciones de hotlink a través de htaccess con el método anterior en su lugar. No lo he probado yo mismo.

+0

¿Eh? ¿No significa eso que cada solicitud de imagen tiene que ir a su servidor antes de que pueda ir al servidor de CloudFront? Si es así, ¿no derrota eso al punto de utilizar un CDN? (No sería para archivos realmente grandes como video, ¿pero para imágenes?) –

+0

La solicitud llegará a su servidor web y se le indicará al navegador dónde debe ir a buscar el archivo, pero el historial del navegador nunca se actualiza con la URL real a la CDN. Este es esencialmente el mismo truco detrás de las "rutas" en la mayoría de los marcos de controlador front-end, pero en este caso la solicitud nunca se reenvía al servidor de aplicaciones, solo a Apache. – Claude

+0

@ Clade, si en lugar de navegador, se usan gestores de descarga, o se usa algo como curl/wget, ¿la redirección no será transparente y, por lo tanto, será una forma de habilitar la vinculación directa? – icarus74

1

Hay un buen tutorial here. Asegúrese de revisar los comentarios, ya que hay un espacio en blanco en el código del sitio web que hace que la solución no funcione.

0

Hotlinking es una de las razones Amazon creó Cloudfront. Cloudfront es mucho más rápido que. Hice una reseña sobre ella que puedes ver aquí.

http://blog.sat.iit.edu/2011/12/amazon-aws-s3-vs-cloudwatch-performance-grudgematch/

edición: S3 y Cloudfront ambos utilizan el mismo tipo de política de cubo para asegurarse de que la petición viene de la dirección URL correcta. Sin embargo, Cloudfront es aún más rápido.

+1

Cloudfront no evita hotlinking o respeta las políticas de S3 –

15

Necesita una política de depósito que le permita referidos de su (s) dominio (es) y niega referencias que no son de sus dominios. Descubrí que las imágenes se pueden vincular si no se incluye la denegación explícita: muchas guías y ejemplos solo dan la política de permitir y no mencionan la parte de denegación.

Aquí es mi política, sólo cambia CUBO-NAME y SU-sitio web a sus propios detalles:

{ 
    "Version": "2008-10-17", 
    "Id": "", 
    "Statement": [ 
    { 
     "Sid": "Allow in my domains", 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::BUCKET-NAME/*", 
     "Condition": { 
     "StringLike": { 
      "aws:Referer": [ 
      "http://www.YOUR-WEBSITE.com/*" 
      ] 
     } 
     } 
    }, 
    { 
     "Sid": "Deny access if referer is not my sites", 
     "Effect": "Deny", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::BUCKET-NAME/*", 
     "Condition": { 
     "StringNotLike": { 
      "aws:Referer": [ 
      "http://www.YOUR-WEBSITE.com/*" 
      ] 
     } 
     } 
    } 
    ] 
} 
+0

Gracias por esto. Esto realmente me ayudó y funcionó bien. Mi única sugerencia es que quizás también simplemente agregue una entrada para "http://YOUR-WEBSITE.com/*" a la respuesta solo para cubrir todas las bases ya que ahí es donde estaba mi hipo. Saludos por el guion perfecto sin embargo. – Cheeky

+0

Esto funciona muy bien, pero ¿cómo se permiten las referencias vacías? Al vincular imágenes a través de CSS, la referencia está vacía y las imágenes no se muestran. – prophoto

+0

¡Perfecto! Me salvaste – Ricardo

1

Está en su official docs

Cambio examplebucket a su nombre de depósito, y example.com a su dominio.

"Version":"2012-10-17", 
"Id":"http referer policy example", 
"Statement":[ 
    { 
    "Sid":"Allow get requests originating from www.example.com and example.com.", 
    "Effect":"Allow", 
    "Principal":"*", 
    "Action":"s3:GetObject", 
    "Resource":"arn:aws:s3:::examplebucket/*", 
    "Condition":{ 
     "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} 
    } 
    } 
] 
}