Share via


Verwenden von JavaScript SDK in Node.js zum Verwalten von Zugriffssteuerungslisten in Azure Data Lake Storage Gen2

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

  • Ein Azure-Abonnement. Weitere Informationen finden Sie unter Kostenlose Azure-Testversion.

  • Ein Speicherkonto, für das der hierarchische Namespace aktiviert ist. Befolgen Sie diese Anleitung für die Erstellung.

  • 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

Installieren Sie die Data Lake-Clientbibliothek für JavaScript, indem Sie ein Terminalfenster öffnen und den folgenden Befehl eingeben.

npm install @azure/storage-file-datalake

Importieren Sie das storage-file-datalake-Paket, indem Sie die folgende Anweisung oben in Ihrer Codedatei einfügen.

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

Herstellen einer Verbindung mit dem Konto

Wenn Sie die Codeausschnitte in diesem Artikel verwenden möchten, müssen Sie eine DataLakeServiceClient-Instanz erstellen, die das Speicherkonto darstellt.

Herstellen einer Verbindung mithilfe von Microsoft Entra ID

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 Gen2.

Sie können die Azure-Identitätsclientbibliothek für JS verwenden, um Ihre Anwendung bei Microsoft Entra ID zu authentifizieren.

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.

Herstellen einer Verbindung per Kontoschlüssel

Sie können den Zugriff auf Daten mithilfe Ihrer Kontozugriffsschlüssel (Gemeinsam verwendeter Schlüssel) autorisieren. In diesem Beispiel wird eine DataLakeServiceClient-Instanz erstellt, die mit dem Kontoschlüssel autorisiert ist.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

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

  return dataLakeServiceClient;
}

Achtung

Eine Autorisierung mit einem gemeinsam verwendeten Schlüssel wird nicht empfohlen, da sie möglicherweise weniger sicher ist. Um optimale Sicherheit zu gewährleisten, deaktivieren Sie die Autorisierung über gemeinsam genutzten Schlüssel für Ihr Speicherkonto. Eine Anleitung finden Sie unter Verhindern der Autorisierung mit gemeinsam verwendeten Schlüsseln für ein Azure Storage-Konto.

Sie sollten die Verwendung von Zugriffsschlüsseln und Verbindungszeichenfolgen auf vorläufige Proof-of-Concept-Anwendungen oder Entwicklungsprototypen beschränken, die keinen Zugriff auf Produktionsdaten oder vertrauliche Daten haben. In allen anderen Fällen sollten Sie immer die tokenbasierten Authentifizierungsklassen, die im Azure SDK verfügbar sind, für die Authentifizierung bei Azure-Ressourcen verwenden.

Microsoft empfiehlt, dass Clients entweder Microsoft Entra ID oder eine SAS (Shared Access Signature) verwenden, um den Zugriff auf Daten in Azure Storage zu autorisieren. Weitere Informationen finden Sie unter Autorisieren von Vorgängen für den Datenzugriff.

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 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);
}

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 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);
}

Weitere Informationen