Что-то не так с моей политикой корзины Amazon S3? - PullRequest
3 голосов
/ 27 января 2012

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

{
  "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 здесь . Я что-то здесь не так сделал?

1 Ответ

1 голос
/ 27 января 2012

Обновление 2

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

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

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

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

Удачи!


Обновление 1

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

  • Наиболее распространенной проблемой, с которой сталкиваются, является ведущая ошибка с пробелами в документации AWS (что особенно раздражает, поскольку простое исправление документации устранит много потерянного времени как для пользователей, так и для сотрудников службы поддержки AWS).
    • Однако в вашей политике эта проблема не возникает, если вы очистили реальный домен, возможно, вы заменили ошибку в рабочем коде?
  • Также важно понимать, что заголовок HTTP referer не обязательно будет доступен, см., Например. Referer скрывается (таким образом, ваша политика не предотвратит злонамеренный доступ в любом случае, хотя это, очевидно, не проблема)
    • Вы уже заявили, что вы проверили его на отправку с помощью инструментов разработчика Chrome, поэтому это также не относится (я упоминаю об этом, чтобы подчеркнуть пониженный уровень безопасности).

С первого взгляда политика выглядит хорошо - прежде чем углубляться в это направление, я бы порекомендовал убедиться, что вы фактически успешно обходите кеш Chrome, что на общеизвестно менее прямолинейно , чем люди используют из других браузеров; в частности, Ctrl + F5 просто перезагружает страницу, , но не Обход кеша (по крайней мере, не надежно)!

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

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