Интеграция S3 с пользовательским управлением пользователями

Мы создаем пользовательское приложение (используя LoopBack), которое должно хранить много больших файлов, поступающих из несколько пользователей, поэтому, естественно, мы рассматриваем S3. Мы делали что-то подобное раньше, когда клиенты загружали файлы на сервер, который затем обрабатывал и загружал их на S3 под одной учетной записью AWS, но для этого нового приложения мы хотим, чтобы клиенты (используя специальное приложение для iOS) могли используйте iOS S3 SDK для загрузки непосредственно в свою корзину или папку. Учетные записи пользователей будут созданы на сервере.

Есть ли способ обрабатывать аутентификацию/авторизацию S3 с помощью пользовательского кода? Например, может ли клиент iOS запросить временный токен, позволяющий загружать данные в определенную корзину или папку S3? Или нам нужно будет создать уникальных пользователей IAM для каждого пользователя в нашей системе?

Это ужасная идея? Звучит как ужасная идея. :)

Я нашел аналогичный вопрос здесь но однозначного ответа не было.

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


person ken.dunnington    schedule 26.02.2018    source источник


Ответы (3)


Cognito - это путь. Вы определенно не должны создавать пользователей IAM для этого. IAM предназначен для управления доступом к сервисам aws программно или из консоли. Кроме того, вам нужно будет жестко закодировать ключи доступа IAM в приложении ios, что не является лучшей практикой.

https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html

https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_cognito.html

person Spiff    schedule 26.02.2018
comment
Это подход, которого мы придерживаемся. У меня это уже работает на 99% (просто разбираюсь с файлом политики роли для доступа к S3). - person ken.dunnington; 28.02.2018

Если пользователи вашего приложения уже аутентифицированы, вы можете сгенерировать предварительно подписанный URL-адрес S3 на своем бэкэнде, используя свои учетные данные. Затем этот URL-адрес можно вернуть в приложение и использовать для загрузки файла.

Это позволит избежать необходимости создавать отдельных пользователей/разрешений IAM и/или управлять политиками сегментов.

Ознакомьтесь с документацией по нему здесь.

person Tom Nijs    schedule 26.02.2018
comment
Приятно знать, что на самом деле мы будем использовать предварительно подписанные URL-адреса в других местах приложения. Спасибо за предложение! - person ken.dunnington; 28.02.2018

Не уверен, насколько актуально для вашей ситуации.

Вы можете создать роль, которая позволяет загружать в s3 и использовать веб-удостоверение SAML для аутентификации и предоставления привилегий для принятия роли и получения временных учетных данных и токена.

Это позволит сохранить очень ограниченное время аутентификации для загрузки S3. т.е. до истечения срока действия временных учетных данных.

person joseph    schedule 26.02.2018