Как ограничить общедоступные загрузки от пользователей на сайте хранилища данных?

#amazon-web-services #amazon-s3 #download #aws-billing

#amazon-веб-сервисы #amazon-s3 #Скачать #aws-биллинг

Вопрос:

Я создаю платформу, с помощью которой пользователи загружают и загружают данные. Объем загружаемых данных не является тривиальным — это может быть порядка ГБ.

Пользователи должны иметь возможность загружать подмножество этих данных по гиперссылкам.

Если я не ошибаюсь, с моей учетной записи AWS будет взиматься плата за отправку загруженных этих файлов. Если это правда, меня беспокоят два связанных сценария:

  1. Пользователи, которые злоупотребляют этим и постоянно нажимают на гиперссылки для загрузки (более чем разумно)
  2. Больше касается роботов, которые будут нажимать на ссылки для скачивания каждые несколько секунд.

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

Как я могу запретить пользователям загружать слишком много для общедоступных веб-сайтов? Может быть, я могу использовать IP-адреса?

Любая информация приветствуется.

Ответ №1:

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

Для роботов используйте capcha. Это эффективный способ предотвратить автоматическую очистку ваших ссылок.

Кроме того, вы могли бы рассмотреть возможность предоставления доступа к вашим ссылкам через API gateway. У шлюза есть ограничения на регулирование, которые вы можете установить (например, 10 вызовов в минуту). Таким образом, вы можете быть уверены, что не перейдете к некоторым предопределенным.

Кроме того, вы можете использовать предварительно подписанные URL-адреса S3. У них есть время истечения срока действия, поэтому вы можете настроить это время так, чтобы оно действовало в течение короткого времени. Это также не позволяет пользователям обмениваться ссылками, поскольку срок их действия истекает через установленное время. В этом сценарии пользователи будут получать предварительно подписанные URL-адреса S3 с помощью лямбда-функции, которая будет вызываться из API gateway.

Комментарии:

1. Привет @Marcin. Я ценю помощь в этом. «У них есть время истечения срока действия, поэтому вы можете настроить это время так, чтобы оно было действительным в течение короткого времени». Я хотел бы предоставить пользователям возможность делиться постоянными URL-адресами с другими пользователями. Как это будет работать с предварительно подписанными URL-адресами?

2. @EB2127 К сожалению, это не так. срок действия предварительно подписанного URL-адреса всегда истекает. максимальное время — 1 неделя. Если это слишком коротко, то вам нужно использовать обычные URL-адреса.

Ответ №2:

По сути, вам нужно решить, доступны ли ваши файлы всем в мире (как на обычном веб-сайте) или они должны быть доступны только зарегистрированным пользователям.

В качестве примера предположим, что вы используете веб-сайт для обмена фотографиями. Пользователи хотят, чтобы их фотографии были частными, но они хотят иметь доступ к своим собственным фотографиям и делиться выбранными фотографиями с другими конкретными пользователями. В этом случае все содержимое должно быть закрытым по умолчанию. Тогда поток будет:

  • Пользователи входят в приложение
  • Когда пользователь хочет получить ссылку на один из своих файлов или если приложение хочет использовать <img> тег на HTML-странице (например, для отображения эскизов фотографий), приложение может сгенерировать предварительно подписанный URL-адрес Amazon S3, который представляет собой ограниченный по времени URL-адрес, предоставляющий временный доступ к частному объекту
  • Пользователь может перейти по этой ссылке, или браузер может использовать ссылку на странице HTML
  • Когда Amazon S3 получает предварительно подписанный URL-адрес, он проверяет, что он создан правильно и время истечения срока действия не превышено. Если это так, он предоставляет доступ к файлу.
  • Когда пользователь делится фотографией с другим пользователем, ваше приложение может отслеживать это в базе данных. Если пользователь запрашивает просмотр фотографии, к которой ему предоставлен доступ, приложение может сгенерировать предварительно подписанный URL-адрес.

По сути, это означает, что ваше приложение контролирует, какие пользователи могут получить доступ к объектам, хранящимся в Amazon S3.

В качестве альтернативы, если вы решите сделать все содержимое в Amazon S3 общедоступным, нет возможности ограничить загрузку файлов.