Я бы хотел защитить свои документы 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 - Как сохранить экземпляр и защитить доступ
Для меня, однако, это не очень хорошее решение, потому что URL выставлен (даже в течение короткого периода времени), и другой пользователь может, возможно, вовремя повторно использовать URL. Вы должны настроить время для загрузки, не выделяя слишком много времени на копирование. Это кажется неправильным решением.
3) Прокси загрузки документа через приложение. Сначала я попытался просто использовать send_file: http://www.therailsway.com/2009/2/22/file-downloads-done-right, но проблема в том, что эти файлы могут быть только статическими / локальными файлами на вашем сервере и не обслуживаться через другой сайт (S3 / AWS). Однако я могу использовать send_data, загрузить документ в мое приложение и сразу же передать документ пользователю. Проблема с этим решением очевидна - вдвое больше пропускной способности и вдвое больше времени (чтобы загрузить документ в мое приложение, а затем обратно к пользователю).
Я ищу решение, которое обеспечивает полную безопасность # 3, но не требует дополнительной полосы пропускания и времени для загрузки. Похоже, Basecamp «защищает» документы за своим приложением (посредством аутентификации), и я предполагаю, что другие сайты делают что-то подобное, но я не думаю, что они используют мое решение №3.
Предложения будут с благодарностью.
UPDATE
Я пошел с 4-м решением:
4) Использование политик Amazon для управления доступом к файлам на основе реферера:
http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html
ОБНОВЛЕНИЕ СНОВА:
Ну # 4 можно легко обойти через инструмент разработчика браузера. Так что я все еще в поисках твердого решения.