Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как использовать 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);
}