Usar o SDK do JavaScript no Node.js para gerenciar ACLs no Azure Data Lake Storage Gen2

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

Pacote (Gerenciador de Pacotes de Nó) | Exemplos | Dão Comentários

Pré-requisitos

Configure o seu projeto

Instale a biblioteca de cliente Data Lake para JavaScript abrindo uma janela de terminal e digitando o seguinte comando.

npm install @azure/storage-file-datalake

Importe o storage-file-datalake pacote colocando esta instrução na parte superior do arquivo de código.

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

Conecte-se à conta

Para usar os trechos deste artigo, você precisará criar uma instância DataLakeServiceClient que represente a conta de armazenamento.

Conectar-se usando o Microsoft Entra ID

Nota

Se estiver a utilizar o Microsoft Entra ID para autorizar o acesso, certifique-se de que a sua entidade de segurança recebeu a função de 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, consulte Modelo de controle de acesso no Azure Data Lake Storage Gen2.

Você pode usar a biblioteca de cliente de identidade do Azure para JS para autenticar seu aplicativo com o Microsoft Entra ID.

Primeiro, você terá que atribuir uma das seguintes funções de controle de acesso baseado em função do Azure (Azure RBAC) à sua entidade de segurança:

Função Capacidade de configuração de ACL
Proprietário dos Dados do Armazenamento de Blobs Todos os diretórios e arquivos na conta.
Contribuinte de Dados do Armazenamento de Blobs Somente diretórios e arquivos de propriedade da entidade de segurança.

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

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Para saber mais sobre como usar DefaultAzureCredential para autorizar o acesso aos dados, consulte Visão geral: autenticar aplicativos JavaScript no Azure usando o SDK do Azure.

Conectar-se usando uma chave de conta

Você pode autorizar o acesso aos dados usando as chaves de acesso da sua conta (Chave compartilhada). Este exemplo cria uma instância DataLakeServiceClient que é autorizada com a chave de conta.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

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

  return dataLakeServiceClient;
}

Atenção

A autorização com chave compartilhada não é recomendada, pois pode ser menos segura. Para uma segurança ideal, desative a autorização através da Chave Partilhada para a sua conta de armazenamento, conforme descrito em Impedir autorização de Chave Partilhada para uma conta de Armazenamento do Azure.

O uso de chaves de acesso e cadeias de conexão deve ser limitado a aplicativos de prova de conceito iniciais ou protótipos de desenvolvimento que não acessam dados confidenciais ou de produção. Caso contrário, as classes de autenticação baseada em token disponíveis no SDK do Azure devem sempre ser preferidas ao autenticar nos recursos do Azure.

A Microsoft recomenda que os clientes usem o Microsoft Entra ID ou uma assinatura de acesso compartilhado (SAS) para autorizar o acesso aos dados no Armazenamento do Azure. Para obter mais informações, consulte Autorizar operações para acesso a dados.

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 dá ao usuário proprietário permissões de leitura, gravação e execução, dá ao grupo proprietário apenas permissões de leitura e execução e dá a todos os outros acesso de leitura.

Nota

Se o seu aplicativo autorizar o acesso usando a ID do Microsoft Entra, verifique se a entidade de segurança que seu aplicativo usa para autorizar o acesso recebeu a função de 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, consulte Controle de acesso no 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);
}

Você também pode 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 chamado upload-file.txt. Este exemplo dá ao usuário proprietário permissões de leitura, gravação e execução, dá ao grupo proprietário apenas permissões de leitura e execução e dá a todos os outros acesso de leitura.

Nota

Se o seu aplicativo autorizar o acesso usando a ID do Microsoft Entra, verifique se a entidade de segurança que seu aplicativo usa para autorizar o acesso recebeu a função de 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, consulte Controle de acesso no 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 também