Compartilhar via


Use o SDK do JavaScript em Node.js para gerenciar ACLs no Azure Data Lake Storage

Este artigo mostra como usar Node.js para obter, definir e atualizar as listas de controle de acesso de diretórios e arquivos.

Pacote (Gerenciador de pacotes do Node) | Exemplos | Enviar comentários

Pré-requisitos

  • Assinatura do Azure – Crie uma gratuitamente.
  • Conta de armazenamento do Azure que tem o HNS (namespace hierárquico) habilitado. Siga estas instruções para criar um.
  • Node.js LTS
  • CLI do Azure versão 2.6.0 ou superior
  • Uma das seguintes permissões de segurança:
    • Uma entidade de segurança do Microsoft Entra ID provisionada à qual foi atribuída a função de Proprietário de Dados do Blob de Armazenamento no escopo do contêiner, conta de armazenamento, grupo de recursos pai ou assinatura de destino.
    • Usuário proprietário do contêiner ou diretório de destino ao qual você planeja aplicar as configurações de ACL. Para definir ACLs recursivamente, isso inclui todos os itens filho no contêiner ou diretório de destino.
    • Chave de conta de armazenamento.

Configurar o seu projeto

Esta seção fornece instruções sobre como preparar um projeto para funcionar com a biblioteca de clientes do Azure Data Lake Storage para JavaScript.

Instalar Pacotes

Instale pacotes para as bibliotecas de cliente do Azure Data Lake Storage e do Azure Identity usando o comando npm install. O pacote @azure/identity é necessário para conexões sem senha com os serviços do Azure.

npm install @azure/storage-file-datalake
npm install @azure/identity

Carregar módulos

Adicione código a seguir no topo do arquivo para carregar os módulos necessários:

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

const { DefaultAzureCredential } = require('@azure/identity');

Conectar à conta

Para executar os exemplos de código neste artigo, você precisa criar uma instância do DataLakeServiceClient que represente a conta de armazenamento. Você pode autorizar o objeto cliente com as credenciais do Microsoft Entra ID ou com uma chave de conta.

É possível usar a Biblioteca de clientes de identidade do Azure para JavaScript para autenticar o aplicativo com o Microsoft Entra ID.

Observação

Se estiver utilizando o Microsoft Entra ID para autorizar o acesso, verifique se a entidade de segurança foi atribuída à função Proprietário de Dados do Blob de Armazenamento. Para saber mais sobre como as permissões de ACL são aplicadas e os efeitos de alterá-las, confira o artigo Modelo de controle de acesso no Azure Data Lake Storage.

Como parte desse processo, primeiro será necessário atribuir uma das seguintes funções do RBAC do Azure (controle de acesso baseado em função do Azure) à sua entidade de segurança:

Função Capacidade de configuração de ACL
Proprietário de Dados do Blob de Armazenamento Todos os diretórios e arquivos na conta.
Colaborador de dados de blob de armazenamento Somente diretórios e arquivos de propriedade da entidade de segurança.

Em seguida, crie uma instância DataLakeServiceClient e passe em uma nova instância da classe DefaultAzureCredential.

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Quer saber mais sobre como usar DefaultAzureCredential para autorizar o acesso a dados? Confira oVisão geral: autenticar aplicativos JavaScript no Azure usando o SDK do Azure.

Obter e definir uma ACL de diretório

Este exemplo obtém e define a ACL de um diretório chamado my-directory. Este exemplo fornece ao o usuário proprietário as permissões de leitura, gravação e execução, fornece ao grupo proprietário somente permissões de leitura e execução e concede a todos os outros acesso de leitura.

Observação

Se o seu aplicativo autorizar o acesso usando Microsoft Entra ID, confira se a função de Proprietário de dados do blob de armazenamento foi atribuída à entidade de segurança que seu aplicativo usa para autorizar o acesso. Para saber mais sobre como as permissões de ACL são aplicadas e os efeitos por alterá-las, confira Controle de acesso no 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);
}

Também é possível obter e definir a ACL do diretório raiz de um contêiner. Para obter o diretório raiz, passe uma cadeia de caracteres vazia (/) para o método DataLakeFileSystemClient. getDirectoryClient.

Obter e definir uma ACL de arquivo

Este exemplo obtém e define a ACL de um arquivo denominado upload-file.txt. Este exemplo fornece ao o usuário proprietário as permissões de leitura, gravação e execução, fornece ao grupo proprietário somente permissões de leitura e execução e concede a todos os outros acesso de leitura.

Observação

Se o seu aplicativo autorizar o acesso usando Microsoft Entra ID, confira se a função de Proprietário de dados do blob de armazenamento foi atribuída à entidade de segurança que seu aplicativo usa para autorizar o acesso. Para saber mais sobre como as permissões de ACL são aplicadas e os efeitos por alterá-las, confira Controle de acesso no 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);
}

Confira também