Как предоставить ограниченный доступ к ресурсу S3 пользователю приложения? - PullRequest
0 голосов
/ 05 апреля 2020

Каждый пользователь имеет уникальные данные, которые сохраняются в S3. Этот ресурс должен быть виден только указанному пользователю c. Традиционным способом является получение этого материала на сервере и передача его пользователю. Убедившись в логике приложения c, что только материал, на который квалифицирован пользователь, получает его. Однако зачем передавать эти дополнительные данные через мое приложение, когда я могу просто передать ключ / токен тому пользователю, которому я хочу получить доступ к корзине S3. Таким образом, они могут извлечь данные из него и сохранить в нем.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Традиционный способ - загрузить этот материал на сервер и передать его пользователю.

Нет, это не так. Никто не должен этим заниматься.

Однако зачем передавать эти дополнительные данные через мое приложение, когда я могу просто дать ключ / токен этому пользователю ...

Вы идете в правильном направлении здесь. К счастью, S3 определяет лучший способ, который также является обычным методом.

Вместо того, чтобы давать ключ, вы криптографически подписываете URL. Ключ / секрет остаются на стороне сервера и скрыты от конечного пользователя. Вы создаете URL, который указывает, какой ресурс должен быть загружен, а также другие параметры, такие как срок годности для этого URL. Затем вы «подписываете» его, используя вычисленное значение, которое может рассчитать только тот, у кого есть ключ / секрет. Полученный URL-адрес может быть передан непосредственно вашему клиенту через ответ API или любым другим способом.

Затем клиент запрашивает ресурс с этим URL-адресом, и он подается непосредственно из S3. S3 проверяет подпись, знает, что она от вас, и подает соответствующий ответ.

Пример, если вы используете S3 JS SDK:

s3.getSignedUrl('getObject', {
  Bucket: 'bucket',
  Key: 'path/to/object'
});

См. также: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl -свойство

1 голос
/ 05 апреля 2020

Ваш вопрос мало объясняет, как вы собираетесь работать с приложением, поэтому вот несколько общих советов ...

Да, вы можете создать временных учетных данных с помощью Amazon Cognito и AWS Служба маркеров безопасности. Эти учетные данные будут иметь связанные разрешения, которые определяют, к чему они могут получить доступ. Это часто встречается в мобильных приложениях , поскольку они могут просто вызывать API AWS и запрашивать данные напрямую.

Использование Amazon Cognito для мобильных приложений - AWS Идентификация и Управление доступом

Вы также можете использовать AWS STS напрямую (без Cognito), если ваше приложение управляет собственной аутентификацией.

Важной частью является предоставление разрешений только для данных. они имеют право на доступ. Для этого вы можете рассмотреть возможность использования переменных политики IAM , когда каждый пользователь имеет свою собственную папку в общей корзине Amazon S3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...