Как изменить роль пользователя для каждого запроса в корзине Amazon AWS S3? - PullRequest
2 голосов
/ 22 февраля 2020

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

Что я пытаюсь сделать do:

У меня есть корзина s3 с различными «пакетами», которые пользователи могут загрузить. После покупки им предоставляется роль пользователя в Wordpress. У меня есть браузер S3, настроенный через php, который отправляет запросы в корзину для информации.

В зависимости от их «роли» будут отображаться только файлы, соответствующие префиксу (все пользователи пакета видят все, пользователи одного продукта видят только один префикс продукта).

Таким образом, сервер будет отправлять файлы от имени пользователя и изменять роли IAM на основе уровня разрешений пользователя. Должен ли я установить это таким образом? Могу ли я просто проанализировать роль WP и указать конечную точку или запрос, который отмечает разрешенные префиксы?

Пользователи пакета видят / Отдельные пользователи видят / - префикс / Если это имеет смысл

Заранее спасибо ! Я никогда не использовал AWS, так что это все новое для меня. :)

Ответы [ 2 ]

2 голосов
/ 23 февраля 2020

Существует три основных способа предоставления доступа к частному контенту в Amazon S3.

Вариант 1: учетные данные IAM

Вы можете добавить политику в IAM Пользователь, чтобы они могли получить доступ к частному контенту. Однако такие учетные данные должны использоваться только сотрудниками вашей организации. его нельзя использовать для предоставления доступа пользователям приложения.

Вариант 2. Временные учетные данные через STS

Ваше приложение может создавать временные учетные данные с помощью AWS токена безопасности Обслуживание. Эти учетные данные могут иметь определенные разрешения c и действительны в течение ограниченного периода времени. Это идеально для предоставления мобильным приложениям доступа к Amazon S3, поскольку они могут напрямую взаимодействовать с S3 без необходимости go через фоновое приложение. Учетным данным будет предоставлен доступ только к тем ресурсам, которые им разрешено использовать.

Эти типы учетных данных также могут использоваться веб-приложениями, когда веб-приложения выполняют вызовы непосредственно к службам AWS (например, из Node / JavaScript в браузере). Однако это не подходит для вашей ситуации WordPress.

Вариант 3. Предварительно подписанные URL-адреса

Представьте себе приложение для обмена фотографиями, где пользователи могут получить доступ к своим личным фотографии, и пользователи также могут делиться фотографиями с другими пользователями. Когда пользователь запрашивает доступ к определенной фотографии (или когда фоновое приложение создает страницу HTML, в которой используется фотография), приложение может создать предварительно подписанный URL-адрес , который предоставляет временный доступ к Amazon S3. объект .

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

См .: Amazon S3 pre. подписанные URL

Ваша ситуация подходит для варианта № 3. Как только вы определили, что пользователю разрешен доступ к определенному файлу на S3, он может сгенерировать предварительно подписанный URL-адрес и включить его в качестве ссылки (или даже в теги <img src=...>). Пользователь может затем загрузить файл. В этом процессе нет необходимости использовать роли IAM .

2 голосов
/ 23 февраля 2020

Это звучит слишком сложно. Это возможно сделать с AWS STS, но это было бы чрезвычайно fr agile.

Я предполагаю, что вы скрываете фактическую корзину S3 от конечных пользователей и транслируете через ваше приложение php? Если это так, то имеет смысл выполнять любую ролевую фильтрацию в приложении php, поскольку у вас там гораздо больше логи c - IAM является гранулированным, но ограничения ресурсов в S3 будут непонятными и всегда есть вероятность, что вы что-то не так сделаете и выставите неверные загрузки.

Скорее сделайте это внутри своего приложения:

  1. установит sh роль, которую вы предоставили
  2. введите команду S3 ls, отфильтрованную по роли - т. Е. Если роль разрешает только --prefix, введите команду ls, чтобы она отображала только те файлы, которые соответствуют --prefix
  3. , не отображать файлы в глобально - только ваше приложение должно иметь доступ к корзине S3 - таким образом, люди также не смогут делиться ссылками после загрузки пакета.

это дает дополнительное преимущество - не кодирует Структура сегмента S3 в IAM, и сохраняет ваши решения c изолированными от кода.

...