Я хотел бы защитить свои документы s3 за приложением rails таким образом, чтобы, если я перейду на:
www.myapp.com/attachment/5, который должен аутентифицировать пользователя перед отображением / загрузкой документ.
Я читал аналогичные вопросы о stackoverflow, но не уверен, что видел какие-либо хорошие выводы.
Из того, что я прочитал, есть несколько вещей, которые вы можете сделать, чтобы «защитить» свои документы S3.
1) Скрыть URL-адрес. Я сделал это. Я думаю, что это хорошо, чтобы никто не мог угадать URL. Например, было бы легко «пройтись» по URL, если ваши URL S3 очевидны: https://s3.amazonaws.com/myapp.com/attachments/1/document.doc . Имея URL-адрес, например: https://s3.amazonaws.com/myapp.com/7ca/6ab/c9d/db2/727/f14/document.doc кажется намного лучше. Это замечательно, но не решает проблему передачи URL-адресов по электронной почте или на веб-сайтах.
2) Используйте истекающий URL-адрес, как показано здесь: Rails 3, paperclip + S3 - Howto Store для экземпляра и Защитить доступ Для меня, однако, это не лучшее решение, потому что URL-адрес отображается (даже на короткий период времени), и другой пользователь, возможно, со временем сможет быстро повторно использовать URL-адрес. Вы должны настроить время, чтобы разрешить загрузку, не выделяя слишком много времени на копирование. Это просто кажется неправильным решением.
3) Прокси-загрузка документа через приложение. Сначала я попытался просто использовать send_file: http://www.therailsway.com/2009/2/22/file-downloads-done-right , но проблема в том, что эти файлы могут быть только статическими / локальные файлы на вашем сервере и не обслуживаются через другой сайт (S3 / AWS). Однако я могу использовать send_data, загрузить документ в свое приложение и сразу же передать его пользователю. Проблема с этим решением очевидна - в два раза больше пропускной способности и в два раза больше времени (для загрузки документа в мое приложение, а затем обратно пользователю).
Я ищу решение, которое обеспечивает полную безопасность # 3, но не требует дополнительной полосы пропускания и времени для загрузки. Похоже, Basecamp «защищает» документы за своим приложением (через аутентификацию), и я предполагаю, что другие сайты делают что-то подобное, но я не думаю, что они используют мое решение №3.
Мы будем очень благодарны за предложения.
ОБНОВЛЕНИЕ :
Я выбрал четвертое решение:
4) Используйте политики корзины Amazon для управления доступом к файлам на основе реферера: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html
ОБНОВЛЕНИЕ СНОВА:
Скважину №4 можно легко обойти с помощью инструмента разработчика браузеров. Так что я все еще ищу твердое решение.