Usare JavaScript SDK in Node.js per gestire gli elenchi di controllo di accesso in Azure Data Lake Archiviazione Gen2

Questo articolo illustra come usare Node.js per ottenere, impostare e aggiornare gli elenchi di controllo di accesso di directory e file.

Pacchetti (Gestione pacchetti Node) | Esempi | di commenti e suggerimenti

Prerequisiti

  • Una sottoscrizione di Azure. Per altre informazioni, vedere Ottenere la versione di valutazione gratuita di Azure.

  • Un account di archiviazione in cui è abilitato lo spazio dei nomi gerarchico. Per crearne uno, seguire queste istruzioni.

  • Interfaccia della riga di comando di Azure versione 2.6.0 o successiva.

  • Una delle autorizzazioni di sicurezza seguenti:

    • Entità di sicurezza microsoft Entra ID di cui è stato effettuato il provisioning a cui è stato assegnato il ruolo proprietario dei dati BLOB Archiviazione, con ambito al contenitore di destinazione, all'account di archiviazione, al gruppo di risorse padre o alla sottoscrizione.

    • Proprietario dell'utente del contenitore o della directory di destinazione a cui si prevede di applicare le impostazioni ACL. Per impostare gli elenchi di controllo di accesso in modo ricorsivo, sono inclusi tutti gli elementi figlio nel contenitore o nella directory di destinazione.

    • Archiviazione chiave dell'account.

Impostare il progetto

Installare la libreria client di Data Lake per JavaScript aprendo una finestra del terminale e quindi digitando il comando seguente.

npm install @azure/storage-file-datalake

Importare il storage-file-datalake pacchetto inserendo questa istruzione all'inizio del file di codice.

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

Effettuare la connessione all'account

Per usare i frammenti di codice in questo articolo, è necessario creare un'istanza di DataLakeServiceClient che rappresenta l'account di archiviazione.

Connessione utilizzando Microsoft Entra ID

Nota

Se si usa Microsoft Entra ID per autorizzare l'accesso, assicurarsi che all'entità di sicurezza sia stato assegnato il ruolo di proprietario dei dati BLOB Archiviazione. Per altre informazioni sull'applicazione delle autorizzazioni ACL e sugli effetti della modifica, vedere Modello di controllo di accesso in Azure Data Lake Archiviazione Gen2.

È possibile usare la libreria client di identità di Azure per JS per autenticare l'applicazione con l'ID Microsoft Entra.

Prima di tutto, è necessario assegnare uno dei ruoli di controllo degli accessi in base al ruolo di Azure seguenti all'entità di sicurezza:

Ruolo Funzionalità di impostazione ACL
Proprietario dei dati del BLOB di archiviazione Tutte le directory e i file nell'account.
Collaboratore ai dati del BLOB di archiviazione Solo directory e file di proprietà dell'entità di sicurezza.

Creare quindi un'istanza di DataLakeServiceClient e passare una nuova istanza della classe DefaultAzureCredential.

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Per altre informazioni sull'uso di DefaultAzureCredential per autorizzare l'accesso ai dati, vedere Panoramica: Autenticare le app JavaScript in Azure con Azure SDK.

Connessione usando una chiave dell'account

È possibile autorizzare l'accesso ai dati usando le chiavi di accesso dell'account (chiave condivisa). In questo esempio viene creata un'istanza di DataLakeServiceClient autorizzata con la chiave dell'account.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

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

  return dataLakeServiceClient;
}

Attenzione

L'autorizzazione con chiave condivisa non è consigliata perché potrebbe essere meno sicura. Per una sicurezza ottimale, disabilitare l'autorizzazione tramite chiave condivisa per l'account di archiviazione, come descritto in Impedire l'autorizzazione con chiave condivisa per un account Archiviazione di Azure.

L'uso di chiavi di accesso e stringa di connessione deve essere limitato alle app di verifica iniziali o ai prototipi di sviluppo che non accedono a dati sensibili o di produzione. In caso contrario, le classi di autenticazione basate su token disponibili in Azure SDK devono essere sempre preferite quando si esegue l'autenticazione alle risorse di Azure.

Microsoft consiglia ai client di usare l'ID Microsoft Entra o una firma di accesso condiviso per autorizzare l'accesso ai dati in Archiviazione di Azure. Per altre informazioni, vedere Autorizzare le operazioni per l'accesso ai dati.

Ottenere e impostare un elenco di controllo di accesso alla directory

Questo esempio ottiene e quindi imposta l'ACL di una directory denominata my-directory. In questo esempio vengono concesse autorizzazioni di lettura, scrittura ed esecuzione dell'utente proprietario, concede al gruppo proprietario autorizzazioni di sola lettura ed esecuzione e concede a tutti gli altri utenti l'accesso in lettura.

Nota

Se l'applicazione autorizza l'accesso tramite Microsoft Entra ID, assicurarsi che all'entità di sicurezza usata dall'applicazione per autorizzare l'accesso sia stato assegnato il ruolo di proprietario dei dati BLOB Archiviazione. Per altre informazioni sull'applicazione delle autorizzazioni ACL e sugli effetti della modifica, vedere Controllo di accesso in 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);
}

È anche possibile ottenere e impostare l'ACL della directory radice di un contenitore. Per ottenere la directory radice, passare una stringa vuota (/) al metodo DataLakeFileSystemClient.getDirectoryClient .

Ottenere e impostare un ACL di file

Questo esempio ottiene e quindi imposta l'ACL di un file denominato upload-file.txt. In questo esempio vengono concesse autorizzazioni di lettura, scrittura ed esecuzione dell'utente proprietario, concede al gruppo proprietario autorizzazioni di sola lettura ed esecuzione e concede a tutti gli altri utenti l'accesso in lettura.

Nota

Se l'applicazione autorizza l'accesso tramite Microsoft Entra ID, assicurarsi che all'entità di sicurezza usata dall'applicazione per autorizzare l'accesso sia stato assegnato il ruolo di proprietario dei dati BLOB Archiviazione. Per altre informazioni sull'applicazione delle autorizzazioni ACL e sugli effetti della modifica, vedere Controllo di accesso in 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);
}

Vedi anche