aws cognito - разрешить участникам группового чата доступ к корзине s3 - PullRequest
1 голос
/ 28 февраля 2020

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

Принято решение AWS S3 в качестве внутреннего хранилища с использованием Cognito Federated Identities для проверки подлинности загрузки / выгрузки - данные перекачиваются в / из S3, а не через наши серверы.

Пока

моя реализация позволяет пользователю / идентификатору загружать и загружать в свою собственную папку в сегменте S3 (пример политики arn:aws:s3:::mybucket/users/${cognito-identity.amazonaws.com:sub}/*, переменная - identityID / user_id).

Однако

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

Есть идеи?

некоторые мысли о возможном потоке:

  1. сначала пользователь загрузит фотографию в свою папку, [я знаю, как]
  2. затем система копирует фотографию в папку группового чата [я знаю, как]
  3. связывает папку группового чата с личностями участников [ не знаю, как - там может быть тысячи групп и участников]
    • РЕДАКТИРОВАТЬ 1 : как подсказывает @MyStackRunnethOver, можно использовать одну роль / учетные данные IAM для управления всеми запросами на загрузку / выгрузку для пользователей (которые принадлежат к указанной группе) [ большая проблема безопасности , если учетные данные скомпрометированы].
  4. РЕДАКТИРОВАТЬ 1 : могут использовать предварительно назначенные URL-адреса: файлы, загруженные в собственную папку пользователя, сохраненные предварительно сохраненные URL-адреса в записях группового чата [max url-life 7days хотя]
    • кэширование клиента помогает, пока участники не присоединяются к группе часто или не покидают ее
    • требуется обновить запланированное задание на стороне сервера Предварительно подписанные URL с истекшим сроком действия

Любые пожелания / идеи приветствуются

1 Ответ

1 голос
/ 04 марта 2020

Ваш вопрос сводится к следующему:

"Учитывая, что пользователи являются частью групп, как я могу предоставить пользователям доступ к подкаталогам c, определяемым группой, на основе членства в группах?"

На мой взгляд, у вас есть два варианта:

  1. Дайте каждому пользователю «ключ» для всех каталогов, членом которых он является. Это может означать добавление разрешения этому пользователю для каждой группы или предоставление им доступа к новой роли IAM для каждой группы. Это стратегия «придумать способ получения детальных разрешений для S3».

  2. Не распространять какие-либо ключи c, определяемые каталогом. Вместо этого, когда пользователь запрашивает определенный каталог, проверьте, находятся ли они в группе, к которой принадлежит этот каталог. Это стратегия «построить систему детального хранения данных на основе S3».

Я рекомендую последний подход, поскольку вместо роли IAM или учетных данных для пользователя или группы , вы предоставляете всем своим пользователям одно удостоверение: удостоверение, необходимое для отправки запросов вашей оболочке S3. Если вы отслеживаете, в какие группы входят ваши пользователи, все, что вам нужно сделать обертке, - это проверить отображение user -> groups, чтобы увидеть, должен ли запрос быть выполнен. Внешний интерфейс может использовать то же сопоставление для предварительного преобразования пользовательского интерфейса: пользователю показывается только возможность загрузки / выгрузки из групп, членами которых он является. В этом случае я хотел бы представить отображение в виде таблицы «Динамо», которая обновляется всякий раз, когда пользователь регистрируется, присоединяется к группе, покидает группу или удаляет свою учетную запись. Вы можете идентифицировать своих пользователей по их учетным данным Cognito, которые включают пользовательские поля c.

...