Ответ 1
Хотя есть много сценариев, когда вы, возможно, захотите сделать это в любом случае в общем, вряд ли есть случаи, когда вы захотите сделать это прямо от клиента, так как вы упомянули ios:
Плюсы для загрузки данных с сервера на AWS:
-
Безопасность
Как уже упоминалось в другом ответе, первоначально запросы с проверкой подлинности сэкономили бы вам много хлопот со злоумышленниками и хакерами, если они пытаются сломать материал. Если данные являются конфиденциальными, и вы действительно привержены конфиденциальности, утечка данных будет легче предотвратить, если система аутентифицирована.
-
Ограничение скорости, пользовательские квоты и т.д.
Дополнительное преимущество аутентифицированных систем заключается в том, что вы можете ограничить количество запросов, поступающих из определенных источников, например, пользователей, групп, IP и т.д. (квоты на уровне приложений, если вы собираетесь создавать несколько приложений вокруг одной и той же системной архитектуры). Построение этого интеллекта не так просто, когда вы работаете непосредственно на стороне клиента.
-
Аудит трейла
Если вам нужно отслеживать, кто загрузил что-то, когда, откуда и какая такая информация, это снова намного проще отслеживать, если вы получите первоначальный запрос непосредственно на своем сервере.
-
Обработка исключений при сбое
Вполне возможно иметь сбои, которые вы не могли бы легко предсказать, или пропустить критическую ошибку во время тестирования QA. Обработка этой серверной части намного эффективнее, потому что она находится под вашим контролем. Когда какие-либо проблемы возникают на стороне клиента, вы можете себе позволить, чтобы ваши клиенты могли обновить приложение. Если вы имеете дело с этой серверной стороной, дополнительные проверки могут быть легко размещены/развернуты для многих таких ошибок, что ограничивает область ошибок.
-
Время в прямом эфире
Опять же, как упоминалось в другом ответе, это может занять некоторое время, прежде чем ваше обновление будет одобрено. Это значительно снижает вашу чувствительность к критическим проблемам и может быть трудно смягчить в случае серьезных проблем (утечка данных/нарушение конфиденциальности), что приводит к значительным потерям (финансовые/пользовательские доверительные/отрицательные рейтинги и т.д.).
Единственные случаи, когда я думаю, что вы хотите загрузить данные непосредственно с клиентской стороны в AWS, будут
-
Загрузка больших объемов данных очень, очень часто, без прямой обработки.
Если загрузка однажды требует определенного объема полосы пропускания и сетевых ресурсов, загрузка дважды требует удвоения ресурсов (один раз от
client --> server
, затем отserver --> AWS
). Поэтому, если вы часто загружаете большое количество данных (ежедневно думайте о туберкулезе), вы теряете много ресурсов, просто копируя данные из одной точки в другую. В таких случаях имеет смысл напрямую передавать данные S3. Но для такого подхода к работе ваша экономия средств должна быть достаточно высокой, чтобы переопределить проблемы безопасности и конфиденциальности, а для большинства приложений это просто не так. -
Вы находитесь в огороженном саду
В принципе, приложение работает только для определенных предварительно определенных пользователей, приложение просто не работает для кого-либо еще (скажем, вы разрабатываете это для домашнего использования в корпоративном). По сути, это означает, что у вас есть 100% -ная уверенность в мотивах конечного пользователя, чтобы использовать ваше приложение.
EDIT: OP запрашивает комментарии
Как насчет сервера, предоставляющего подписанный URL/cookie, и клиент использует их для загрузки на S3 или загрузки из Cloudfront. Клиент по-прежнему напрямую взаимодействует с AWS, но требует разрешений, контролируемых сервером.
На первый взгляд, мне кажется, что это очень эффективно. Это сообщение в блоге предоставляет множество вариантов использования (например, предоставление подстановочных подписей для чтения) с использованием подписанных URL-адресов (хотя примеры находятся в .NET
) и более подробная информация доступна по адресу Документация AWS.
Поскольку вы собираетесь обрабатывать сервер подписи, вы можете легко позаботиться о каждом из пунктов, о которых я упоминал ранее в своем сообщении (ограничение скорости, пользовательские квоты, контрольный журнал и т.д. все работоспособны, так как запрос сначала будет отправлен на сервер). Как этот ответ упоминает,
Подписанные URL-адреса помогают контролировать, кто может получить доступ к данному файлу и как долго они могут получить к нему доступ.
В целом, это должно хорошо работать в довольно многих случаях.