使用 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);
}