Share via


Utilisez le Kit de développement logiciel (SDK) JavaScript dans Node.js pour gérer les listes de contrôle d’accès dans Azure Data Lake Storage Gen2

Cet article explique comment utiliser Node.js pour récupérer, définir et mettre à jour les listes de contrôle d’accès des répertoires et des fichiers.

Package (Gestionnaire de package Node) | Exemples | Envoyer des commentaires

Prérequis

  • Un abonnement Azure. Pour plus d’informations, consultez Obtenir l’essai gratuit Azure.

  • Un compte de stockage doté d’un espace de noms hiérarchique (HNS) activé. Pour créer un test, suivez ces instructions.

  • Azure CLI version 2.6.0 ou ultérieure.

  • Une des autorisations de sécurité suivantes :

    • Un principal de sécurité Microsoft Entra ID provisionné qui a reçu le rôle Propriétaire de données blob du stockage dans l’étendue du conteneur cible, du compte de stockage, du groupe de ressources parent ou de l’abonnement.

    • Utilisateur propriétaire du conteneur ou du répertoire cible auquel vous envisagez d’appliquer les paramètres ACL. Pour définir des listes de contrôle d’accès de façon récursive, cela inclut tous les éléments enfants du conteneur ou du répertoire cible.

    • Clé du compte de stockage.

Configuration de votre projet

Installez la bibliothèque de client Data Lake pour JavaScript en ouvrant une fenêtre de terminal, puis en entrant la commande suivante.

npm install @azure/storage-file-datalake

Importez le package storage-file-datalake en plaçant cette instruction en haut de votre fichier de code.

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

Se connecter au compte

Pour utiliser les extraits de code de cet article, vous devez créer une instance DataLakeServiceClient qui représente le compte de stockage.

Se connecter avec Microsoft Entra ID

Remarque

Si vous utilisez Microsoft Entra ID pour autoriser l’accès, vérifiez que le votre principal de sécurité a reçu le rôle Propriétaire de données blob du stockage. Pour en savoir plus sur l’application des autorisations de liste de contrôle d’accès et les conséquences de leur modification, consultez Modèle de contrôle d’accès dans Azure Data Lake Storage Gen2.

Vous pouvez utiliser la bibliothèque de client Azure Identity pour JS afin d’authentifier votre application dans Microsoft Entra ID.

Vous devrez d’abord attribuer l’un des rôles Contrôle d’accès en fonction du rôle (Azure RBAC) suivants à votre principal de sécurité :

Role Capacité de paramétrage ACL
Propriétaire des données Blob du stockage Tous les répertoires et fichiers du compte.
Contributeur aux données Blob du stockage Seuls les répertoires et les fichiers appartenant au principal de sécurité.

Ensuite, créez une instance DataLakeServiceClient et transmettez une nouvelle instance de la classe DefaultAzureCredential.

function GetDataLakeServiceClientAD(accountName) {

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

  return dataLakeServiceClient;
}

Pour en savoir plus sur l’utilisation de DefaultAzureCredential pour autoriser l’accès aux données, consultez Vue d’ensemble : authentifier des applications JavaScript sur Azure à l’aide du Kit de développement logiciel (SDK) Azure.

Connexion avec une clé de compte

Vous pouvez autoriser l’accès aux données en utilisant des clés d’accès de votre compte (clé partagée). Cet exemple crée une instance DataLakeServiceClient qui est autorisée avec la clé de compte.


function GetDataLakeServiceClient(accountName, accountKey) {

  const sharedKeyCredential =
     new StorageSharedKeyCredential(accountName, accountKey);

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

  return dataLakeServiceClient;
}

Attention

L’autorisation avec une clé partagée n’est pas recommandée, car elle peut être moins sécurisée. Pour une sécurité optimale, désactivez l’autorisation via une clé partagée pour votre compte de stockage, comme décrit dans Empêcher l’autorisation avec clé partagée pour un compte de stockage Azure.

L’utilisation de clés d’accès et de chaînes de connexion doit être limitée aux applications de preuve de concept initiales ou aux prototypes de développement qui n’accèdent pas aux données de production ou aux données sensibles. Sinon, les classes d’authentification basées sur des jetons disponibles dans le kit de développement logiciel (SDK) Azure doivent toujours être priorisées lors de l’authentification auprès de ressources Azure.

Microsoft recommande aux clients d’utiliser Microsoft Entra ID ou une signature d’accès partagé (SAS) pour autoriser l’accès aux données dans le Stockage Azure. Pour en savoir plus, consultez Autoriser les opérations pour l’accès aux données.

Obtenir et définir la liste de contrôle d’accès d’un répertoire

Cet exemple obtient puis définit l’ACL d’un répertoire nommé my-directory. Cet exemple donne à l’utilisateur propriétaire des autorisations de lecture, d’écriture et d’exécution, donne au groupe propriétaire uniquement des autorisations de lecture et d’exécution et donne à tous les autres l’accès en lecture.

Remarque

Si votre application autorise l’accès en utilisant Microsoft Entra ID, vérifiez que le principal de sécurité utilisé par votre application pour autoriser l’accès a reçu le rôle Propriétaire de données blob du stockage. Pour en savoir plus sur l’application des autorisations ACL et les conséquences de leur modification, consultez Contrôle d’accès dans Azure Data Lake Storage Gen2.

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

Vous pouvez également obtenir et définir la liste de contrôle d’accès du répertoire racine d’un conteneur. Pour obtenir le répertoire racine, transmettez une chaîne vide (/) dans la méthode DataLakeFileSystemClient.getDirectoryClient.

Obtenir et définir la liste de contrôle d’accès d’un fichier

Cet exemple obtient puis définit l’ACL d’un fichier nommé upload-file.txt. Cet exemple donne à l’utilisateur propriétaire des autorisations de lecture, d’écriture et d’exécution, donne au groupe propriétaire uniquement des autorisations de lecture et d’exécution et donne à tous les autres l’accès en lecture.

Remarque

Si votre application autorise l’accès en utilisant Microsoft Entra ID, vérifiez que le principal de sécurité utilisé par votre application pour autoriser l’accès a reçu le rôle Propriétaire de données blob du stockage. Pour en savoir plus sur l’application des autorisations ACL et les conséquences de leur modification, consultez Contrôle d’accès dans Azure Data Lake Storage Gen2.

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

Voir aussi