Usar o SDK do JavaScript no Node.js para gerenciar ACLs no Armazenamento do Azure Data Lake
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 de Nó) | Exemplos | Dão Comentários
Pré-requisitos
- Subscrição do Azure - crie uma gratuitamente.
- Conta de armazenamento do Azure que tem namespace hierárquico (HNS) habilitado. Siga estas instruções para criar um.
- Node.js LTS
- Versão da CLI
2.6.0
do Azure ou superior. - Uma das seguintes permissões de segurança:
- Uma entidade de segurança de ID do Microsoft Entra provisionada à qual foi atribuída a função de Proprietário de Dados do Blob de Armazenamento, com escopo para o contêiner de destino, conta de armazenamento, grupo de recursos pai ou assinatura.
- Usuário proprietário do contêiner ou diretório de destino ao qual você planeja aplicar as configurações da ACL. Para definir ACLs recursivamente, isso inclui todos os itens filho no contêiner ou diretório de destino.
- Chave da conta de armazenamento.
Configure o seu projeto
Esta seção orienta você na preparação de um projeto para trabalhar com a biblioteca de cliente do Armazenamento do Azure Data Lake para JavaScript.
Instalar pacotes
Instale pacotes para o Armazenamento do Azure Data Lake e bibliotecas de cliente do Azure Identity usando o npm install
comando. 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
Módulos de carga
Adicione o seguinte código na parte superior do arquivo para carregar os módulos necessários:
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
const { DefaultAzureCredential } = require('@azure/identity');
Conecte-se à conta
Para executar os exemplos de código neste artigo, você precisa criar uma instância DataLakeServiceClient que represente a conta de armazenamento. Você pode autorizar o objeto cliente com credenciais do Microsoft Entra ID ou com uma chave de conta.
Você pode usar a biblioteca de cliente de identidade do Azure para JavaScript para autenticar seu aplicativo com 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 Armazenamento do Azure Data Lake.
Primeiro, você terá que atribuir uma das seguintes funções de controle de acesso baseado em função (RBAC do Azure) à sua entidade de segurança:
Role | Capacidade de configuração de ACL |
---|---|
Proprietário dos Dados do Armazenamento de Blobs | Todos os diretórios e arquivos na conta. |
Contribuidor de Dados de Blobs de Armazenamento | 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 a dados, consulte Visã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 dá ao usuário proprietário permissões de leitura, gravação e execução, concede ao grupo proprietário apenas permissões de leitura e execução e concede 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 Armazenamento do Azure Data Lake.
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, concede ao grupo proprietário apenas permissões de leitura e execução e concede 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 Armazenamento do Azure Data Lake.
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);
}