Share via


JavaScript SDK gebruiken in Node.js voor het beheren van ACL's in Azure Data Lake Storage

In dit artikel leest u hoe u Node.js kunt gebruiken om de toegangsbeheerlijsten van mappen en bestanden op te halen, in te stellen en bij te werken.

Pakketvoorbeelden (Node Pakketbeheer)Feedback | | geven

Vereisten

  • Azure-abonnement: maak er gratis een.
  • Azure Storage-account waarvoor HNS (hiërarchische naamruimte) is ingeschakeld. Volg deze instructies om er een te maken.
  • Node.js LTS
  • Azure CLI-versie 2.6.0 of hoger.
  • Een van de volgende beveiligingsmachtigingen:
    • Een ingerichte Microsoft Entra ID-beveiligingsprincipaal waaraan de rol Eigenaar van opslagblobgegevens is toegewezen, die is gericht op de doelcontainer, het opslagaccount, de bovenliggende resourcegroep of het abonnement.
    • De gebruiker die eigenaar is van de doelcontainer of map waarop u ACL-instellingen wilt toepassen. Als u ACL's recursief wilt instellen, omvat dit alle onderliggende items in de doelcontainer of map.
    • Sleutel van opslagaccount.

Uw project instellen

In deze sectie wordt uitgelegd hoe u een project voorbereidt voor gebruik met de Azure Data Lake Storage-clientbibliotheek voor JavaScript.

Pakketten installeren

Installeer pakketten voor de Azure Data Lake Storage- en Azure Identity-clientbibliotheken met behulp van de npm install opdracht. Het @azure/identiteitspakket is nodig voor wachtwoordloze verbindingen met Azure-services.

npm install @azure/storage-file-datalake
npm install @azure/identity

Modules laden

Voeg de volgende code toe boven aan het bestand om de vereiste modules te laden:

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

const { DefaultAzureCredential } = require('@azure/identity');

Verbinding maken met het account

Als u de codevoorbeelden in dit artikel wilt uitvoeren, moet u een DataLakeServiceClient-exemplaar maken dat het opslagaccount vertegenwoordigt. U kunt het clientobject autoriseren met Microsoft Entra ID-referenties of met een accountsleutel.

U kunt de Azure Identity-clientbibliotheek voor JavaScript gebruiken om uw toepassing te verifiëren met Microsoft Entra-id.

Notitie

Als u de Microsoft Entra-id gebruikt om toegang te verlenen, moet u ervoor zorgen dat de rol van de eigenaar van de opslagblobgegevens is toegewezen aan uw beveiligingsprincipaal. Zie het Access Control-model in Azure Data Lake Storage voor meer informatie over hoe ACL-machtigingen worden toegepast en wat de gevolgen zijn van het wijzigen ervan.

Eerst moet u een van de volgende azure RBAC-rollen (op rollen gebaseerd toegangsbeheer) toewijzen aan uw beveiligingsprincipaal:

Role ACL-instellingsmogelijkheid
Eigenaar van opslagblobgegevens Alle mappen en bestanden in het account.
Inzender van opslag-blobgegevens Alleen mappen en bestanden die eigendom zijn van de beveiligingsprincipaal.

Maak vervolgens een DataLakeServiceClient-exemplaar en geef een nieuw exemplaar van de klasse DefaultAzureCredential door .

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Zie Overzicht: JavaScript-apps verifiëren bij Azure met behulp van de Azure SDK voor meer informatie over het DefaultAzureCredential autoriseren van toegang tot gegevens.

Een map-ACL ophalen en instellen

In dit voorbeeld wordt de ACL van een map met de naam my-directoryopgehaald en ingesteld. Dit voorbeeld geeft de gebruiker lees-, schrijf- en uitvoermachtigingen, geeft de groep die eigenaar is alleen lees- en uitvoermachtigingen en geeft alle anderen leestoegang.

Notitie

Als uw toepassing toegang autoriseert met behulp van Microsoft Entra-id, moet u ervoor zorgen dat de beveiligingsprincipaal die uw toepassing gebruikt voor het autoriseren van toegang is toegewezen aan de rol Eigenaar van opslagblobgegevens. Zie Toegangsbeheer in Azure Data Lake Storage voor meer informatie over hoe ACL-machtigingen worden toegepast en wat de gevolgen zijn van het wijzigen ervan.

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

U kunt ook de ACL van de hoofdmap van een container ophalen en instellen. Als u de hoofdmap wilt ophalen, geeft u een lege tekenreeks (/) door aan de methode DataLakeFileSystemClient.getDirectoryClient .

Een bestands-ACL ophalen en instellen

In dit voorbeeld wordt de ACL van een bestand met de naam upload-file.txtopgehaald en ingesteld. Dit voorbeeld geeft de gebruiker lees-, schrijf- en uitvoermachtigingen, geeft de groep die eigenaar is alleen lees- en uitvoermachtigingen en geeft alle anderen leestoegang.

Notitie

Als uw toepassing toegang autoriseert met behulp van Microsoft Entra-id, moet u ervoor zorgen dat de beveiligingsprincipaal die uw toepassing gebruikt voor het autoriseren van toegang is toegewezen aan de rol Eigenaar van opslagblobgegevens. Zie Toegangsbeheer in Azure Data Lake Storage voor meer informatie over hoe ACL-machtigingen worden toegepast en wat de gevolgen zijn van het wijzigen ervan.

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

Zie ook