1

Мое веб-приложение использует Amazon S3 для хранения всех медиафайлов в моем веб-приложении djagno с помощью стороннего приложения django-хранения.Ограничить файл s3 для пользователя группы Django

My db обрабатывает иерархию папок и файлов, и каждый пользователь видит только ссылки, принадлежащие его группе.

Но! нет прав на другие папки на S3.

, например: пользователя 1: группа group1 пользователь 2: группа group2 s3 ссылка: https://s3.amazonaws.com/ /media/group1/folder1/1.png

пользователь 1 увидит это на своей странице внутри приложение. пользователь 2 не увидит эту ссылку, но если он попытается перейти к этой ссылке, у нее нет разрешений, и она будет легко загружена.

Моя цель - ограничить доступ к папке каждой группе.

Существует автоматическое решение, основанное на моих ключах aws? Я потерян ...

ответ

1

Редактировать новое решение:

Амазонка SDK Предоставляет Pre-Signed Url Feature. С помощью этого вы можете генерировать временные URL-адреса для одного конкретного файла только для своих пользователей.

Так что сценарий использования сценария - это. Изображения S3 остаются неподвижными. Когда пользователь запрашивает свои изображения, вы сначала передаете все ссылки на обработчик подписи, который генерирует временные ссылки. (Они устарели и имеют много шифрования и защиты, поэтому кому-то невозможно захватить такую ​​ссылку).

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

Старого Решение

Ну еще обходной путь может быть, чтобы хранить все файлы в s3 без публичного доступа. Затем создайте роль IAM для своего приложения и дайте этому роли доступ к ведру. Затем создайте метод, который будет считывать файлы S3 в вашем приложении и служить им для пользователя, если у него есть права.

Простой пример.

Путь S3 Файл

//media/group1/folder1/1.png

Запрос = MyWebMethod/GetFile? InternalPath = "folder1/1.PNG»

{

Int = customAuthentication.getUserId идентификатор пользователя();

Строка CompletePath = "медиа/группа" + + идентификатор пользователя "/" + internalPath

вар изображения = AwdSdkClient.getFileFromS3 (CompletePath);

возврата изображения;

}

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

Более продвинутый способ заключается не в том, чтобы получить файл на самом деле на ваш сервер, а в какой-либо медиа-поток потока данных. (Я не разработчик Django, поэтому я не знаю, возможно ли это)

0

Вы ищете эффективную систему единого входа для своих пользователей, прошедших проверку подлинности в Интернете. Один из способов, возможно, единственный способ справиться с этим, заключается в использовании SAML provider. При этом вы сопоставляете сторонних пользователей/групп, прошедших проверку подлинности, с пользователями/группами AWS IAM.

Он будет работать, но для этого потребуется гораздо больше, чем несколько щелчков мыши.

Смежные вопросы