Как ограничить доступ к S3 без проксирования?

Есть сервис. Им пользуются много клиентов. У каждого клиента много пользователей.

Нужно дать всем пользователям возможность загружать файлы в S3, но просматривать только файлы внутри своего клиента.

Можно представить, что это Jira или подобный сервис. Давать возможность скачивать файлы чужого клиента крайне плохая идея, там может быть конфиденциальная информация.

Заводить по бакету на каждого клиента — выйдет крайне дорого, клиентов могут быть сотни и тысячи.

Получать ссылку на бэк, там проводить авторизацию и отдавать файлы проксируя через бэк — получим большие счета за трафик на бэке + дополнительную нагрузку на бэк из-за отдачи файлов таким образом.

Как тогда лучше поступить? Нужно каким то образом отправить пользователя сначала на бэк для проверки прав, а уже потом средиректить его на S3, но на уникальную ссылку, которую он не сможет передать кому попало или выложить в интернет.
  • Вопрос задан
  • 574 просмотра
Пригласить эксперта
Ответы на вопрос 3
@q2digger
никого не трогаю, починяю примус
В 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.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
В S3 можно фолдеры создавть. Как часть ключа-пути.
s3://bucket/Bolage/file1.txt
s3://bucket/mayton2019/file1.txt
Ответ написан
Комментировать
Нужно дать всем пользователям возможность загружать файлы в S3, но просматривать только файлы внутри своего клиента.
Клиенты, использующие Jira, не заходят в свои бакеты. За них это делает бэк.
Не так ли?
Что значит "просматривать"? Пути к файлам должны быть определены на бэке и пусть клиент смотрит через веб-интерфейс на свои файлы. Допустим, файлы отчетов лежат в s3://reports-bucket/reports/customer-12345/. Бэк ведь знает где отчеты находятся?! Вот он их и показывает! Список имен файлов отчетов должен храниться в СУБД. Бэк просто составляет полный путь в "ведре" и если надо дать ссылку на скачивание, то просто создается presigned URL. Ссылка показывается в веб-интерфейсе и нет никаких нарушений прав доступа.
А можно ли текущему пользователю показывать создавать ссылку на отчет или нет - зависит от авторизации пользователя на сайте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы