Använda JavaScript SDK i Node.js för att hantera ACL:er i Azure Data Lake Storage
Den här artikeln visar hur du använder Node.js för att hämta, ange och uppdatera åtkomstkontrollistor med kataloger och filer.
Paket (Node Package Manager) | Exempel | ger feedback
Förutsättningar
- Azure-prenumeration – skapa en kostnadsfritt.
- Azure Storage-konto med hierarkisk namnrymd (HNS) aktiverat. Följ dessa instruktioner för att skapa en.
- Node.js LTS
- Azure CLI-version
2.6.0
eller senare. - En av följande säkerhetsbehörigheter:
- Ett etablerat Säkerhetsobjekt för Microsoft Entra-ID som har tilldelats rollen Lagringsblobdataägare, som är begränsad till målcontainern, lagringskontot, den överordnade resursgruppen eller prenumerationen.
- Ägande användare av målcontainern eller katalogen som du planerar att tillämpa ACL-inställningar på. Om du vill ange ACL:er rekursivt inkluderar detta alla underordnade objekt i målcontainern eller katalogen.
- Lagringskontonyckel.
Konfigurera projektet
Det här avsnittet beskriver hur du förbereder ett projekt för att arbeta med Azure Data Lake Storage-klientbiblioteket för JavaScript.
Installera paket
Installera paket för Azure Data Lake Storage- och Azure Identity-klientbiblioteken med hjälp av npm install
kommandot . Det @azure/identitetspaketet behövs för lösenordslösa anslutningar till Azure-tjänster.
npm install @azure/storage-file-datalake
npm install @azure/identity
Läsa in moduler
Lägg till följande kod överst i filen för att läsa in de moduler som krävs:
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
const { DefaultAzureCredential } = require('@azure/identity');
Ansluta till kontot
Om du vill köra kodexemplen i den här artikeln måste du skapa en DataLakeServiceClient-instans som representerar lagringskontot. Du kan auktorisera klientobjektet med autentiseringsuppgifter för Microsoft Entra-ID eller med en kontonyckel.
Du kan använda Azure Identity-klientbiblioteket för JavaScript för att autentisera ditt program med Microsoft Entra-ID.
Kommentar
Om du använder Microsoft Entra-ID för att auktorisera åtkomst kontrollerar du att ditt säkerhetsobjekt har tilldelats rollen Lagringsblobdataägare. Mer information om hur ACL-behörigheter tillämpas och effekterna av att ändra dem finns i Åtkomstkontrollmodell i Azure Data Lake Storage.
Först måste du tilldela någon av följande rollbaserade åtkomstkontrollroller i Azure (Azure RBAC) till ditt säkerhetsobjekt:
Roll | ACL-inställningsfunktion |
---|---|
Storage Blob Data-ägare | Alla kataloger och filer i kontot. |
Storage Blob datadeltagare | Endast kataloger och filer som ägs av säkerhetsobjektet. |
Skapa sedan en DataLakeServiceClient-instans och skicka in en ny instans av klassen DefaultAzureCredential .
function GetDataLakeServiceClientAD(accountName) {
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`,
new DefaultAzureCredential()
);
return dataLakeServiceClient;
}
Mer information om hur du använder DefaultAzureCredential
för att auktorisera åtkomst till data finns i Översikt: Autentisera JavaScript-appar till Azure med hjälp av Azure SDK.
Hämta och ange en katalog-ACL
Det här exemplet hämtar och anger sedan ACL för en katalog med namnet my-directory
. Det här exemplet ger den ägande användaren läs-, skriv- och körningsbehörigheter, ger ägande gruppen endast läs- och körningsbehörigheter och ger alla andra läsåtkomst.
Kommentar
Om ditt program auktoriserar åtkomst med hjälp av Microsoft Entra-ID kontrollerar du att det säkerhetsobjekt som programmet använder för att auktorisera åtkomst har tilldelats rollen Lagringsblobdataägare. Mer information om hur ACL-behörigheter tillämpas och hur du ändrar dem finns i Åtkomstkontroll i 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);
}
Du kan också hämta och ange ACL för rotkatalogen för en container. För att hämta rotkatalogen skickar du en tom sträng (/
) till metoden DataLakeFileSystemClient.getDirectoryClient .
Hämta och ange en fil-ACL
Det här exemplet hämtar och anger sedan ACL för en fil med namnet upload-file.txt
. Det här exemplet ger den ägande användaren läs-, skriv- och körningsbehörigheter, ger ägande gruppen endast läs- och körningsbehörigheter och ger alla andra läsåtkomst.
Kommentar
Om ditt program auktoriserar åtkomst med hjälp av Microsoft Entra-ID kontrollerar du att det säkerhetsobjekt som programmet använder för att auktorisera åtkomst har tilldelats rollen Lagringsblobdataägare. Mer information om hur ACL-behörigheter tillämpas och hur du ändrar dem finns i Åtkomstkontroll i 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);
}