Compartir vía


Uso de JavaScript SDK en Node.js para administrar ACL en Azure Data Lake Storage Gen2

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

  • Suscripción a Azure. Para obtener más información, vea Obtención de una evaluación gratuita de Azure.

  • Una cuenta de almacenamiento que tenga habilitado el espacio de nombres jerárquico (HNS). Siga estas instrucciones para crear uno.

  • 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

Instale la biblioteca cliente de Data Lake para JavaScript; para ello, abra una ventana de terminal y, a continuación, escriba el siguiente comando.

npm install @azure/storage-file-datalake

Importe el paquete storage-file-datalake colocando esta instrucción en la parte superior del archivo de código.

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

Conexión con la cuenta

Para usar los fragmentos de código de este artículo, tiene que crear una instancia de DataLakeServiceClient que represente la cuenta de almacenamiento.

Conexión mediante el Microsoft Entra ID

Nota:

Si usa Microsoft Entra ID (Azure AD) 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, vea Modelo de control de acceso de Azure Data Lake Storage Gen2.

Puede usar la biblioteca cliente de identidad de Azure para JS para autenticar la aplicación con Microsoft Entra ID.

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.

Conexión con una clave de cuenta

Puede autorizar el acceso a los datos mediante las claves de acceso de la cuenta (clave compartida). En este ejemplo se crea una instancia de DataLakeServiceClient autorizada con la clave de cuenta.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

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

  return dataLakeServiceClient;
}

Precaución

No se recomienda la autorización con clave compartida, ya que puede ser menos segura. Para obtener una seguridad óptima, deshabilite la autorización mediante clave compartida para la cuenta de almacenamiento, como se describe en Impedir la autorización de clave compartida para una cuenta de Azure Storage.

El uso de claves de acceso y cadenas de conexión debe limitarse a la prueba inicial de aplicaciones de concepto o prototipos de desarrollo que no tienen acceso a datos confidenciales o de producción. De lo contrario, siempre se deben preferir las clases de autenticación basadas en tokens disponibles en el SDK de Azure al autenticarse en los recursos de Azure.

Microsoft recomienda que los clientes usen Microsoft Entra ID o una firma de acceso compartido (SAS) para autorizar el acceso a los datos de Azure Storage. Para obtener más información, consulte Autorización de operaciones para el acceso a datos.

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 Gen2.

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 Gen2.

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);
}

Consulte también