Поделиться через


Использование пакета SDK JavaScript в Node.js для управления списками управления доступом в Azure Data Lake Storage

В этой статье показано, как использовать Node.js для получения, настройки и обновления списков управления доступом к каталогам и файлам.

Пакет (диспетчер пакетов узла) | Примеры | Обратная связь

Предварительные условия

  • Подписка Azure — создайте бесплатную учетную запись.
  • Учетная запись хранения Azure с включенным иерархическим пространством имен (HNS). Выполните эти инструкции, чтобы создать учетную запись.
  • Node.js LTS
  • Azure CLI версии2.6.0 или выше.
  • Одно из следующих разрешений безопасности:
    • Субъект безопасности Microsoft Entra ID, которому назначена роль владельца данных в хранилище BLOB-объектов, охватывает целевой контейнер, учетную запись хранения, родительскую группу ресурсов или подписку.
    • Пользователь-владелец целевого контейнера или каталога, к которому планируется применять параметры ACL. Следует настроить ACL рекурсивно, то есть для всех дочерних элементов в целевом контейнере или каталоге.
    • Ключ учетной записи хранения.

Настройка проекта

В этом разделе описывается подготовка проекта для работы с клиентской библиотекой Azure Data Lake Storage для JavaScript.

Установка пакетов

Установите пакеты для клиентских библиотек Azure Data Lake Storage и Azure Identity с помощью команды npm install. Пакет @azure/identity необходим для подключений без пароля к службам Azure.

npm install @azure/storage-file-datalake
npm install @azure/identity

Загрузка модулей

Добавьте следующий код в верхней части файла, чтобы загрузить необходимые модули:

const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");

const { DefaultAzureCredential } = require('@azure/identity');

Подключение к учетной записи

Чтобы запустить примеры кода в этой статье, необходимо создать экземпляр DataLakeServiceClient , представляющий учетную запись хранения. Вы можете авторизовать клиентский объект с помощью учетных данных идентификатора Microsoft Entra или с помощью ключа учетной записи.

Вы можете использовать клиентскую библиотеку идентификации Azure для JavaScript для аутентификации вашего приложения с помощью системы Microsoft Entra ID.

Примечание.

Если вы используете Microsoft Entra ID для авторизации доступа, убедитесь, что вашему субъекту безопасности назначена роль владельца данных BLOB-объектов хранилища. Дополнительные сведения о применении разрешений ACL и последствиях их изменения см. в статье "Модель управления доступом" в Azure Data Lake Storage.

Сначала вам нужно назначить одну из следующих ролей управления доступом на основе ролей Azure (Azure RBAC) вашему субъекту безопасности:

Роль Возможности настройки ACL
владелец данных хранилища BLOB-объектов Все каталоги и файлы в учетной записи.
Сотрудник данных хранилища Blob Только каталоги и файлы, которыми владеет субъект безопасности.

Затем создайте экземпляр DataLakeServiceClient и передайте новый экземпляр класса DefaultAzureCredential.

function GetDataLakeServiceClientAD(accountName) {

  const dataLakeServiceClient = new DataLakeServiceClient(
      `https://${accountName}.dfs.core.windows.net`,
      new DefaultAzureCredential()
  );

  return dataLakeServiceClient;
}

Дополнительные сведения об использовании DefaultAzureCredential для авторизации доступа к данным см. в статье "Обзор: проверка подлинности приложений JavaScript в Azure с помощью пакета SDK Azure".

Получение и настройка ACL каталога

В этом примере мы получаем список ACL, а затем настраиваем его для каталога с именем my-directory. В этом примере пользователю-владельцу предоставляются права на чтение, запись и выполнение, группе-владельцу предоставляются разрешения только на чтение и выполнение, а всем остальным предоставляется доступ на чтение.

Примечание.

Если приложение авторизует доступ с помощью идентификатора Microsoft Entra, убедитесь, что субъект безопасности, который ваше приложение использует для авторизации доступа, назначен роль владельца данных BLOB-объектов хранилища. Дополнительные сведения о применении разрешений ACL и последствиях их изменения см. в статье "Управление доступом" в Azure Data Lake Storage.

async function ManageDirectoryACLs(fileSystemClient) {

    const directoryClient = fileSystemClient.getDirectoryClient("my-directory");
    const permissions = await directoryClient.getAccessControl();

    console.log(permissions.acl);

    const acl = [
    {
      accessControlType: "user",
      entityId: "",
      defaultScope: false,
      permissions: {
        read: true,
        write: true,
        execute: true
      }
    },
    {
      accessControlType: "group",
      entityId: "",
      defaultScope: false,
      permissions: {
        read: true,
        write: false,
        execute: true
      }
    },
    {
      accessControlType: "other",
      entityId: "",
      defaultScope: false,
      permissions: {
        read: true,
        write: true,
        execute: false
      }

    }

  ];

  await directoryClient.setAccessControl(acl);
}

Вы также можете получить и настроить ACL для корневого каталога контейнера. Чтобы получить корневой каталог, передайте пустую строку (/) в метод DataLakeFileSystemClient.getDirectoryClient.

Получение и установка ACL файла

В этом примере мы сначала получаем список ACL, а затем настраиваем его для файла с именем upload-file.txt. В этом примере пользователю-владельцу предоставляются права на чтение, запись и выполнение, группе-владельцу предоставляются права только на чтение и выполнение, а всем остальным предоставляется доступ только для чтения.

Примечание.

Если ваше приложение авторизует доступ с помощью Microsoft ID Entra, убедитесь, что субъекту безопасности, который ваше приложение использует для авторизации доступа, назначена роль Владелец данных объектов BLOB в хранилище. Дополнительные сведения о применении разрешений ACL и последствиях их изменения см. в статье "Управление доступом" в Azure Data Lake Storage.

async function ManageFileACLs(fileSystemClient) {

  const fileClient = fileSystemClient.getFileClient("my-directory/uploaded-file.txt");
  const permissions = await fileClient.getAccessControl();

  console.log(permissions.acl);

  const acl = [
  {
    accessControlType: "user",
    entityId: "",
    defaultScope: false,
    permissions: {
      read: true,
      write: true,
      execute: true
    }
  },
  {
    accessControlType: "group",
    entityId: "",
    defaultScope: false,
    permissions: {
      read: true,
      write: false,
      execute: true
    }
  },
  {
    accessControlType: "other",
    entityId: "",
    defaultScope: false,
    permissions: {
      read: true,
      write: true,
      execute: false
    }

  }

];

await fileClient.setAccessControl(acl);
}

См. также