分享方式:


使用 Node.js 中的 JavaScript SDK 來管理 Azure Data Lake Storage 中的 ACL

此文章說明如何使用 Node.js 來取得、設定及更新目錄和檔案的存取控制清單。

套件 (節點套件管理員) (英文) | 範例 (英文) | 提供意見反應 (英文)

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 已啟用階層命名空間 (HNS) 的 Azure 儲存體帳戶。 遵循下列指示以建立帳戶。
  • Node.js LTS
  • Azure CLI 2.6.0 版或更高版本。
  • 下列其中一個安全性權限:
    • 已佈建的 Microsoft Entra ID 安全性主體,該主體已獲派儲存體 Blob 資料擁有者角色,且範圍設定為目標容器、儲存體帳戶、上層資源群組或訂用帳戶。
    • 您計劃套用 ACL 設定的目標容器或目錄的擁有使用者。 若要以遞迴方式設定 ACL,這包括目標容器或目錄中的所有子項目。
    • 儲存體帳戶金鑰。

設定您的專案

本章節會引導您準備專案以搭配適用於 JavaScript 的 Azure Data Lake Storage 用戶端程式庫使用。

安裝套件

使用 npm install 命令安裝 Azure Data Lake Storage 和 Azure 身分識別用戶端程式庫的套件。 需要 @azure/身分識別套件才能對 Azure 服務進行無密碼連線。

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

載入模組

在檔案頂端新增下列程式碼以載入所需的模組:

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

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

連線到帳戶

若要使用此文章中的程式碼範例,您必須建立代表儲存體帳戶的 DataLakeServiceClient 執行個體。 您可以使用 Microsoft Entra ID 認證或帳戶金鑰來授權用戶端物件。

您可以使用適用於 JavaScript 的 Azure 身分識別用戶端程式庫,向 Microsoft Entra ID 驗證您的應用程式。

注意

如果您使用 Microsoft Entra ID 來授權存取,則需確定已將儲存體 Blob 資料擁有者角色指派給您的安全性主體。 若要深入了解如何套用 ACL 權限以及變更權限的影響,請參閱 Azure Data Lake Storage 中的存取控制模型 (部分機器翻譯)。

首先,您必須將下列其中一個 Azure 角色型存取控制 (Azure RBAC) 角色指派給您的安全性主體:

角色 ACL 設定功能
儲存體 Blob 資料擁有者 帳戶中的所有目錄和檔案。
儲存體 Blob 資料參與者 只有安全性主體所擁有的目錄和檔案。

接著,建立 DataLakeServiceClient 執行個體,並傳入 DefaultAzureCredential 類別的新執行個體。

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

若要深入了解如何使用 DefaultAzureCredential 來授權存取資料,請參閱概觀: 使用 Azure SDK 向 Azure 驗證 JavaScript 應用程式

取得和設定目錄 ACL

此範例會取得並設定名為 my-directory 之目錄的 ACL。 此範例會為擁有使用者提供讀取、寫入及執行權限,僅為擁有群組提供讀取和執行權限,並為所有其他人員提供讀取權限。

注意

如果您的應用程式使用 Microsoft Entra ID 來授與存取權,則需確定您的應用程式用來授權存取的安全性主體已獲指派儲存體 Blob 資料擁有者角色。 若要深入了解如何套用 ACL 權限以及變更權限的影響,請參閱 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);
}

您也可以取得和設定容器根目錄的 ACL。 若要取得根目錄,請將空字串 (/) 傳遞到 DataLakeFileSystemClient.getDirectoryClient 方法。

取得和設定檔案 ACL

此範例會取得並設定名為 upload-file.txt 之檔案的 ACL。 此範例會為擁有使用者提供讀取、寫入及執行權限,僅為擁有群組提供讀取和執行權限,並為所有其他人員提供讀取權限。

注意

如果您的應用程式使用 Microsoft Entra ID 來授與存取權,則需確定您的應用程式用來授權存取的安全性主體已獲指派儲存體 Blob 資料擁有者角色。 若要深入了解如何套用 ACL 權限以及變更權限的影響,請參閱 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);
}

另請參閱