JavaScript SDK gebruiken in Node.js voor het beheren van ACL's in Azure Data Lake Storage
In dit artikel leest u hoe u Node.js kunt gebruiken om de toegangsbeheerlijsten van mappen en bestanden op te halen, in te stellen en bij te werken.
Pakketvoorbeelden (Node Pakketbeheer)Feedback | | geven
Vereisten
- Azure-abonnement: maak er gratis een.
- Azure Storage-account waarvoor HNS (hiërarchische naamruimte) is ingeschakeld. Volg deze instructies om er een te maken.
- Node.js LTS
- Azure CLI-versie
2.6.0
of hoger. - Een van de volgende beveiligingsmachtigingen:
- Een ingerichte Microsoft Entra ID-beveiligingsprincipaal waaraan de rol Eigenaar van opslagblobgegevens is toegewezen, die is gericht op de doelcontainer, het opslagaccount, de bovenliggende resourcegroep of het abonnement.
- De gebruiker die eigenaar is van de doelcontainer of map waarop u ACL-instellingen wilt toepassen. Als u ACL's recursief wilt instellen, omvat dit alle onderliggende items in de doelcontainer of map.
- Sleutel van opslagaccount.
Uw project instellen
In deze sectie wordt uitgelegd hoe u een project voorbereidt voor gebruik met de Azure Data Lake Storage-clientbibliotheek voor JavaScript.
Pakketten installeren
Installeer pakketten voor de Azure Data Lake Storage- en Azure Identity-clientbibliotheken met behulp van de npm install
opdracht. Het @azure/identiteitspakket is nodig voor wachtwoordloze verbindingen met Azure-services.
npm install @azure/storage-file-datalake
npm install @azure/identity
Modules laden
Voeg de volgende code toe boven aan het bestand om de vereiste modules te laden:
const {
AzureStorageDataLake,
DataLakeServiceClient,
StorageSharedKeyCredential
} = require("@azure/storage-file-datalake");
const { DefaultAzureCredential } = require('@azure/identity');
Verbinding maken met het account
Als u de codevoorbeelden in dit artikel wilt uitvoeren, moet u een DataLakeServiceClient-exemplaar maken dat het opslagaccount vertegenwoordigt. U kunt het clientobject autoriseren met Microsoft Entra ID-referenties of met een accountsleutel.
U kunt de Azure Identity-clientbibliotheek voor JavaScript gebruiken om uw toepassing te verifiëren met Microsoft Entra-id.
Notitie
Als u de Microsoft Entra-id gebruikt om toegang te verlenen, moet u ervoor zorgen dat de rol van de eigenaar van de opslagblobgegevens is toegewezen aan uw beveiligingsprincipaal. Zie het Access Control-model in Azure Data Lake Storage voor meer informatie over hoe ACL-machtigingen worden toegepast en wat de gevolgen zijn van het wijzigen ervan.
Eerst moet u een van de volgende azure RBAC-rollen (op rollen gebaseerd toegangsbeheer) toewijzen aan uw beveiligingsprincipaal:
Role | ACL-instellingsmogelijkheid |
---|---|
Eigenaar van opslagblobgegevens | Alle mappen en bestanden in het account. |
Inzender van opslag-blobgegevens | Alleen mappen en bestanden die eigendom zijn van de beveiligingsprincipaal. |
Maak vervolgens een DataLakeServiceClient-exemplaar en geef een nieuw exemplaar van de klasse DefaultAzureCredential door .
function GetDataLakeServiceClientAD(accountName) {
const dataLakeServiceClient = new DataLakeServiceClient(
`https://${accountName}.dfs.core.windows.net`,
new DefaultAzureCredential()
);
return dataLakeServiceClient;
}
Zie Overzicht: JavaScript-apps verifiëren bij Azure met behulp van de Azure SDK voor meer informatie over het DefaultAzureCredential
autoriseren van toegang tot gegevens.
Een map-ACL ophalen en instellen
In dit voorbeeld wordt de ACL van een map met de naam my-directory
opgehaald en ingesteld. Dit voorbeeld geeft de gebruiker lees-, schrijf- en uitvoermachtigingen, geeft de groep die eigenaar is alleen lees- en uitvoermachtigingen en geeft alle anderen leestoegang.
Notitie
Als uw toepassing toegang autoriseert met behulp van Microsoft Entra-id, moet u ervoor zorgen dat de beveiligingsprincipaal die uw toepassing gebruikt voor het autoriseren van toegang is toegewezen aan de rol Eigenaar van opslagblobgegevens. Zie Toegangsbeheer in Azure Data Lake Storage voor meer informatie over hoe ACL-machtigingen worden toegepast en wat de gevolgen zijn van het wijzigen ervan.
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);
}
U kunt ook de ACL van de hoofdmap van een container ophalen en instellen. Als u de hoofdmap wilt ophalen, geeft u een lege tekenreeks (/
) door aan de methode DataLakeFileSystemClient.getDirectoryClient .
Een bestands-ACL ophalen en instellen
In dit voorbeeld wordt de ACL van een bestand met de naam upload-file.txt
opgehaald en ingesteld. Dit voorbeeld geeft de gebruiker lees-, schrijf- en uitvoermachtigingen, geeft de groep die eigenaar is alleen lees- en uitvoermachtigingen en geeft alle anderen leestoegang.
Notitie
Als uw toepassing toegang autoriseert met behulp van Microsoft Entra-id, moet u ervoor zorgen dat de beveiligingsprincipaal die uw toepassing gebruikt voor het autoriseren van toegang is toegewezen aan de rol Eigenaar van opslagblobgegevens. Zie Toegangsbeheer in Azure Data Lake Storage voor meer informatie over hoe ACL-machtigingen worden toegepast en wat de gevolgen zijn van het wijzigen ervan.
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);
}