Sdílet prostřednictvím


Použití sady JavaScript SDK v Node.js ke správě seznamů ACL ve službě Azure Data Lake Storage

V tomto článku se dozvíte, jak pomocí Node.js získat, nastavit a aktualizovat seznamy řízení přístupu adresářů a souborů.

Ukázky | balíčku (node Správce balíčků) | Poskytnout zpětnou vazbu

Požadavky

  • Předplatné Azure – vytvořte si ho zdarma.
  • Účet úložiště Azure s povoleným hierarchickým oborem názvů (HNS). Postupujte podle těchto pokynů a vytvořte ho.
  • Node.js LTS
  • Verze 2.6.0 Azure CLI nebo vyšší.
  • Jedno z následujících oprávnění zabezpečení:
    • Zřízený objekt zabezpečení Microsoft Entra ID, který má přiřazenou roli Vlastník dat objektu blob služby Storage, vymezený cílový kontejner, účet úložiště, nadřazenou skupinu prostředků nebo předplatné.
    • Vlastníkem cílového kontejneru nebo adresáře, u kterého plánujete použít nastavení seznamu ACL. Pokud chcete seznamy ACL nastavit rekurzivně, zahrnuje to všechny podřízené položky v cílovém kontejneru nebo adresáři.
    • Klíč účtu úložiště.

Nastavení projektu

Tato část vás provede přípravou projektu pro práci s klientskou knihovnou Azure Data Lake Storage pro JavaScript.

Instalace balíčků

Pomocí příkazu nainstalujte balíčky pro klientské knihovny npm install Azure Data Lake Storage a Azure Identity. Balíček @azure/identity je potřeba pro připojení bez hesla ke službám Azure.

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

Načtení modulů

Do horní části souboru přidejte následující kód, který načte požadované moduly:

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

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

Připojení k účtu

Pokud chcete spustit příklady kódu v tomto článku, musíte vytvořit instanci DataLakeServiceClient , která představuje účet úložiště. Klientský objekt můžete autorizovat pomocí přihlašovacích údajů Microsoft Entra ID nebo pomocí klíče účtu.

Klientskou knihovnu identit Azure pro JavaScript můžete použít k ověření aplikace pomocí Microsoft Entra ID.

Poznámka:

Pokud k autorizaci přístupu používáte MICROSOFT Entra ID, ujistěte se, že je vašemu objektu zabezpečení přiřazena role Vlastník dat objektu blob služby Storage. Další informace o tom, jak se použijí oprávnění seznamu ACL a vliv jejich změny, najdete v tématu Model řízení přístupu ve službě Azure Data Lake Storage.

Nejprve budete muset k objektu zabezpečení přiřadit jednu z následujících rolí řízení přístupu na základě role v Azure (Azure RBAC ):

Role Funkce nastavení seznamu ACL
Vlastník dat v objektech blob služby Storage Všechny adresáře a soubory v účtu.
Přispěvatel dat objektů blob úložiště Objekt zabezpečení vlastní pouze adresáře a soubory.

Dále vytvořte instanci DataLakeServiceClient a předejte novou instanci DefaultAzureCredential třídy.

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Další informace o použití DefaultAzureCredential k autorizaci přístupu k datům najdete v tématu Přehled: Ověřování javascriptových aplikací v Azure pomocí sady Azure SDK.

Získání a nastavení seznamu ACL adresáře

Tento příklad získá a potom nastaví seznam ACL adresáře s názvem my-directory. Tento příklad dává vlastnící uživateli oprávnění ke čtení, zápisu a spouštění, dává vlastnící skupině oprávnění jen ke čtení a spouštění a dává všem ostatním přístup pro čtení.

Poznámka:

Pokud vaše aplikace autorizuje přístup pomocí Microsoft Entra ID, ujistěte se, že objekt zabezpečení, který vaše aplikace používá k autorizaci přístupu, má přiřazenou roli Vlastník dat objektu blob služby Storage. Další informace o tom, jak se použijí oprávnění seznamu ACL a vliv jejich změny, najdete v tématu Řízení přístupu ve službě 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);
}

Můžete také získat a nastavit seznam ACL kořenového adresáře kontejneru. Kořenový adresář získáte předáním prázdného řetězce (/) do metody DataLakeFileSystemClient.getDirectoryClient .

Získání a nastavení seznamu ACL souboru

Tento příklad získá a potom nastaví seznam ACL souboru s názvem upload-file.txt. Tento příklad dává vlastnící uživateli oprávnění ke čtení, zápisu a spouštění, dává vlastnící skupině oprávnění jen ke čtení a spouštění a dává všem ostatním přístup pro čtení.

Poznámka:

Pokud vaše aplikace autorizuje přístup pomocí Microsoft Entra ID, ujistěte se, že objekt zabezpečení, který vaše aplikace používá k autorizaci přístupu, má přiřazenou roli Vlastník dat objektu blob služby Storage. Další informace o tom, jak se použijí oprávnění seznamu ACL a vliv jejich změny, najdete v tématu Řízení přístupu ve službě 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);
}

Viz také