Ты права волноваться.Любой сможет извлечь учетные данные из вашего приложения.Есть несколько подходов к этому:
, если объекты на самом деле не чувствительны, то ничего не потеряно, если учетные данные могут только выполнять действия, которые вы хотите разрешитькаждый.В этом отношении вы должны быть в состоянии избавиться от необходимости наличия учетных данных все вместе, если вы правильно установите разрешения для вашего контейнера. Я думаю, что это включает в себя разрешения списка, если необходимо.
, еслиобъекты чувствительны , тогда у вас уже есть какая-то система аутентификации для ваших пользователей.Если вы используете для авторизации учетные записи Oauth (Google, Amazon, Facebook и т. Д.), Вы можете использовать AWS Cognito для создания недолговечных учетных данных AWS, связанных с этим пользователем, что позволит вам различать разрешения между пользователями ... этодовольно гладкий и отлично подходит, если уже используется oauth.Если вы не используете OAUT, подумайте, следует ли вам.Это гораздо безопаснее, чем настраивать собственный уровень авторизации для своих пользователей.https://aws.amazon.com/cognito/
Если вы не хотите или не можете использовать Cognito, вы все равно можете взять на себя роль AWS из бэкэнда и генерировать временные учетные данные, которые автоматически истекают в любом месте от 15 минут до 1.час или более, а затем передать эти учетные данные в интерфейс.Я бы назвал это «когнитивным бедняком», но я думаю, что на самом деле запуск инфраструктуры для предоставления услуги дороже, чем затраты на когнито.
Или, как предлагает @Tomasz Swinder, вы можете просто прокси-запросы через ваше приложение, разрешая ресурс, который пользователь запрашивает на ресурсе s3, и перетаскивая его в свой бэкэнд, а затем обслуживаяваш пользователь.В большинстве случаев это плохое решение, поскольку ваши серверы находятся дальше от конечного пользователя, чем, вероятно, будут конечные точки s3.И вы должны запустить инфраструктуру для прокси.Но, как уже было сказано, это имеет свое место.
Наконец, предварительно подписанные URL-адреса s3 могут хорошо подойти для вашего приложения.Обычно бэкэнд подписывает URL-адреса s3 непосредственно перед тем, как предоставить их пользователю.Подпись достаточна для авторизации операции (которая может быть PUT или GET), но сама по себе не содержит закрытый ключ, используемый для подписи - другими словами, предопределенные URL предоставляют авторизованный URL, но не используемые учетные данныеавторизовать их, так что это отличный способ предоставить специальную авторизацию для s3.
В целом, действительно здорово иметь приложение без бэкэнда, и для этого вам понадобится сторонняя аутентификация и что-то вроде Cognito.но как только вы начнете использовать его, вы сможете использовать всевозможные сервисы aws для предоставления того, что иначе было бы сделано бэкэндом.Просто будьте осторожны с разрешениями, потому что aws - это все, что вам платят, и , как правило, не имеет возможности ограничить вызовы службой, чтобы убедиться, что жестокий интернет-пользователь стремится увеличить ваш счет AWS, совершая тонны звонков.с временными кредитами, которые вы им предоставили.Единственным заметным исключением является API-шлюз, который допускает ограничения скорости на пользователя и, следовательно, отлично подходит для авторизованного без сервера сервера бэкэнда.
Также имейте в виду, что LISTing для объектов s3 намного медленнее и намного дороже (все еще дешевый за операцию, но в 10 раз), чем GETing для объектов s3, поэтому обычно лучше по возможности избегать вызова lIST.Я просто добавляю это, я подозреваю, что вы просто делаете это, чтобы проверить соединение s3.