2016-04-15 4 views
0

У меня есть веб-сайт, размещенный на Heroku, и используя Ruby on Rails с драгоценным камнем paperclip.Настроить сообщение S3 403

Я пытаюсь предотвратить хотлинкинга все мои файлы в моем S3 ведро, так что у меня есть все на частном и только позволяет пользователю получить доступ с помощью истекающий URL

Я хочу, чтобы обеспечить более удобную страницу когда пользователь пытается повторно использовать истекший URL. В настоящее время отображается следующее сообщение:

<Error> 
<Code>AccessDenied</Code> 
<Message>Request has expired</Message> 
<X-Amz-Expires>300</X-Amz-Expires> 
<Expires>2016-04-15T19:41:33Z</Expires> 
<ServerTime>2016-04-15T19:41:39Z</ServerTime> 
<RequestId>D5DD935553A2CF88</RequestId> 
<HostId> 
55+rFtFbksDMyBWf5cWwgJ+aWvJKwe5umSXgTEWYKgfoT5QR5sbJY9fRNFIiBAqd35OR2MoiCzQ= 
</HostId> 
</Error> 

Есть ли способ настроить страницу с ошибкой на S3?

ответ

1

S3 предлагает собственные страницы ошибок через конечные точки веб-сайта - но не конечные точки REST ... но подписанные URL-адреса работают только с конечными точками REST, а не с конечными точками веб-сайта.

Итак, нет, нет прямого решения этой проблемы, используя только S3.

Одним из вариантов является использование CloudFront, который позволяет заменять стандартные страницы ошибок на пользовательскую статическую страницу, но содержимое ошибки теряется, а все, что у вас есть, является статической страницей. Вы также должны использовать механизм подписки на URL-адрес CloudFront, который отличается от S3 (хотя он также имеет некоторые преимущества, такие как поддержка подстановочных знаков в подписанном URL-адресе).

В this answer to a question that is similar, but not a complete duplicate Я продемонстрировал, как я использовал преобразование XSL для «стиля» XML-ошибки S3, путем изменения XML, возвращаемого в браузер, путем инъекции ссылки на таблицу стилей XSL и позволяя обозревателю сделать остальное работы ... см. скриншоты.

Я очень доволен решением, хотя у него есть то, что некоторые люди считают недостатком - для этого требуется, чтобы все запросы S3 обслуживались через прокси-сервер под управлением HAProxy в EC2. Для экземпляра EC2 есть небольшая дополнительная стоимость, но без дополнительной платы за пропускную способность, так как передача из S3 в EC2 бесплатна, а передача из EC2 в Интернет - это та же цена, что и переход от S3 к Интернету. С помощью этой настройки все еще работают подписанные URL S3. Дополнительные преимущества в моем приложении, что это позволяет мне использовать мои сертификаты SSL со статическим содержимым S3 (хотя эта возможность также доступна через CloudFront) и тот факт, что журналы доступа прокси находятся в режиме реального времени.

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