Bagikan melalui


Menggunakan JavaScript SDK di Node.js untuk mengelola ACL di Azure Data Lake Storage

Artikel ini memperlihatkan kepada Anda cara menggunakan Node.js untuk mendapatkan, mengatur, dan memperbarui daftar kontrol akses direktori dan file.

Paket (Manajer Paket Node) | Sampel | Beri Umpan Balik

Prasyarat

  • Langganan Azure - membuat langganan secara gratis.
  • Akun penyimpanan Azure yang mengaktifkan namespace hierarkis (HNS). Ikuti petunjuk berikut untuk membuatnya.
  • Node.js LTS
  • Azure CLI versi 2.6.0 atau lebih tinggi.
  • Salah satu izin keamanan berikut:
    • Prinsip keamanan MICROSOFT Entra ID yang disediakan yang telah ditetapkan peran Pemilik Data Blob Penyimpanan, dilingkupkan ke kontainer target, akun penyimpanan, grup sumber daya induk, atau langganan.
    • Pengguna pemilik kontainer target atau direktori tempat Anda berencana menerapkan pengaturan ACL. Untuk mengatur ACL secara berulang, ini mencakup semua item anak dalam kontainer atau direktori target.
    • Kunci akun penyimpanan.

Menyiapkan proyek Anda

Bagian ini memandikan Anda menyiapkan proyek untuk bekerja dengan pustaka klien Azure Data Lake Storage untuk JavaScript.

Memasang paket

Instal paket untuk pustaka klien Azure Data Lake Storage dan Azure Identity menggunakan npm install perintah . Paket @azure/identitas diperlukan untuk koneksi tanpa kata sandi ke layanan Azure.

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

Memuat modul

Tambahkan kode berikut di bagian atas file Anda untuk memuat modul yang diperlukan:

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

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

Sambungkan ke akun

Untuk menjalankan contoh kode dalam artikel ini, Anda perlu membuat instans DataLakeServiceClient yang mewakili akun penyimpanan. Anda dapat mengotorisasi objek klien dengan kredensial ID Microsoft Entra atau dengan kunci akun.

Anda dapat menggunakan pustaka klien identitas Azure untuk JavaScript untuk mengautentikasi aplikasi Anda dengan ID Microsoft Entra.

Catatan

Jika Anda menggunakan ID Microsoft Entra untuk mengotorisasi akses, pastikan bahwa prinsip keamanan Anda telah diberi peran Pemilik Data Blob Penyimpanan. Untuk mempelajari selengkapnya tentang bagaimana izin ACL diterapkan dan efek mengubahnya, lihat Model kontrol akses di Azure Data Lake Storage.

Pertama, Anda harus menetapkan salah satu peran kontrol akses berbasis peran Azure (Azure RBAC) berikut ke prinsip keamanan Anda:

Peran Kapabilitas pengaturan ACL
Pemilik Data Blob Penyimpanan Semua direktori dan file dalam akun tersebut.
Data blob penyimpanan kontributor Hanya direktori dan file yang dimiliki oleh prinsipal keamanan.

Selanjutnya, buat instans DataLakeServiceClient dan teruskan instans baru kelas DefaultAzureCredential .

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Untuk mempelajari selengkapnya tentang menggunakan DefaultAzureCredential untuk mengotorisasi akses ke data, lihat Gambaran Umum: Mengautentikasi aplikasi JavaScript ke Azure menggunakan Azure SDK.

Dapatkan dan atur ACL direktori

Contoh ini mendapatkan lalu menetapkan ACL direktori dengan nama my-directory. Contoh ini memberi pengguna pemilik izin membaca, menulis, dan menjalankan, memberi grup pemilik hanya izin membaca dan menjalankan, dan memberi akses baca ke semua orang lain.

Catatan

Jika aplikasi Anda mengotorisasi akses dengan menggunakan ID Microsoft Entra, pastikan bahwa prinsip keamanan yang digunakan aplikasi Anda untuk mengotorisasi akses telah diberi peran Pemilik Data Blob Penyimpanan. Untuk mempelajari selengkapnya tentang bagaimana izin ACL diterapkan dan efek mengubahnya, lihat Kontrol akses di 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);
}

Anda juga bisa mendapatkan dan mengatur ACL direktori root kontainer. Untuk mendapatkan direktori akar, loloskan string kosong (/) ke dalam metode DataLakeFileSystemClient.getDirectoryClient.

Dapatkan dan atur file ACL

Contoh ini mendapatkan lalu menetapkan ACL file dengan nama upload-file.txt. Contoh ini memberi pengguna pemilik izin membaca, menulis, dan menjalankan, memberi grup pemilik hanya izin membaca dan menjalankan, dan memberi akses baca ke semua orang lain.

Catatan

Jika aplikasi Anda mengotorisasi akses dengan menggunakan ID Microsoft Entra, pastikan bahwa prinsip keamanan yang digunakan aplikasi Anda untuk mengotorisasi akses telah diberi peran Pemilik Data Blob Penyimpanan. Untuk mempelajari selengkapnya tentang bagaimana izin ACL diterapkan dan efek mengubahnya, lihat Kontrol akses di 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);
}

Lihat juga