Verwenden von JavaScript-SDK in Node.js zum Verwalten von Zugriffssteuerungslisten (Access Control Lists, ACLs) in Azure Data Lake Storage
In diesem Artikel erfahren Sie, wie Sie mithilfe von Node.js die Zugriffssteuerungslisten von Verzeichnissen und Dateien abrufen, festlegen und aktualisieren.
Paket (Node Package Manager) | Beispiele | Feedback geben
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Ein Azure-Speicherkonto, für das hierarchischer Namespace (HNS) aktiviert ist. Befolgen Sie diese Anleitung für die Erstellung.
- Node.js LTS
- Azure CLI, Version
2.6.0
oder höher. - Eine der folgenden Sicherheitsberechtigungen:
- Ein bereitgestellter Sicherheitsprinzipal für Microsoft Entra ID, dem die Rolle Storage Blob-Datenbesitzer im Bereich des Zielcontainers, der übergeordneten Ressourcengruppe oder des Abonnements zugewiesen wurde.
- Der Benutzer muss Besitzer des Zielcontainers oder -verzeichnisses sein, in dem Sie die ACL-Einstellungen anwenden möchten. Beim rekursiven Festlegen von ACLs schließt dies alle untergeordneten Elemente im Zielcontainer oder -verzeichnis ein.
- Speicherkontoschlüssel
Einrichten des Projekts
Dieser Abschnitt führt Sie durch das Vorbereiten eines Projekts zur Arbeit mit der Azure Data Lake Storage-Clientbibliothek für JavaScript.
Installieren von Paketen
Installieren Sie die Pakete für die Azure Data Lake Storage- und Azure Identity-Clientbibliotheken mithilfe des Befehls npm install
. Für kennwortlose Verbindungen mit Azure-Diensten wird das Paket @azure/identity benötigt.
npm install @azure/storage-file-datalake
npm install @azure/identity
Laden von Modulen
Fügen Sie oben in Ihrer Datei den folgenden Code hinzu, um die erforderlichen Module zu laden:
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
const { DefaultAzureCredential } = require('@azure/identity');
Herstellen einer Verbindung mit dem Konto
Um die Codebeispiele in diesem Artikel auszuführen, müssen Sie eine DataLakeServiceClient-Instanz erstellen, die das Speicherkonto darstellt. Sie können das Clientobjekt mit Microsoft Entra ID-Anmeldeinformationen oder mit einem Kontoschlüssel autorisieren.
Sie können die Azure-Identitätsclientbibliothek für JavaScript verwenden, um Ihre Anwendung mit Microsoft Entra ID zu authentifizieren.
Hinweis
Wenn Sie Microsoft Entra ID verwenden, um den Zugriff zu autorisieren, sollten Sie sicherstellen, dass Ihrem Sicherheitsprinzipal die Rolle Besitzer von Speicherblobdaten zugewiesen wurde. Weitere Informationen dazu, wie ACL-Berechtigungen angewendet werden und wie sich Änderungen daran auswirken, finden Sie unter Zugriffssteuerungsmodell in Azure Data Lake Storage.
Im Rahmen dieses Prozesses müssen Sie dem Sicherheitsprinzipal eine der folgenden Azure RBAC-Rollen (Azure Role-Based Access Control) zuweisen:
Role | ACL-Einstellungsfunktion |
---|---|
Besitzer von Speicherblobdaten | Alle Verzeichnisse und Dateien im Konto |
Mitwirkender an Speicherblobdaten | Nur Verzeichnisse und Dateien im Besitz des Sicherheitsprinzipals |
Erstellen Sie als Nächstes eine DataLakeServiceClient-Instanz und übergeben Sie eine neue Instanz der DefaultAzureCredential-Klasse.
function GetDataLakeServiceClientAD(accountName) {
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`,
new DefaultAzureCredential()
);
return dataLakeServiceClient;
}
Weitere Informationen zur Verwendung von DefaultAzureCredential
zum Autorisieren des Datenzugriffs finden Sie unter Übersicht: Authentifizieren von JavaScript-Apps bei Azure mithilfe des Azure-SDK.
Abrufen und Festlegen einer Verzeichnis-ACL
Im folgenden Beispiel wird die ACL (Zugriffssteuerungsliste) eines Verzeichnisses namens my-directory
abgerufen und dann festgelegt. Im folgenden Beispiel werden dem zuständigen Benutzer Lese-, Schreib- und Ausführungsberechtigungen und der zuständigen Gruppe nur Lese- und Ausführungsberechtigungen gewährt, während allen anderen lediglich Lesezugriff gewährt wird.
Hinweis
Wenn in Ihrer Anwendung der Zugriff mithilfe von Microsoft Entra ID autorisiert wird, müssen Sie sicherstellen, dass dem Sicherheitsprinzipal, der in der Anwendung zum Autorisieren des Zugriffs verwendet wird, die Rolle „Besitzer von Speicherblobdaten“ zugewiesen ist. Weitere Informationen dazu, wie ACL-Berechtigungen angewandt werden und wie sich Änderungen daran auswirken, finden Sie unter Zugriffssteuerung 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);
}
Sie können auch die ACL des Stammverzeichnisses eines Containers abrufen und festlegen. Übergeben Sie zum Abrufen des Stammverzeichnisses eine leere Zeichenfolge (/
) an die Methode DataLakeFileSystemClient.getDirectoryClient.
Abrufen und Festlegen einer Datei-ACL
Im folgenden Beispiel wird die ACL einer Datei namens upload-file.txt
abgerufen und dann festgelegt. Im folgenden Beispiel werden dem zuständigen Benutzer Lese-, Schreib- und Ausführungsberechtigungen und der zuständigen Gruppe nur Lese- und Ausführungsberechtigungen gewährt, während allen anderen lediglich Lesezugriff gewährt wird.
Hinweis
Wenn in Ihrer Anwendung der Zugriff mithilfe von Microsoft Entra ID autorisiert wird, müssen Sie sicherstellen, dass dem Sicherheitsprinzipal, der in der Anwendung zum Autorisieren des Zugriffs verwendet wird, die Rolle „Besitzer von Speicherblobdaten“ zugewiesen ist. Weitere Informationen dazu, wie ACL-Berechtigungen angewandt werden und wie sich Änderungen daran auswirken, finden Sie unter Zugriffssteuerung 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);
}