AWS S3/Ruby on Rails/ heroku: Дыра в безопасности моего приложения

У меня есть маршрут в моей конфигурации, который говорит, что для страницы, скажем /secure, требуется вход в систему (сделанный через authlogic). Об этом позаботится фильтр before_filter в моем контроллере. То работает нормально, страница и ее ресурсы имеют ограниченный доступ - через приложение.

Проблема в том, что мы используем Amazon S3 для хранения этого приложения (основанного на refinerycms), развернутого на героку. У меня есть ведро и оно работает нормально.

Однако любой ресурс, вставленный в защищенную часть приложения, доступен напрямую через браузер. Другими словами, страница /secure содержит такие элементы, как файлы PDF. Хотя через приложение ресурсы защищены, эти файлы PDF доступны из любой точки Интернета (пример URL): http://s3.amazonaws.com/my_bucket/images/1234/the_file_what_should_be_secure.pdf

Могу ли я выполнить детальное управление доступом на S3? Должен ли я создавать новое ведро? В идеале хотелось бы установить на своем ресурсе флаг, делающий его невидимым в Интернете - не знаю.

Приветствуются любые предложения.

P.S. У openid.org есть сертификат ssl с истекшим сроком действия, поэтому необходимо создать новую пустую учетную запись, так как я не мог войти


person transient_loop    schedule 23.10.2010    source источник


Ответы (4)


Самое простое и легкое решение — просто назвать ваши ресурсы S3 случайными именами файлов, которые невозможно угадать, а затем предоставить секретные URL-адреса только тем людям, у которых должен быть доступ.

Так работают фотографии Facebook и многие другие сайты (нет никакой конфиденциальности или безопасности, кроме неясности имен отдельных файлов).

person tfe    schedule 23.10.2010
comment
Интересный подход, спасибо. Я получил ответ на форуме AWS, чтобы попробовать их документацию по ACL ... Если это покажет, что это много работы, я мог бы пойти по этому пути! - person transient_loop; 24.10.2010
comment
Пожалуйста. Насколько я знаю списки управления доступом AWS, они не совсем подходят для такого использования, но вам следует изучить их. Не забудьте вернуться и принять этот ответ, если он вам помог. - person tfe; 24.10.2010
comment
Поскольку у клиента был ограниченный бюджет, я решил выбрать это решение, так как оно самое быстрое... - person transient_loop; 06.12.2010

Вы можете попробовать то, что сказано на этой странице:

http://thewebfellas.com/blog/2009/8/29/protecting-your-paperclip-downloads

Подробная информация находится в разделе «Больше нет потоковой передачи, время для перенаправления».

Обзор. S3 имеет четыре стандартные политики доступа. Используя политику чтения с проверкой подлинности, S3 предоставляет способ создания URL-адреса с проверкой подлинности для частного контента, который работает только в течение определенного периода времени.

На самом деле я этого не делал, поэтому, пожалуйста, дайте мне знать, если это сработает для вас. :-)

person Adam21e    schedule 28.10.2010

Если вы используете скрепку, вы можете ограничить доступ к объектам, хранящимся на Amazon S3, по истечении срока действия URL-адреса. (если вы не возражаете использовать срок действия URL-адреса)

Вот вики от Thoughtbot/скрепки на GitHub

https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3

Кроме того, в нижней части этой страницы есть несколько полезных ссылок, которые вы, возможно, не захотите пропустить.

person Jim Chang    schedule 11.08.2011

Возможно, я не понимаю, чего вы пытаетесь достичь, но у S3 есть доступ к разрешениям, для которого требуется, чтобы ключ шифрования был в URL-адресе, который вы предоставляете пользователю. При использовании драгоценного камня aws-s3 этот параметр включен по умолчанию. Поэтому вы не сможете получить доступ к файлам, если пользователь не использует ссылку с зашифрованным ключом, встроенным в нее. Это потребует от вас убедиться, что файл настроен только на авторизованный доступ.

Дополнительную информацию о драгоценном камне можно найти на http://amazon.rubyforge.org/. Ищите документацию, связанную с контролем доступа (я думаю, вам нужно "authenticated_read").

person Lukas    schedule 24.10.2010
comment
Верно! Теперь я узнал, что у меня есть ACL на моем ведре. Там я могу установить права для всех, аутентифицированных пользователей и my_username. Для всех и аутентифицированных пользователей в ACL указано «нет чтения/записи/полного управления». Таким образом, я не понимаю, как я вообще могу получить доступ к этим вещам из браузера! я тоже совсем запуталась... - person transient_loop; 24.10.2010
comment
Это не зашифрованный ключ, это токен. - person Steven Soroka; 12.01.2011