Назад | Перейти на главную страницу

Безопасна ли установка бакетов S3 непосредственно в инстансы EC2?

как сказано в заголовке моего вопроса, я хотел бы знать, является ли это хорошей практикой или нет,

Я знаю, что могу смонтировать его в экземпляре EC2, но мне было интересно, если я буду добавлять больше экземпляров для масштабирования своего приложения, это может вызвать некоторые проблемы; у вас есть опыт в этом?

Я использую S3, чтобы разрешить загрузку файлов через скрипт PHP, поэтому в основном вопрос:

Использование mouting - хорошая практика или есть более эффективные способы обработки загрузки файлов пользователя?

заранее спасибо

Если вы используете S3 для хранения данных из пользовательских загрузок, особенно в распределенной среде, одним из важных соображений является тот факт, что S3 «в конечном итоге согласован» (хотя некоторые области согласованы по чтению после записи). Следствием этого является то, что вы можете успешно загрузить файл, но если вы сразу после этого проверите его существование, то можете обнаружить, что он не существует. Эта проблема более выражена для таких сценариев, как обновления или удаления, где даже согласованность чтения после записи не поможет.

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

S3fs использует S3 API - точно так же, как PHP (или другой) SDK. Более того, S3 предназначен для обработки довольно высоких уровней параллелизма, поэтому (кроме проблем с согласованностью) не должно возникнуть проблем с его установкой на нескольких экземплярах (учитывая, что это не традиционная файловая система - такие проблемы, как блокировка, и т.д. обрабатываются на стороне S3).

Тем не менее, у каждой реализации есть некоторые потенциальные преимущества и недостатки:

S3fs:

  • Нет поддержки частичных / фрагментированных загрузок (насколько я знаю) - поэтому вы должны загрузить полный файл, чтобы прочитать любую его часть - вероятно, не проблема, если вы просто используете его для хранения (и обслуживания) загрузок.
  • Написано на C ++. Возможный прирост производительности
  • Ваше приложение получает выгоду от любых обновлений s3fs
  • Реализует кэширование (как полных файлов, так и информации о файлах) - может немного повысить скорость и снизить затраты
  • Ограничено функциями, которые предоставляет предохранитель

SDK:

  • Предоставляет полный набор функций, которые может предложить S3 - в зависимости от вашего варианта использования этого может быть достаточно, чтобы заслужить использование SDK
  • Потенциально более тесная интеграция с вашим приложением - возвращаемые ошибки и т. Д. Могут позволить вашему приложению делать более информированный (и, следовательно, более точный) выбор.
  • Необходимо кодировать любые возможные преимущества - ваше приложение должно использовать их и быть в курсе будущих изменений в S3.
  • Больше сложности и накладных расходов на ваш код

В терминах «безопасность» вы можете иметь в виду «предотвращение повреждения данных» или «предотвращение несанкционированного доступа». Что касается первого, SDK может немного помочь в работе с возможной согласованностью (в виде более подробных ошибок), но базовое хранилище то же самое, и я ожидаю, что различия будут незначительными. Что касается контроля доступа - вы можете использовать IAM для создания ограниченной учетной записи, но этой учетной записи по-прежнему потребуется доступ для чтения / записи к вашим файлам S3. Оба должны быть достаточно безопасными, в любом случае ваша система должна быть скомпрометирована, чтобы получить доступ к вашей корзине S3 - однако я бы предположил, что с S3fs (поскольку учетные данные обычно хранятся вне веб-корневого каталога и вообще недоступны через PHP) безопасность немного лучше.

Личное мнение: я бы предпочел s3fs в случае, когда есть один каталог для загрузки (например, один сайт, который его использует) и где доступ будет довольно простым (просто нужно загружать файлы и иногда обновлять / удалять). Если вам понадобится более сложный доступ (например, частичные загрузки, несколько сегментов и т. Д.) Или вы собираетесь использовать S3 SDK для других целей, то я бы также придерживался SDK для загрузок.

Я бы предпочел загружать на S3 через PHP lib. Это проще, чем монтировать S3 на каждом сервере.

Посмотрите этот пример: http://aws.amazon.com/code/126

Для одного из своих проектов я использовал эту библиотеку: http://undesigned.org.za/2007/10/22/amazon-s3-php-class . Мне очень понравилось.

Вы можете разрешить пользователям загружать файлы прямо в s3 из браузера без загрузки на ваш сервер (а затем загружать в s3.)

Вот для этого хорошие советы: https://leonid.shevtsov.me/post/demystifying-s3-browser-upload/

после загрузки файла, если вам нужно обработать файл (zip, перекодировать и т. д.), вы можете использовать S3fs