Я бы хотел защитить мои s3-документы за помощью rails app, чтобы, если я перейду к:
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.
Предложения были бы с благодарностью.
UPDATE
Я пошел с 4-м решением:
4) Для управления доступом к файлам на основе referrer используйте политики amazon bucket: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html
UPDATE AGAIN:
Ну # 4 можно легко обойти с помощью инструмента разработчика браузеров. Поэтому я все еще ищут прочное решение.