У меня есть веб-сайт, на котором пользователям необходимо войти в систему. Они могут загружать и удалять свои собственные изображения, НО эти изображения должны быть частными, поэтому изображения не являются общедоступными, чтобы их мог просматривать любой.
Я знаю, что мы можем использовать политики IAM, чтобы ограничить доступ к различным папкам в корзине S3 для разных пользователей IAM. Однако пользователи веб-сайта - это просто обычные зарегистрированные пользователи, записанные в базе данных (вероятно, MySQL), они не являются пользователями IAM.
Какова была бы логика для настройки этого без необходимости использования пользователя IAM для каждого пользователя веб-сайта? Можете ли вы предложить какие-нибудь хорошие примеры? Или я слишком много думаю о том, что есть более простой способ установить такие ограничения?
Спасибо заранее за любые предложения.
Вам точно не понадобится Пользователь IAM для каждого пользователя веб-сайта это невозможно.
Рекомендуемый способ - использовать AWS Cognito для аутентификации пользователя против вашего Пул пользователей (т.е. ваш список пользователей в вашей базе данных). Cognito выполнит вход, выход, сброс пароля и т. Д. От вашего имени, и после аутентификации пользователя ему будет выдан набор временные учетные данные AWS что даст ему доступ к определенным ресурсам, в вашем случае к определенные папки в корзине S3.
Детали хорошо описаны в Разрешить пользователям Cognito доступ к объектам в их корзине S3 - наверное, это именно то, что вам нужно.
В качестве бонуса при использовании Cognito очень легко включить вход в учетные записи социальных сетей - Facebook, Google и т. Д. Видеть Добавление поставщиков социальной идентификации в пул пользователей.
Надеюсь, это поможет :)
Другой вариант - вообще обойтись без ролей и учетных данных IAM и использовать Предварительно подписанные URL-адреса S3. С помощью предварительно подписанных URL-адресов вы можете создавать безопасные, ограниченные по времени ссылки на изображения, которые позволят неаутентифицированный доступ к другим частным объектам в S3. Другими словами:
Таким образом, вы можете обойтись без каких-либо пользователей IAM или ролей IAM для пользователей веб-сайта.
Вот простая демонстрация того, как это реализовать: Демонстрация предварительно подписанного URL-адреса S3
Вы также можете использовать предварительно подписанные URL-адреса для загрузка изображений, но это немного сложнее. Возможно, будет проще загрузить изображения на ваш сервер, используя стандартные методы загрузки, и сервер загружает их в S3.
Это более ограниченный подход, чем использование Cognito, но его проще реализовать.
Надеюсь, это поможет :)