Uso de JavaScript SDK en Node.js para administrar las ACL en Azure Data Lake Storage
En este artículo se muestra cómo usar Node.js para obtener, establecer y actualizar las listas de control de acceso de directorios y archivos.
Paquete (Administrador de paquetes de Node) | Ejemplos | Enviar comentarios
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita.
- Una cuenta de almacenamiento de Azure que tenga habilitado el espacio de nombres jerárquico (HNS). Siga estas instrucciones para crear uno.
- LTS de Node.js
- CLI de Azure versión
2.6.0
o posterior. - Uno de los siguientes permisos de seguridad:
- Una entidad de seguridad aprovisionada de Microsoft Entra ID a la que se ha asignado el rol Propietario de datos de blobs de almacenamiento, con ámbito para el contenedor de destino, el grupo de recursos primario o la suscripción.
- El usuario propietario del contenedor o directorio de destino al que va a aplicar la configuración de ACL. Para establecer listas de control de acceso de forma recursiva, se incluyen todos los elementos secundarios en el contenedor o el directorio de destino.
- Clave de la cuenta de almacenamiento.
Configurar su proyecto
En esta sección se explica cómo preparar un proyecto para que funcione con la biblioteca cliente de Azure Data Lake Storage para JavaScript.
Instalar paquetes
Instale los paquetes para las bibliotecas cliente de Azure Data Lake Storage y Azure Identity mediante el comando npm install
. El paquete @azure/identity es necesario para las conexiones sin contraseña a los servicios de Azure.
npm install @azure/storage-file-datalake
npm install @azure/identity
Cargar módulos
Agregue el código siguiente en la parte superior del archivo para cargar los módulos necesarios:
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
const { DefaultAzureCredential } = require('@azure/identity');
Conexión con la cuenta
Para ejecutar los ejemplos de código de este artículo, debe crear una instancia de DataLakeServiceClient que represente la cuenta de almacenamiento. Puede autorizar el objeto de cliente con credenciales de Microsoft Entra ID o con una clave de cuenta.
Puede usar la Biblioteca cliente de identidad de Azure para Microsoft Entra ID para autenticar la aplicación con Microsoft Entra ID.
Nota:
Si usa Microsoft Entra ID para autorizar el acceso, asegúrese de que la entidad de seguridad tenga asignado el rol Propietario de datos de blobs de almacenamiento. Para obtener más información sobre cómo se aplican los permisos de ACL y las consecuencias de cambiarlos, consulte Modelo de control de acceso de Azure Data Lake Storage .
En primer lugar, tendrá que asignar uno de los siguientes roles de control de acceso basado en roles de Azure (Azure RBAC) a la entidad de seguridad:
Role | Capacidad de configuración de ACL |
---|---|
Propietario de datos de blobs de almacenamiento | Todos los directorios y archivos de la cuenta. |
Colaborador de datos de blobs de almacenamiento | Solo los directorios y archivos que pertenecen a la entidad de seguridad. |
A continuación, cree una instancia de DataLakeServiceClient y pase una nueva instancia de la clase DefaultAzureCredential.
function GetDataLakeServiceClientAD(accountName) {
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`,
new DefaultAzureCredential()
);
return dataLakeServiceClient;
}
Para más información sobre el uso de DefaultAzureCredential
para autorizar el acceso a los datos, consulte Información general: Autenticación de aplicaciones de JavaScript en Azure mediante el SDK de Azure.
Obtener y establecer una ACL de directorio
En este ejemplo se obtiene y después se establece la ACL de un directorio denominado my-directory
. En este ejemplo se concede al usuario propietario permisos de lectura, escritura y ejecución, permisos de solo lectura y ejecución al grupo propietario, y permisos de lectura y escritura al resto.
Nota:
Si la aplicación autoriza el acceso mediante Microsoft Entra ID, asegúrese de que la entidad de seguridad que la aplicación usa para autorizar el acceso tiene asignado el rol de propietario de datos de blobs de almacenamiento. Para más información sobre cómo se aplican los permisos de ACL y las consecuencias de cambiarlos, vea Control de acceso en 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);
}
También puede obtener y establecer la ACL del directorio raíz de un contenedor. Para obtener el directorio raíz, pase una cadena vacía (/
) en el método DataLakeFileSystemClient.getDirectoryClient.
Obtener y establecer una ACL de archivo
En este ejemplo se obtiene y después se establece la ACL de un archivo denominado upload-file.txt
. En este ejemplo se concede al usuario propietario permisos de lectura, escritura y ejecución, permisos de solo lectura y ejecución al grupo propietario, y permisos de lectura y escritura al resto.
Nota:
Si la aplicación autoriza el acceso mediante Microsoft Entra ID, asegúrese de que la entidad de seguridad que la aplicación usa para autorizar el acceso tiene asignado el rol de propietario de datos de blobs de almacenamiento. Para más información sobre cómo se aplican los permisos de ACL y las consecuencias de cambiarlos, vea Control de acceso en 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);
}