Как можно ограничить доступ к хранилищу Amazon S3 без использования прокси-сервера?

Как организовать загрузку файлов в Amazon S3 пользователей сервиса так, чтобы каждый пользователь мог загружать файлы только в свою собственную область, исключив возможность просмотра файлов других пользователей? С учетом того, что создание отдельного бакета на каждого клиента слишком дорого, а проксирование через бэкенд вызовет дополнительные расходы на трафик и нагрузку на сервер. Как можно организовать процесс так, чтобы пользователь сначала проверял свои права на бэкенде, а затем быть перенаправленным на уникальную ссылку в Amazon S3 с файлом?
  • 12 мая 2024 г. 20:20
Ответы на вопрос 3
Для ограничения доступа к хранилищу Amazon S3 без использования прокси-сервера, можно использовать следующие методы:

1. Использование политик доступа (IAM Policy) для управления доступом к бакетам S3 на уровне пользователей или групп пользователей. В этом случае можно настроить права доступа таким образом, чтобы каждый пользователь имел доступ только к определенным бакетам или объектам.

2. Использование Pre-signed URLs для временного предоставления доступа к объектам в бакете. Pre-signed URL - это специальная ссылка, которая содержит временные авторизационные данные и позволяет временно получить доступ к объекту в S3 без необходимости предоставления учетных данных. Таким образом, можно создавать уникальные ссылки для каждого пользователя и ограничить доступ только к его файлам.

Для организации загрузки файлов в Amazon S3 с учетом ограничения доступа каждого пользователя к своим файлам можно использовать следующий подход:

1. Клиент загружает файл на бэкенд и отправляет запрос на проверку прав доступа к файлу.
2. Бэкенд проверяет права доступа пользователя к файлу, и если пользователь имеет право загружать файл, генерирует Pre-signed URL для загрузки файла в бакет S3.
3. Бэкенд возвращает Pre-signed URL клиенту, который затем использует эту ссылку для загрузки файла в свою область в Amazon S3.

Таким образом, каждый пользователь будет иметь доступ только к своим файлам, а использование Pre-signed URL позволит обойти недостатки создания отдельного бакета на каждого клиента и проксирования через бэкенд.
В S3 есть ACL и Access Policy. Причем это касается и "оригинала" -  Amazon S3 . https://aws.amazon.com/blogs/security/iam-policies... 
Так и разных совместимых сервисов, таких как например Yandex Object Storage https://yandex.cloud/ru/docs/storage/concepts/policy
ровно как и например "свой собственный" minio.
В S3 можно фолдеры создавть. Как часть ключа-пути. 
s3://bucket/Bolage/file1.txt
s3://bucket/mayton2019/file1.txt
Похожие вопросы