Оказывается, что ваше требование:
- Содержимое хранится в Amazon S3
- Содержание подается через Amazon CloudFront
- Материалы должны быть закрытыми, но есть способ, чтобы конкретные люди его просмотра
Это может быть сделано с использованием Предварительно Подписанные URL-адреса. Это специальные URL-адреса, которые работают только в течение ограниченного периода времени.
Когда ваше приложение определяет, что пользователь имеет право просматривать изображение, он может генерировать предварительно подписанный URL-адрес, который предоставляет доступ в течение ограниченного периода времени. Просто используйте этот URL-адрес в теге <IMG>
, как обычно.
См:
Поскольку ваш контент в Amazon S3 будет частным (так что пользователи могут не перепускной CloudFront и доступ к нему напрямую), вам также необходимо предоставить Разрешение CloudFront для доступа к содержимому с S3. См.: Using an Origin Access Identity to Restrict Access to Your Amazon S3 Content
Другой вариант, вместо того, чтобы создавать предварительно подписанный URL каждый раз, заключается в использовании Signed Cookies. Однако это не дает мелкого контроля доступа к отдельным объектам - это больше для предоставления доступа к нескольким объектам, таким как область подписки.
Существует дополнительная возможность использования защиты hotlink - хотя это не идеальный ответ, теперь можно использовать AWS WAF в сочетании с CloudFront. Я согласен с вашим ответом и рекомендую вместо этого использовать Подписанные URL-адреса, но если добавление этой функции на сайт сложно, обратитесь в WAF, чтобы быть более простым. – alexjs