Использование пакета 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);
}