Разрешить доступ к папкам корзины S3 для определенных пользователей веб-сайта? (без использования пользователей IAM)

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

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

Какова была бы логика для настройки этого без необходимости использования пользователя IAM для каждого пользователя веб-сайта? Можете ли вы предложить какие-нибудь хорошие примеры? Или я слишком много думаю о том, что есть более простой способ установить такие ограничения?

Заранее благодарим за любые предложения.

3
задан 19 November 2018 в 00:17
2 ответа

Другой вариант - полностью отказаться от ролей и учетных данных IAM и использовать предварительно подписанные URL-адреса S3 . С помощью предварительно подписанных URL-адресов вы можете создавать безопасные, ограниченные по времени ссылки на изображения, которые позволят неаутентифицированный доступ к другим частным объектам в S3. Другими словами:

  • Все ваши объекты S3 являются частными, никто, кроме веб-сервера, не имеет к ним доступа.
  • Когда пользователь входит в систему, вы генерируете предварительно подписанные URL-адреса для его изображений. Эти URL-адреса предоставят пользователю временный доступ к его контенту (например, со сроком действия 1 час).
  • Когда срок действия ссылки истекает (например, через 1 час), она больше не предоставляет доступ к изображению пользователя.

Таким образом вы можете получить без каких-либо пользователей IAM или ролей IAM для пользователей веб-сайта.

Вот простая демонстрация того, как это реализовать: S3 Pre-signed URL demo

Вы также можете использовать предварительно подписанные URL-адреса для изображение загружается , но это немного сложнее. Может быть проще загрузить изображения на ваш сервер, используя стандартные методы загрузки, и сервер загружает их в S3.

Это более ограниченный подход, чем использование Cognito, но его проще реализовать.

Надеюсь, что помогает :)

2
ответ дан 3 December 2019 в 05:59

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

Рекомендуемый способ - использовать AWS Cognito для аутентификация пользователя по вашему пулу пользователей (т.е. вашему списку пользователей в вашей базе данных). Cognito выполнит вход, выход, сброс пароля и т. Д. От вашего имени, и после аутентификации пользователя ему будет выдан набор временных учетных данных AWS , которые предоставят ему доступ к определенным ресурсам, в вашем случае в определенные папки в корзине S3 .

Подробности хорошо описаны в Разрешить пользователям Cognito доступ к объектам в их корзине S3 - вероятно, это именно то, что вам нужно.

В качестве бонуса при использовании Cognito очень легко включить вход через социальные сети медиа-аккаунты - логины Facebook, Google и т. д. См. Добавление провайдеров социальной идентификации в пул пользователей .

Надеюсь, что это поможет :)

2
ответ дан 3 December 2019 в 05:59

Теги

Похожие вопросы