Usare JavaScript SDK in Node.js per gestire gli elenchi di controllo di accesso in Azure Data Lake Storage
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 nodi) | Esempi | Fornisci feedback
Prerequisiti
- Sottoscrizione di Azure: creare un account gratuito.
- Un account di archiviazione di Azure in cui è abilitato lo spazio dei nomi gerarchico (HNS). Per crearne uno, seguire queste istruzioni.
- Node.js LTS
- 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 dati BLOB di archiviazione, con ambito al contenitore di destinazione, all'account di archiviazione, al gruppo di risorse padre o alla sottoscrizione.
- Utente proprietario del contenitore o della directory di destinazione a cui si prevede di applicare le impostazioni ACL. Per impostare gli ACL in modo ricorsivo, include tutti gli elementi figlio nel contenitore o nella directory di destinazione.
- Chiave dell'account di archiviazione.
Impostare il progetto
Questa sezione illustra come preparare un progetto da usare con la libreria client di Azure Data Lake Storage per JavaScript.
Installare i pacchetti
Installare i pacchetti per le librerie client di Azure Data Lake Storage e Azure Identity usando il comando npm install
. Il pacchetto @azure/identity è necessario per le connessioni senza password ai servizi di Azure.
npm install @azure/storage-file-datalake
npm install @azure/identity
Caricare moduli
Aggiungere il codice seguente all'inizio del file per caricare i moduli necessari:
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
const { DefaultAzureCredential } = require('@azure/identity');
Effettuare la connessione all'account
Per eseguire gli esempi di codice in questo articolo, è necessario creare un'istanza di DataLakeServiceClient che rappresenta l'account di archiviazione. È possibile autorizzare l'oggetto client con le credenziali di Microsoft Entra ID o con una chiave dell'account.
È possibile usare la libreria client di identità di Azure per JavaScript per autenticare l'applicazione con 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 Proprietario del BLOB di archiviazione. Per altre informazioni sull'applicazione delle autorizzazioni ACL e sugli effetti della modifica, vedere Modello di controllo di accesso in Azure Data Lake Storage.
Prima di tutto, è necessario assegnare uno dei ruoli di controllo degli accessi in base al ruolo di Azure (Azure RBAC) 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.
Ottenere e impostare un elenco di controllo di accesso alla directory
Questo esempio ottiene e successivamente imposta l'ACL di una directory denominata my-directory
. In questo esempio vengono concesse all'utente le autorizzazioni di lettura, scrittura ed esecuzione proprietarie, concede al gruppo proprietario solo autorizzazioni di lettura ed esecuzione e concede a tutti gli altri utenti 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 Proprietario dati BLOB di archiviazione. Per altre informazioni sull'applicazione delle autorizzazioni ACL e sugli effetti della modifica, vedere Controllo di accesso in 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);
}
È 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 successivamente imposta l'ACL di un file denominato upload-file.txt
. In questo esempio vengono concesse all'utente le autorizzazioni di lettura, scrittura ed esecuzione proprietarie, concede al gruppo proprietario solo autorizzazioni di lettura ed esecuzione e concede a tutti gli altri utenti 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 Proprietario dati BLOB di archiviazione. Per altre informazioni sull'applicazione delle autorizzazioni ACL e sugli effetti della modifica, vedere Controllo di accesso in 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);
}