Как разрешить пользователю в моей базе данных загружать только свои изображения из корзины s3? - PullRequest
0 голосов
/ 08 апреля 2019

Я использую колбу в качестве бэкэнда для API REST. У меня есть база данных, которая содержит загруженную ими информацию о пользователях и изображениях. Все изображения хранятся в S3-контейнере, например "bucket_name / user_1 / img1.jpg" . Я хочу разрешить пользователям загружать все изображения, которые относятся только к ним, т.е. в папку "user_1" , и у них не должно быть доступа к "user_2" изображениям. Также ведро и его содержимое являются частными.

Таблица изображений имеет image_path (например, «bucket_name / user_1 / img1.jpg»), к которому может получить доступ только приложение фляги. API REST используются приложением для Android.

Поэтому, когда пользователь в приложении для Android извлекает свое изображение (используя запрос GET), он должен иметь возможность загрузить все изображения. Как доставить эти изображения?

  • Использование aws cloudfront и oai
  • колба с использованием boto3 generate_presigned_url ()
  • сделать содержимое корзины открытым (чего я определенно не хочу)

Как должен работать этот андроид - фляжка - поток aws?

1 Ответ

0 голосов
/ 08 апреля 2019

Это можно сделать двумя способами.

  1. Вы можете использовать предварительно подписанные URL-адреса или
  2. Укажите временные учетные данные, которые разрешают доступ к их папке.

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

Сохранить все содержимое личное . Затем, когда клиент (например, приложение Android) требует доступа к объекту, ваше приложение должно проверить, имеют ли они право доступа к объекту, проверив базу данных. Если они имеют разрешенный доступ, то приложение должно сгенерировать предварительно подписанный URL , который предоставляет ограниченный по времени доступ к объекту.

Создание предварительно подписанного URL занимает всего пару строк кода и не требует вызова AWS. Таким образом, его создание очень быстрое, и приложение сохраняет полный контроль над тем, кому разрешен доступ к каким объектам.

Временные полномочия

Поскольку вашим пользователям разрешен доступ ко всему контенту в их папке, вы можете создать временные учетные данные безопасности с помощью службы маркеров безопасности . Этим учетным данным может быть назначена политика, которая разрешает доступ к s3://bucket_name/user_1/*. Затем приложение Android может использовать эти учетные данные, чтобы напрямую вызывать API-интерфейс AWS для загрузки контента (или для загрузки, или для выполнения любых назначенных вами разрешений).

Это позволяет приложению напрямую связываться с AWS, а не вызывать ваши серверы для доступа к каждому объекту.

Если вы используете федеративную аутентификацию (например, доверяете Facebook), вы можете использовать Amazon Cognito для получения учетных данных .

...