Dela via


Använda JavaScript SDK i Node.js för att hantera ACL:er i Azure Data Lake Storage

Den här artikeln visar hur du använder Node.js för att hämta, ange och uppdatera åtkomstkontrollistor med kataloger och filer.

Paket (Node Package Manager) | Exempel | ger feedback

Förutsättningar

  • Azure-prenumeration – skapa en kostnadsfritt.
  • Azure Storage-konto med hierarkisk namnrymd (HNS) aktiverat. Följ dessa instruktioner för att skapa en.
  • Node.js LTS
  • Azure CLI-version 2.6.0 eller senare.
  • En av följande säkerhetsbehörigheter:
    • Ett etablerat Säkerhetsobjekt för Microsoft Entra-ID som har tilldelats rollen Lagringsblobdataägare, som är begränsad till målcontainern, lagringskontot, den överordnade resursgruppen eller prenumerationen.
    • Ägande användare av målcontainern eller katalogen som du planerar att tillämpa ACL-inställningar på. Om du vill ange ACL:er rekursivt inkluderar detta alla underordnade objekt i målcontainern eller katalogen.
    • Lagringskontonyckel.

Konfigurera projektet

Det här avsnittet beskriver hur du förbereder ett projekt för att arbeta med Azure Data Lake Storage-klientbiblioteket för JavaScript.

Installera paket

Installera paket för Azure Data Lake Storage- och Azure Identity-klientbiblioteken med hjälp av npm install kommandot . Det @azure/identitetspaketet behövs för lösenordslösa anslutningar till Azure-tjänster.

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

Läsa in moduler

Lägg till följande kod överst i filen för att läsa in de moduler som krävs:

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

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

Ansluta till kontot

Om du vill köra kodexemplen i den här artikeln måste du skapa en DataLakeServiceClient-instans som representerar lagringskontot. Du kan auktorisera klientobjektet med autentiseringsuppgifter för Microsoft Entra-ID eller med en kontonyckel.

Du kan använda Azure Identity-klientbiblioteket för JavaScript för att autentisera ditt program med Microsoft Entra-ID.

Kommentar

Om du använder Microsoft Entra-ID för att auktorisera åtkomst kontrollerar du att ditt säkerhetsobjekt har tilldelats rollen Lagringsblobdataägare. Mer information om hur ACL-behörigheter tillämpas och effekterna av att ändra dem finns i Åtkomstkontrollmodell i Azure Data Lake Storage.

Först måste du tilldela någon av följande rollbaserade åtkomstkontrollroller i Azure (Azure RBAC) till ditt säkerhetsobjekt:

Roll ACL-inställningsfunktion
Storage Blob Data-ägare Alla kataloger och filer i kontot.
Storage Blob datadeltagare Endast kataloger och filer som ägs av säkerhetsobjektet.

Skapa sedan en DataLakeServiceClient-instans och skicka in en ny instans av klassen DefaultAzureCredential .

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Mer information om hur du använder DefaultAzureCredential för att auktorisera åtkomst till data finns i Översikt: Autentisera JavaScript-appar till Azure med hjälp av Azure SDK.

Hämta och ange en katalog-ACL

Det här exemplet hämtar och anger sedan ACL för en katalog med namnet my-directory. Det här exemplet ger den ägande användaren läs-, skriv- och körningsbehörigheter, ger ägande gruppen endast läs- och körningsbehörigheter och ger alla andra läsåtkomst.

Kommentar

Om ditt program auktoriserar åtkomst med hjälp av Microsoft Entra-ID kontrollerar du att det säkerhetsobjekt som programmet använder för att auktorisera åtkomst har tilldelats rollen Lagringsblobdataägare. Mer information om hur ACL-behörigheter tillämpas och hur du ändrar dem finns i Åtkomstkontroll i 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);
}

Du kan också hämta och ange ACL för rotkatalogen för en container. För att hämta rotkatalogen skickar du en tom sträng (/) till metoden DataLakeFileSystemClient.getDirectoryClient .

Hämta och ange en fil-ACL

Det här exemplet hämtar och anger sedan ACL för en fil med namnet upload-file.txt. Det här exemplet ger den ägande användaren läs-, skriv- och körningsbehörigheter, ger ägande gruppen endast läs- och körningsbehörigheter och ger alla andra läsåtkomst.

Kommentar

Om ditt program auktoriserar åtkomst med hjälp av Microsoft Entra-ID kontrollerar du att det säkerhetsobjekt som programmet använder för att auktorisera åtkomst har tilldelats rollen Lagringsblobdataägare. Mer information om hur ACL-behörigheter tillämpas och hur du ändrar dem finns i Åtkomstkontroll i 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);
}

Se även