2012-01-27 3 views
3

Я пытаюсь заблокировать хотлинкинг моих файлов Cloudfront из определенных доменов. Благодаря сочетанию онлайн примеров и собственного генератора политики Amazon, я пришел с этим:Есть ли что-то не так с моей ведрою в Amazon S3?

{ 
    "Version": "2008-10-17", 
    "Id": "http referer policy", 
    "Statement": [{ 
    "Sid": "Block image requests", 
    "Action": "s3:GetObject", 
    "Effect": "Deny", 
    "Resource": "arn:aws:s3:::mybucket/subdir/*", 
    "Condition": { 
     "StringLike": { 
     "aws:Referer": [ 
      "http://example.com/*" 
     ] 
     } 
    }, 
    "Principal": { 
     "AWS": "*" 
    } 
    }] 
} 

Я послал запрос недействительности для файла в подкаталоге mybucket, затем через несколько минут пытался перезагрузить изображение с заголовок реферирования по-прежнему отправляется (проверяется с помощью инструментов разработчика Chrome). Делал жесткую перезагрузку с помощью Ctrl + F5, а заголовки ответов содержали «X-Cache: Miss from cloudfront», поэтому он определенно получает последнюю версию изображения.

Но изображение все еще отображается хорошо и не заблокировано. У генератора политики не было опции для клавиши «aws: Referer», но она находится в Amazon docs here. Я сделал что-то не так?

+0

Как вы фактически разрешили CloudFront доступ к вашим объектам в первую очередь (см. Мой обновленный ответ для фона)? –

ответ

1

Update 2

Пересматривая свою политику Интересно, как вы на самом деле разрешен доступ CloudFront к вашим объектам, в первую очередь? Не случайно ли вы пошли на общий совет, например. Start Using CloudFront with Amazon S3, что Вы должны убедиться, что ваши права объекта установлены на Сделать все Public для каждого объекта в вашем ковре Amazon S3.

В этом случае вы могли бы наткнуться на связанную с этим ошибку из-за взаимодействия между тремя доступными механизмами доступа S3, которые могут быть довольно запутанными. Это рассматривается, например. в Using ACLs and Bucket Policies Together:

Если у вас есть списки контроля доступа и политики ковшеобразные присвоенные ведрами, Amazon S3 оценивает существующие Amazon S3 списки контроля доступа, а также политики ковшом при определении прав доступа вашего аккаунта на Amazon S3 ресурса. Если учетная запись имеет доступ к ресурсам, указанным ACL или политикой , они могут получить доступ к запрашиваемому ресурсу.

Следовательно вам нужно будет перенастроить ACL к политике ковша (т.е. позволяет CloudFront доступа до отрицая через AWS: реферер) и удалить чрезмерно щедрый ACL после этого.

Удачи вам!


Update 1

Хорошо, теперь с кэшированием клиента из пути, я боюсь, что это будет нетривиальным (как видно при поиске aws:referer в форумах AWS), Таким образом, может потребоваться несколько итераций (особенно учитывая, вы исследовали тему себя уже):

  • наиболее распространенной проблемой столкнулись является leading whitespace error in the AWS documentation (что особенно раздражает, потому что простой Docum что исправление может исправить много времени впустую от имени пользователей и сотрудников службы поддержки AWS)
    • В вашей политике не обнаружена эта проблема, однако, если вы дезинфицировали реальный домен, который, возможно, заменил ошибку в вашем производственном коде на самом деле?
  • Также важно понимать, что заголовок HTTP referer не обязательно будет доступен, см., Например, Referer Hiding (таким образом, ваша политика в любом случае не предотвратит вредоносный доступ, хотя это, по-видимому, не проблема).
    • Вы уже заявили, что подтвердили ее отправку с помощью инструментов разработчика Chrome, поэтому это не относится ни к (Я упоминаю это, чтобы подчеркнуть пониженный уровень безопасности).

политика выглядит хорошо на первый взгляд, - прежде чем копать дальше в этом направлении, хотя, я бы рекомендовал, чтобы убедиться, что вы на самом деле в обход кэша Chrome успешно, который notoriously less straight forward, чем люди привыкли из других браузеров; в частности, Ctrl + F5просто перезагружает страницу, , но неBypass the cache (не надежный минимум)!

Как указано там же, вы можете использовать один из других комбинаций клавиша Чтобы перезагрузить страницу, минуя кэш (в том числе запутанных 2 Ctrl + F5 после 1-го одного Reloaded), однако, я рекомендую облегчение одной из следующие два варианта вместо:

  • инструментов разработчика Chrome предлагает специальную поддержку для просмотра без кэша - в правом нижнем углу панели панели инструментов является значок винтиком для настройки, щелкнув это вызывает наложение с панели опций, среди вы найдете опцию Отключить кеш по разделу Сеть.
  • Хрома Incognito mode (Ctrl + Shift + N) держит Google Chrome от хранения информации о сайтах, которые вы посетили, которые на сегодняшний день (может измениться в любое время, конечно), кажется, включает кэшированное содержимое, печенье, DNS и т.п., как и ожидалось, таким образом, это еще более быстрый, хотя и менее явный вариант.
+0

Нет, я уже дважды проверял в режиме инкогнито и других браузерах. – DisgruntledGoat

 Смежные вопросы

  • Нет связанных вопросов^_^