Доступ пользователя, прошедшего аутентификацию AWS S3, с использованием предварительно назначенных URL-адресов? - PullRequest
0 голосов
/ 28 января 2019

Я хотел бы разместить файлы в приватной корзине AWS S3, к которой могут обращаться только пользователи, прошедшие проверку подлинности в моем веб-приложении.Ссылки на эти загрузки файлов должны быть статическими.

Простой метод прокси:

Я знаю, что это можно сделать с помощью прокси-службы.В этом случае статические ссылки будут указывать на службу, а служба будет обрабатывать проверку сеанса запрашивающих пользователей, если она будет действительной, служба ответит содержимым файла из S3.

Метод прокси-сервера с предварительно назначенным URL:

Однако вместо того, чтобы использовать прокси-сервер для доступа к файлам, мне было интересно, могу ли я вместо этого использовать заранее назначенные URL-адреса?

https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

В этом случае роль прокси-сервера заключается в том, чтобы просто вернуть предварительно назначенный URL-адрес пользователю, а не фактическую полезную нагрузку файла из S3.Затем конечный пользователь может использовать этот заранее заданный URL-адрес для загрузки файла непосредственно из S3.Я не совсем понимаю, как управлять этим потоком в браузере. Я предполагаю, что мне нужно написать JavaScript для следующего:

  1. Запрос предварительно назначенного URL-адреса из прокси-службы
  2. Дождитесь ответа
  3. Используйте предварительно указанный URL-адрес, указанный в ответе (предварительно назначенный URL-адрес), чтобы загрузить фактический файл

Я на правильном пути?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Это правильный подход.

Остерегайтесь истекающих учетных данных.Подписанные URL будут полезны в течение меньшего времени, пока не истечет срок действия учетных данных, используемых для их подписания, или истечет время их истечения (которое вы контролируете в определенных пределах).В случае, если вы уже используете временные учетные данные (что очень хорошо!), Вы можете явно использовать AssumeRole для контроля времени истечения (вы можете взять роль от роли, чтобы получить новые временные учетные данные с новым ограничением времени),

Есть и другой вариант: Amazon Cognito.Это может сократить разрыв между учетными записями пользователей, а затем напрямую выдавать краткосрочные учетные данные для каждого пользователя в браузерные среды ваших пользователей.Затем они могут делать вызовы API для S3 со своими собственными учетными данными.Это имеет некоторое преимущество (вы можете лучше выразить права пользователей в их профиле, а не проверять их самостоятельно, прежде чем они сгенерируют URL-адреса) и некоторую сложность (могу ли я сделать вашу учетную запись с помощью своих пользовательских кредитов, или вы контролируете, какие API я могу назвать?Привилегия действительно имеет значение, когда IAM - ваш единственный уровень авторизации.) С другой стороны, вызовы IAM бесплатны, и вы не платите за серверы для их размещения, так что это звучит экономически выгодно, если вы используете федеративную идентификацию - пулы пользователей, а не такмного.

0 голосов
/ 28 января 2019

Просто верните перенаправление 307 с вашего сервера на предварительно назначенный URL.Например, клиент запрашивает:

GET /the/file HTTP/1.1

И сервер генерирует заданный URL-адрес и отвечает:

HTTP/1.1 307 Temporary Redirect
Location: https://s3.aws..../the/file?...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...