2013-11-25 4 views
1

У меня есть приложение, которое позволяет пользователям публиковать и обмениваться файлами, и в настоящее время это мой сервер, который обслуживает эти файлы, но по мере того, как данные растут, поэтому я исследую использование Amazon S3. Тем не менее, я использую динамические правила для того, что является общедоступным, а что - частным между определенными пользователями и т. Д., Поэтому сервер является единственным возможным арбитром, то есть разрешения не могут быть определены на стороне приложения/клиента.Конфиденциальность на Amazon S3

Упрощенно, я думаю, я могу позволить моему серверу получить данные из S3, а затем отправить их обратно в приложение. Но, очевидно, тогда я дважды плачу за пропускную способность, не говоря уже о том, что мой сервер делает ненужную работу.

Это похоже на довольно распространенную проблему, поэтому мне интересно, как люди обычно решают эту проблему? (Как я читал, Dropbox хранит свои данные на S3.)

ответ

2

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

Таким образом, решение для случая использования является:

  1. Пользователь делает GET к URL на вашем веб-сайте
  2. Ваш код проверяет, что пользователь должен иметь возможность видеть объект (с помощью вашего приложения пользовательские, динамические правила)
  3. Веб-сайт возвращает ответ перенаправления на подписанный URL-адрес S3, срок действия которого истекает в ближайшее время, скажем, через 5 минут
  4. Веб-браузер пользователя делает GET для этого подписанного URL-адреса S3. Поскольку он правильно подписан и еще не истек, S3 возвращает содержимое объекта непосредственно в браузер пользователя.

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

+0

спасибо. Это перенаправление - хороший способ справиться с вещами. Если я хочу, чтобы некоторые ресурсы были по существу постоянными для других пользователей, у меня есть возможность установить срок действия до 10 лет или что-то в этом роде, не так ли? – Victor

+0

Да, вы можете сделать истечение очень далеко в будущем. –