Как авторизовать несколько клиентских приложений для доступа к моим ресурсам хранилища Azure? - PullRequest
0 голосов
/ 09 октября 2018

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

Я бы хотел, чтобы каждый отдельный клиент был ограничен разными таблицами.и только с доступом для добавления и чтения - без обновления или удаления.

Я бы хотел иметь возможность мгновенно отменить доступ одного клиента, если это необходимо, без влияния на другие клиенты.

IРассмотрены 3 варианта:

  • Я подумал о создании отдельной учетной записи хранения для каждого клиента и предоставлении клиенту ключа доступа для этой учетной записи.Но это дало бы полный доступ (включая обновление и удаление).

  • Я рассмотрел вопрос о создании политики сохраненного доступа (SAP) для каждого клиента, а затем о создании подписи общего доступа (SAS) наполитика.Клиент может соединиться с подписью общего доступа (как описано здесь) .Главный недостаток, который я вижу в этом, заключается в том, что если я хочу, чтобы клиентское приложение имело доступ к нескольким таблицам, мне потребуются отдельные SAP и SAS для каждой таблицы.И это добавляет накладные расходы на управление.

  • Поскольку приложение - это еще одна форма идентификации, я подумал зарегистрировать приложение для создания идентификатора для каждого экземпляра моего программного обеспечения.Но я не был уверен, как (а) заставить приложение передавать учетные данные в хранилище Azure или (б) предоставить приложение приложению для чтения / добавления в таблицу.

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

Но в Azure в моей организации есть Active Directory, и я не являюсь администратором этого каталога.Я не понимаю, как создавать пользователей Azure для доступа к моим таблицам, не будучи администратором.

У кого-нибудь есть мысли или советы?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

У меня возникли небольшие проблемы с поиском информации о точно , как использовать SAS из Node в документации , поэтому я подумал, что было бы полезно опубликовать мой пример кода здесь для справки.,

Я выполнил следующие шаги:

  1. Создание новой учетной записи хранения (с помощью портала Azure).Я буду использовать отдельную учетную запись хранения для каждого клиента, как предложено @ TomSun.
  2. Создана новая таблица внутри учетной записи.Я загрузил и использовал Microsoft Azure Storage Explorer, чтобы сделать это и остальные шаги.Обозреватель хранилища, доступный на портале, еще не работает с таблицами - только двоичные объекты, файлы и очереди.
  3. Создана политика доступа к таблице.(Щелкните правой кнопкой мыши по таблице, выберите «Управление политиками доступа ...»)
  4. Создание подписи общего доступа.(Щелкните правой кнопкой мыши таблицу, выберите «Получить подпись общего доступа ...», выберите созданную выше политику.
  5. Скопируйте полученный URL-адрес и строку запроса для ссылки в приведенном ниже коде. Обратите внимание, что URL-адрес содержит запросстрока.
  6. В новой папке на моем компьютере запустите npm init, чтобы настроить проект узла.
  7. npm install azure-storage, чтобы загрузить библиотеку.
  8. Создать файлвызывается index.js с содержанием, показанным ниже.
  9. node index.js для запуска кода.

Обратите внимание, что в приведенном ниже коде я изменил имена своей учетной записи, таблица, sasToken и т. д. Не ожидайте, что он будет работать только с копированием и вставкой!

const azure = require('azure-storage');
const sasUri = 'https://myaccount.table.core.windows.net/mytable';
const sasQuery = 'sv=2018-03-28&si=saspolicy&tn=mytable&sig=1%2FgfWdreRKfWpRjhRy3E8MiHDIxH35SPZY5ssU8lKw%3D';
const tableService = new azure.TableService(null,null,sasUri,sasQuery);
const item = {
  PartitionKey: {'_':'keyvalue'},
  RowKey: {'_':'2018-10-10T03:17:21Z'},
  Col1: {'_':23},
  Col2: {'_':423}
};
tableService.insertEntity('mytable',item,function(err,result,response){
  if (err) {
    console.error(err);
  } else {
    console.log('success');
    console.log('result = '+JSON.stringify(result,null,'  '));
    console.log('response = '+JSON.stringify(response,null,'  '));
  }
});

Моя следующая задача - найти документацию, описывающую ключи '_', используемые в сущности для вставки.похоже, что для значения используется подчеркивание, а для типов можно использовать символ $, хотя типы угадываются, если не указан. Для создания этих объектов при необходимости есть функция entityGenerator .

0 голосов
/ 09 октября 2018

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

Доступ для аутентификации к таблице Azure в настоящее время не поддерживается .Интеграция Azure AD доступна для Blob и Очередь служб * только 1009 * в предварительном просмотре .

Для получения дополнительной информации оАутентификация доступа к BLOB-объектам и очередям Azure с помощью Azure Active Directory (предварительная версия) приведена в официальном документе Azure .

.
...