Udostępnij za pośrednictwem


Zarządzanie listami ACL w usłudze Azure Data Lake Storage przy użyciu zestawu SDK języka JavaScript w Node.js

W tym artykule pokazano, jak używać Node.js do pobierania, ustawiania i aktualizowania list kontroli dostępu katalogów i plików.

Package (Node Menedżer pakietów) | Przykłady | dają opinię

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz bezpłatnie.
  • Konto usługi Azure Storage z włączoną hierarchiczną przestrzenią nazw (HNS). Postępuj zgodnie z tymi instrukcjami , aby je utworzyć.
  • Node.js LTS
  • Wersja interfejsu wiersza polecenia platformy Azure lub nowsza 2.6.0 .
  • Jedno z następujących uprawnień zabezpieczeń:
    • Aprowizowana jednostka zabezpieczeń identyfikatora entra firmy Microsoft, która została przypisana do roli właściciela danych obiektu blob usługi Storage, w zakresie kontenera docelowego, konta magazynu, nadrzędnej grupy zasobów lub subskrypcji.
    • Właścicielem kontenera docelowego lub katalogu, do którego planujesz zastosować ustawienia listy ACL. Aby ustawić listy ACL cyklicznie, obejmuje to wszystkie elementy podrzędne w kontenerze docelowym lub katalogu.
    • Klucz konta magazynu.

konfigurowanie projektu

W tej sekcji opisano proces przygotowywania projektu do pracy z biblioteką klienta usługi Azure Data Lake Storage dla języka JavaScript.

Instalowanie pakietów

Zainstaluj pakiety dla bibliotek klienckich usługi Azure Data Lake Storage i azure Identity przy użyciu npm install polecenia . Pakiet @azure/tożsamości jest wymagany w przypadku połączeń bez hasła z usługami platformy Azure.

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

Ładowanie modułów

Dodaj następujący kod w górnej części pliku, aby załadować wymagane moduły:

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

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

Nawiązywanie połączenia z kontem

Aby uruchomić przykłady kodu w tym artykule, należy utworzyć wystąpienie DataLakeServiceClient reprezentujące konto magazynu. Obiekt klienta można autoryzować przy użyciu poświadczeń identyfikatora entra firmy Microsoft lub klucza konta.

Możesz użyć biblioteki klienta tożsamości platformy Azure dla języka JavaScript do uwierzytelniania aplikacji za pomocą identyfikatora Entra firmy Microsoft.

Uwaga

Jeśli używasz identyfikatora Entra firmy Microsoft do autoryzowania dostępu, upewnij się, że podmiot zabezpieczeń ma przypisaną rolę Właściciela danych obiektu blob usługi Storage. Aby dowiedzieć się więcej na temat sposobu stosowania uprawnień listy ACL i skutków ich zmiany, zobacz Model kontroli dostępu w usłudze Azure Data Lake Storage.

Najpierw musisz przypisać do podmiotu zabezpieczeń jedną z następujących ról kontroli dostępu na podstawie ról (RBAC) platformy Azure:

Rola Możliwość ustawiania listy ACL
Właściciel danych obiektu blob usługi Storage Wszystkie katalogi i pliki na koncie.
Współautor danych w usłudze Blob Storage Tylko katalogi i pliki należące do podmiotu zabezpieczeń.

Następnie utwórz wystąpienie Klasy DataLakeServiceClient i przekaż nowe wystąpienie klasy DefaultAzureCredential .

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Aby dowiedzieć się więcej na temat autoryzowania DefaultAzureCredential dostępu do danych, zobacz Omówienie: Uwierzytelnianie aplikacji JavaScript na platformie Azure przy użyciu zestawu Azure SDK.

Pobieranie i ustawianie listy ACL katalogu

Ten przykład pobiera i ustawia listę ACL katalogu o nazwie my-directory. W tym przykładzie użytkownik jest właścicielem uprawnień do odczytu, zapisu i wykonywania, nadaje grupie właściciel tylko uprawnienia do odczytu i wykonywania oraz zapewnia wszystkim innym dostęp do odczytu.

Uwaga

Jeśli Aplikacja autoryzuje dostęp przy użyciu identyfikatora Entra firmy Microsoft, upewnij się, że podmiot zabezpieczeń używany przez aplikację do autoryzowania dostępu ma przypisaną rolę Właściciela danych obiektu blob usługi Storage. Aby dowiedzieć się więcej na temat stosowania uprawnień listy ACL i ich skutków, zobacz Kontrola dostępu w usłudze 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);
}

Listę ACL katalogu głównego kontenera można również pobrać i ustawić. Aby uzyskać katalog główny, przekaż pusty ciąg (/) do metody DataLakeFileSystemClient.getDirectoryClient .

Pobieranie i ustawianie listy ACL plików

Ten przykład pobiera i ustawia listę ACL pliku o nazwie upload-file.txt. W tym przykładzie użytkownik jest właścicielem uprawnień do odczytu, zapisu i wykonywania, nadaje grupie właściciel tylko uprawnienia do odczytu i wykonywania oraz zapewnia wszystkim innym dostęp do odczytu.

Uwaga

Jeśli Aplikacja autoryzuje dostęp przy użyciu identyfikatora Entra firmy Microsoft, upewnij się, że podmiot zabezpieczeń używany przez aplikację do autoryzowania dostępu ma przypisaną rolę Właściciela danych obiektu blob usługi Storage. Aby dowiedzieć się więcej na temat stosowania uprawnień listy ACL i ich skutków, zobacz Kontrola dostępu w usłudze 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);
}

Zobacz też