Azure Blob: как предоставить мобильному приложению ограниченный доступ к пользовательским данным

#azure-blob-storage

#azure-blob-хранилище

Вопрос:

У меня есть мобильное приложение (Xamarin для Android и iOS), которое подключается к веб-сайту (ASP.NET MVC). Часть содержимого для мобильного приложения (файлы и изображения) поступает из хранилища больших двоичных объектов Azure, в котором в настоящее время включен общедоступный доступ для чтения.

Я создаю модуль аутентификации для приложения (OAuth, с именем пользователя / паролем). Можно ли каким-то образом встроить аутентификацию и в мою учетную запись Azure Blob, чтобы пользователь имел доступ только к своим определенным файлам? Я знаю, что мог бы использовать веб-сайт в качестве посредника (т. Е. пользователь проходит аутентификацию и подключается к веб-сайту, веб-сайты подключаются к azure и извлекают данные и возвращают их в приложение), но это добавит дополнительный шаг задержки, в отличие от прямого подключения к Azure Blob напрямую.

Я вижу, что Azure Blob поддерживает токены подписи общего доступа (SAS). Возможно ли сгенерировать токен SAS только для подмножества файлов, относящихся к этому пользователю? Я полагаю, что рабочий процесс будет:

  1. мобильное приложение проходит проверку подлинности в API веб-сайта
  2. веб-сайт генерирует и возвращает токен SAS для доступа к большому двоичному объекту
  3. мобильное приложение подключается к azure blob напрямую, используя токен SAS.

Было бы это хорошей идеей? Есть другие предложения?

Ответ №1:

Насколько я понимаю ваш сценарий, вы можете использовать Azure AD или SAS для аутентификации / авторизации в хранилище больших двоичных объектов. Ключевым моментом будет организация данных ваших пользователей по контейнерам, чтобы вы могли ограничить доступ к этому контейнеру. Этот тип дизайна лучше всего согласуется с тем, как авторизация обрабатывается в хранилище Azure сегодня.

Так, например, вы должны создать контейнер для данных пользователя 1, другой контейнер для данных пользователя 2 и так далее.

Если вы уже используете Azure AD для проверки подлинности и авторизации пользователей для своего приложения, вы можете просто назначить роль RBAC, область действия которой ограничена пользовательским контейнером для каждого пользователя. Например, вы можете назначить роль вкладчика данных большого двоичного объекта хранилища user1 для container1, а затем сделать то же самое для user2 в container2. Сведения о том, как это сделать на портале Azure, см. в разделе Использование портала Azure для назначения роли Azure для доступа к большим двоичным объектам и данным очереди. Вы также можете использовать PowerShell или Azure CLI.

Обратите внимание, что область действия роли RBAC не может быть ограничена отдельным большим двоичным объектом, а только на уровне контейнера или выше.

Если вы решите, что вам нужно использовать SAS, вы можете создать SAS для каждого пользователя, доступ к которому ограничен их контейнером. Если ваши пользователи уже проходят аутентификацию / авторизацию в вашем приложении с помощью Azure AD, то вам, вероятно, не нужно использовать SAS. SAS был бы полезен в случае, когда вам нужно предоставить доступ пользователю, который иным образом не прошел проверку подлинности.