Безопасный способ загрузки содержимого AWS S3 из мобильного приложения

Постановка проблемы: я хочу загрузить содержимое S3 через мобильное приложение с нескольких мобильных устройств.

Решение, с которым я столкнулся.

Решение 1

  1. Создайте пользователя IAM в AWS. Создайте политику для загрузки содержимого S3 только для определенного сегмента и назначьте эту политику пользователю IAM.
  2. Когда мобильное приложение хочет загрузить содержимое из S3, оно вызывает API моего сервера, который возвращает учетные данные пользователя IAM.
  3. Затем мобильное приложение будет использовать эти учетные данные для загрузки содержимого S3.

Решение 2

  1. Используйте сервис AWS Cognito.

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

Второй подход мне полностью не известен. Однако в FAQ по сервису AWS COGNITO я не нашел никакого решения для своих требований, хотя оно позволяет читать, удалять и помещать контент в любой сервис AWS.

Мне нужно предложение по безопасной загрузке содержимого S3 из мобильных приложений.


person Chaitanya Bijawe    schedule 13.05.2015    source источник


Ответы (1)


Amazon Cognito и AWS Mobile SDK разработаны специально для случая использования загрузки содержимого, хранящегося в S3, из мобильного приложения. Вы можете использовать Cognito для предоставления временных учетных данных AWS с ограниченными правами каждому пользователю вашего приложения. Вы можете разрешить своим пользователям начать использовать ваше приложение в качестве гостей, не прошедших аутентификацию, и / или аутентифицироваться с помощью социальных сетей или вашей собственной службы регистрации / входа.

Чтобы настроить Cognito, используйте консоль Cognito для создания пула идентификаторов, который представляет собой хранилище данных идентификации пользователей, относящихся к вашей учетной записи AWS. Роли IAM определяют разрешения для ваших пользователей на доступ к ресурсам AWS, таким как S3. Пользователи вашего приложения примут на себя роли, которые вы создаете. Вы можете указать разные роли для аутентифицированных и не аутентифицированных пользователей. Чтобы узнать больше о ролях IAM в Cognito, см. Роли IAM.

Когда вы посещаете консоль Cognito, мастер поможет вам создать пул идентификаторов и необходимые роли IAM. Интеграция между Cognito (который выдает учетные данные AWS пользователю мобильного приложения) и другими сервисами AWS осуществляется при инициализации SDK. Пример кода для инициализации SDK с помощью Cognito на iOS, Android, Unity и JavaScript находится в тема получения учетных данных Руководства разработчика Amazon Cognito].

Обновления в октябре 2020 г .: AWS переместила свой мобильный SDK на AWS Amplify. Amplify по-прежнему использует Cognito для аутентификации (входа в систему) и авторизации (учетные данные / разрешения), поэтому приведенное выше остается точным. Вы можете получить конкретные инструкции по использованию Cognito с Amplify для настройки аутентификации здесь. После настройки аутентификации в Amplify конкретным примером использования S3 будет здесь.

Обратите внимание, что в настоящее время документация Cognito сосредоточена на пулах пользователей, которые позволяют вам реализовать собственный полноценный каталог для хранения и входа в систему пользователей (для стоимость). Однако вам не обязательно использовать каталог пользователей Cognito для хранения ваших пользователей. Cognito Identity Pools (которые по-прежнему бесплатны AFAICT) позволяют вам получать учетные данные AWS для пользователей, которые не вошли в ваше приложение (так называемые неаутентифицированные идентификаторы) и / или позволяют пользователям входить в систему с другим пользователем каталоги (например, учетные записи социальных сетей или пользовательский каталог, которым вы владеете и которым управляете).

Если вам нужна максимальная гибкость, вы также можете использовать AWS STS для получения учетных данных для доступ к ресурсам AWS, включая S3. Однако гибкость STS требует большего понимания IAM / AWS и, возможно, более сложной настройки.

Прокомментируйте, пожалуйста, если я могу что-нибудь сделать, чтобы прояснить это!

person Scott Willeke    schedule 13.05.2015
comment
Спасибо @Scott Willeke. Я пробовал это, и у меня это очень хорошо сработало. У меня есть небольшой вопрос: процесс генерации идентификатора, токена, а затем временного пароля оплачивается когнитивно? В моем приложении мы не собираемся использовать какие-либо другие возможности, предоставляемые когнито, такие как синхронизация, мне нужны только временные пароли для загрузки контента с s3, вот и все. - person Chaitanya Bijawe; 15.05.2015
comment
Совершенно нормально использовать функции идентификации Cognito только для получения учетных данных для вызова других сервисов AWS, таких как S3. Это лучшая практика AWS, Cognito для этой цели бесплатен, и вам не нужно использовать Cognito Sync. Если у вас остались вопросы, ответьте. - person Scott Willeke; 15.05.2015
comment
Привет, @ScottWilleke. Ваш ответ по-прежнему актуален в 2020 году? Есть ли другие альтернативы через AWS? - person Omar Dulaimi; 05.10.2020
comment
@OmarDulaimi Спасибо за вопрос! Я огляделся и обновил этот ответ, основываясь на том, как я видел, как развиваются вещи. Отметьте меня еще раз, если у вас остались вопросы. - person Scott Willeke; 08.10.2020