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