Предлагая пользователям загрузки из S3 buckets: я делаю это неправильно?
Наш сайт позволяет пользователям хранить свои личные файлы на нашем сайте, который теперь находится в корзине S3 с тех пор, как мы перешли на AWS. Пользователи могут загружать свои файлы снова, но только после входа на наш веб-сайт. Даже если у них есть прямой URL (/download.php?fileid=1234
), пользователи должны войти в систему в первую очередь.
Прямо сейчас у нас есть скрипт загрузки, который извлекает файл из S3 порциями, а затем передает его пользователю. Это работает нормально, и даже позволяет возобновить загрузку, если их браузер поддерживает это. Ни у кого нет жалоб.
Но у меня возникает это неприятное ощущение, что я просто делаю это неправильно, и должен быть какой-то способ, позволяющий пользователям загружать файлы прямо с S3 - но опять же, только если вы зашли на наш сайт.
Я смотрю на предварительно подписанные URL - это то, что мне нужно? Если так, то я думаю, что я должен просто сделать Location: https://bucket.s3...
перенаправить, когда пользователь нажимает /download.php?fileid=1234
?
Как это будет работать с менеджером загрузок, который поддерживает возобновление? Возобновит ли возобновление работы, потому что они будут идти непосредственно к S3 с ключом с истекшим сроком действия? Возобновление настолько необычно, что обычным людям стоит увеличить скорость, чтобы не заходить сначала через наши серверы...
Как вы справляетесь с безопасными загрузками с S3?
1 ответ
Оба ваших предложенных решения в порядке. Это зависит только от того, хотите ли вы, чтобы все данные проходили через ваш сервер (который вы затем должны масштабировать), или если срок действия ссылки истекает после установленного вами срока.
Я использую оба этих подхода для разных ситуаций.
Я редко рекомендую повторно внедрить решение, которое работает без смягчающих обстоятельств (ожидаемые потребности в масштабировании, проблемы безопасности и т. Д.).
И да, если они попытаются получить доступ к подписанному URL-адресу после истечения срока действия, он потерпит неудачу.