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


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

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

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

Необходимые компоненты

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

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

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

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

Установите пакеты для клиентских библиотек Azure Data Lake Storage и удостоверений Azure с помощью 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.

Примечание.

Если вы используете идентификатор Microsoft Entra для авторизации доступа, убедитесь, что субъект безопасности назначен роль владельца данных 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 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);
}

См. также