Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous montre comment utiliser PowerShell pour obtenir, définir et mettre à jour les listes de contrôle d’accès (ACL) des répertoires et fichiers.
Les nouveaux éléments enfants que vous créez dans un répertoire parent héritent automatiquement des ACL. Cependant, vous pouvez aussi ajouter, mettre à jour et supprimer des ACL récursivement sur les éléments enfants existants d’un répertoire parent sans effectuer ces modifications individuellement pour chaque élément enfant.
Référence | 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é. Suivez ces instructions pour en créer un.
Une des autorisations de sécurité suivantes :
Un principal de sécurité Microsoft Entra ID provisionné auquel est attribué le rôle Propriétaire des données de stockage Blob, dont l’étendue est limitée au conteneur cible, au compte de stockage, au groupe de ressources parent ou à l’abonnement.
Utilisateur propriétaire du conteneur ou du répertoire cible auquel vous envisagez d’appliquer les paramètres ACL. Pour définir les ACL de manière récursive, cet utilisateur inclut tous les éléments enfants du conteneur ou du répertoire cible.
Installer le module PowerShell
Vérifiez que la version de PowerShell que vous avez installée est la version
5.1ou une version ultérieure à l’aide de la commande suivante.echo $PSVersionTable.PSVersion.ToString()Pour mettre à jour votre version de PowerShell, voir Mise à jour de PowerShell Windows existant.
Installez le module Az.Storage.
Install-Module Az.Storage -Repository PSGallery -ForcePour plus d’informations sur la façon d’installer les modules PowerShell, voir Installer le module Azure PowerShell.
Se connecter au compte
Ouvrez une fenêtre de commande Windows PowerShell, puis connectez-vous à votre abonnement Azure avec la commande Connect-AzAccount et suivez les instructions à l’écran.
Connect-AzAccountSi votre identité est associée à plusieurs abonnements et qu’on ne vous invite pas à sélectionner l’abonnement, configurez votre abonnement actif à celui du compte de stockage que vous souhaitez utiliser. Dans cet exemple, remplacez la valeur d’espace réservé
<subscription-id>par l’ID de votre abonnement.Select-AzSubscription -SubscriptionId <subscription-id>Obtenez le contexte du compte de stockage.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
Obtenir les listes de contrôle d’accès
Obtenez la liste ACL d’un répertoire ou d’un fichier en utilisant la cmdlet Get-AzDataLakeGen2Item.
Dans Azure Data Lake Storage, un conteneur est également appelé système de fichiers. Le -FileSystem paramètre utilisé dans les exemples suivants prend le nom de votre conteneur.
L’exemple suivant obtient l’ACL du répertoire racine d’un conteneur puis imprime l’ACL sur la console.
$filesystemName = "my-file-system"
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL
L’exemple suivant obtient l’ACL d’un répertoire, puis imprime l’ACL sur la console.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL
L’exemple suivant obtient l’ACL d’un fichier puis imprime l’ACL sur la console.
$filePath = "my-directory/upload.txt"
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL
L’image suivante montre le résultat après avoir obtenu l’ACL d’un répertoire.
Dans cet exemple, l’utilisateur propriétaire dispose d’autorisations de lecture, d’écriture et d’exécution. Le groupe propriétaire dispose uniquement d’autorisations de lecture et d’exécution. Pour plus d’informations sur les listes de contrôle d’accès, consultez Contrôle d’accès dans Azure Data Lake Storage.
Définir les ACL
Lorsque vous définissez une ACL, vous remplacez toute la LCA, y compris toutes ses entrées. Si vous souhaitez modifier le niveau d’autorisation d’un principal de sécurité ou ajouter un nouveau principal de sécurité à l’ACL sans affecter d’autres entrées existantes, mettez à jour l’ACL à la place. Pour mettre à jour une liste de contrôle d’accès au lieu de la remplacer, consultez la section Mettre à jour une liste de contrôle d’accès de cet article.
Si vous choisissez de définir la liste de contrôle d’accès, vous devez ajouter une entrée pour l’utilisateur propriétaire, une entrée pour le groupe propriétaire et une entrée pour tous les autres utilisateurs. Pour en savoir plus sur l’utilisateur propriétaire, le groupe propriétaire et tous les autres utilisateurs, consultez Utilisateurs et identités.
Cette section vous montre comment :
- Définir une ACL
- Définir des listes de contrôle d’accès de façon récursive
Définir une ACL
Utilisez la cmdlet Set-AzDataLakeGen2ItemAclObject pour créer une liste ACL pour l’utilisateur propriétaire, le groupe propriétaire ou d’autres utilisateurs. Ensuite, utilisez la cmdlet Update-AzDataLakeGen2Item pour valider la liste de contrôle d’accès.
Cet exemple définit la liste ACL du répertoire racine d’un conteneur pour l’utilisateur propriétaire, le groupe propriétaire ou d’autres utilisateurs, puis affiche cette liste sur la console.
$filesystemName = "my-file-system"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission -wx -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Acl $acl
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL
Cet exemple définit la liste ACL d’un répertoire pour l’utilisateur propriétaire, le groupe propriétaire ou d’autres utilisateurs, puis affiche la liste ACL dans la console.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission -wx -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL
Remarque
Pour définir une entrée ACL par défaut , utilisez le paramètre -DefaultScope lors de l’exécution de la commande Set-AzDataLakeGen2ItemAclObject . Par exemple : $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope.
Cet exemple définit la liste ACL d’un fichier pour l’utilisateur propriétaire, le groupe propriétaire ou d’autres utilisateurs, puis affiche la liste ACL dans la console.
$filesystemName = "my-file-system"
$filePath = "my-directory/upload.txt"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission "-wx" -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath -Acl $acl
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL
Remarque
Pour définir l’ACL d’un groupe ou d’un utilisateur spécifique, d’un principal de service, ou d’une identité managée, utilisez leurs ID d’objet respectifs. Par exemple, pour définir la liste de contrôle d’accès d’un groupe, utilisez group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Pour définir la liste de contrôle d’accès d’un utilisateur, utilisez user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
L’image suivante montre la sortie après la définition de la liste ACL d’un fichier.
Dans cet exemple, l’utilisateur propriétaire et le groupe propriétaire disposent uniquement des autorisations de lecture et d’écriture. Tous les autres utilisateurs disposent des autorisations d’écriture et d’exécution. Pour plus d’informations sur les listes de contrôle d’accès, consultez Contrôle d’accès dans Azure Data Lake Storage.
Définir des listes de contrôle d’accès de façon récursive
Définissez des listes de contrôle d’accès de manière récursive à l’aide de la cmdlet Set-AzDataLakeGen2AclRecursive.
Cet exemple définit la liste ACL d’un répertoire nommé my-parent-directory. Ces entrées donnent à l’utilisateur propriétaire des permissions de lire, écrire et exécuter, accorder au groupe propriétaire uniquement des permissions de lecture et d’exécution, et ne donnent aucun accès à tous les autres. La dernière entrée de la liste de contrôle d’accès dans cet exemple donne à un utilisateur spécifique avec l’ID d’objet « xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx » des autorisations de lecture et d’exécution.
$filesystemName = "my-container"
$dirname = "my-parent-directory/"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission r-x -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission "---" -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission r-x -InputObject $acl
Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
Remarque
Pour définir une entrée ACL par défaut , utilisez le paramètre -DefaultScope lors de l’exécution de la commande Set-AzDataLakeGen2ItemAclObject . Par exemple : $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope.
Pour voir un exemple qui définit des ACL de manière récursive dans des lots en spécifiant une taille de lot, consultez l’article de référence Set-AzDataLakeGen2AclRecursive.
Mettre à jour les ACL
Lorsque vous mettez à jour une liste de contrôle d’accès, vous modifiez l’ACL au lieu de la remplacer. Par exemple, vous pouvez ajouter un nouveau principal de sécurité à la liste de contrôle d’accès sans affecter les autres principaux de sécurité listés dans l’ACL. Pour remplacer la liste de contrôle d’accès au lieu de la mettre à jour, consultez la section Mettre à jour une liste de contrôle d’accès de cet article.
Cette section vous montre comment :
- Mettre à jour une ACL
- Mettre à jour les listes de contrôle d’accès de manière récursive
Mettre à jour une ACL
Tout d’abord, obtenez la liste de contrôle d’accès. Ensuite, utilisez la cmdlet Set-AzDataLakeGen2ItemAclObject pour ajouter ou mettre à jour une entrée de liste de contrôle d’accès. Utilisez la cmdlet Update-AzDataLakeGen2Item pour valider la liste de contrôle d’accès.
Cet exemple crée ou met à jour la liste de contrôle d’accès sur un répertoire pour un utilisateur.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$acl = (Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname).ACL
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID aaaaaaaa-bbbb-cccc-1111-222222222222 -Permission r-x -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
Remarque
Pour mettre à jour une entrée ACL par défaut , utilisez le paramètre -DefaultScope lorsque vous exécutez la commande Set-AzDataLakeGen2ItemAclObject . Par exemple : $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID aaaaaaaa-bbbb-cccc-1111-222222222222 -Permission r-x -DefaultScope.
Mettre à jour les listes de contrôle d’accès de manière récursive
Mettez à jour des listes de contrôle d’accès de manière récursive à l’aide de la cmdlet Update-AzDataLakeGen2AclRecursive.
Cet exemple met à jour une entrée d’ACL avec l’autorisation d’écriture.
$filesystemName = "my-container"
$dirname = "my-parent-directory/"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission rwx
Update-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
Remarque
Pour définir l’ACL d’un groupe ou d’un utilisateur spécifique, d’un principal de service, ou d’une identité managée, utilisez leurs ID d’objet respectifs. Par exemple, pour définir la liste de contrôle d’accès d’un groupe, utilisez group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Pour définir la liste de contrôle d’accès d’un utilisateur, utilisez user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Pour voir un exemple qui met à jour des ACL de manière récursive dans des lots en spécifiant une taille de lot, consultez l’article de référence Update-AzDataLakeGen2AclRecursive.
Supprimer les entrées ACL
Cette section vous montre comment :
- Supprimer une entrée de liste de contrôle d’accès
- Supprimer des entrées de liste de contrôle d’accès (ACL) de manière récursive
Supprimer une entrée de liste de contrôle d’accès
Cet exemple supprime une entrée d’une liste de contrôle d’accès existante. Il réutilise le contexte du compte de stockage $ctx ainsi que les variables $acl, $filesystemName et $dirname définies dans les sections précédentes de cet article.
$id = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# Create the new ACL object.
[Collections.Generic.List[System.Object]]$aclnew =$acl
foreach ($a in $aclnew)
{
if ($a.AccessControlType -eq "User" -and $a.DefaultScope -eq $false -and $a.EntityId -eq $id)
{
$aclnew.Remove($a);
break;
}
}
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $aclnew
Supprimer des entrées de liste de contrôle d’accès (ACL) de manière récursive
Vous pouvez supprimer une ou plusieurs entrées de liste de contrôle d’accès (ACL) de manière récursive. Pour supprimer une entrée ACL, créez un nouvel objet ACL pour l’entrée ACL que vous souhaitez supprimer, puis utilisez cet objet dans l’opération de suppression ACL. Ne récupérez pas la liste de contrôle d’accès existante, il vous suffit de fournir les entrées ACL à supprimer.
Supprimez les entrées de liste de contrôle d’accès à l’aide de la cmdlet Remove-AzDataLakeGen2AclRecursive.
Cet exemple supprime une entrée de liste de contrôle d’accès dans le répertoire racine du conteneur.
$filesystemName = "my-container"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---"
Remove-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Acl $acl
Remarque
Pour supprimer une entrée ACL par défaut , utilisez le paramètre -DefaultScope lorsque vous exécutez la commande Set-AzDataLakeGen2ItemAclObject . Par exemple : $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---" -DefaultScope.
Pour voir un exemple qui supprime des ACL de manière récursive dans des lots en spécifiant une taille de lot, consultez l’article de référence Remove-AzDataLakeGen2AclRecursive.
Récupérer suite à des échecs
Vous pouvez rencontrer des erreurs d’exécution ou d’autorisation lors de la modification récursive des listes de contrôle d’accès. Les exemples de cette section réutilisent le contexte du $ctx compte de stockage ainsi que les $filesystemName, $dirname, et $acl les variables établies dans les sections précédentes de cet article.
Pour les erreurs d’exécution, redémarrez le processus à partir du début. Des erreurs d’autorisation peuvent survenir si le responsable de sécurité n’a pas suffisamment d’autorisations pour modifier l’ACL d’un répertoire ou d’un fichier dans la hiérarchie des répertoires que vous modifiez. Traitez le problème des permissions, puis choisissez soit de reprendre le processus depuis le point de défaillance en utilisant un jeton de continuation, soit de redémarrer le processus depuis le début. Vous n’êtes pas obligé d’utiliser le jeton de continuation si vous préférez redémarrer à partir du début. Vous pouvez réappliquer les entrées de liste de contrôle d’accès sans incidence négative.
Cet exemple renvoie les résultats à la variable, puis envoie les entrées échouées dans une table formatée.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$result
$result.FailedEntries | ft
En fonction de la sortie du tableau, vous pouvez corriger les erreurs d’autorisation, puis reprendre l’exécution à l’aide du jeton de continuation.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinuationToken $result.ContinuationToken
$result
Pour voir un exemple qui définit des ACL de manière récursive dans des lots en spécifiant une taille de lot, consultez l’article de référence Set-AzDataLakeGen2AclRecursive.
Si vous voulez que le processus se termine sans interruption par des erreurs d’autorisation, vous pouvez le configurer pour cela.
Cet exemple utilise le paramètre ContinueOnFailure pour que l’exécution continue même si l’opération rencontre une erreur d’autorisation.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinueOnFailure
echo "[Result Summary]"
echo "TotalDirectoriesSuccessfulCount: `t$($result.TotalDirectoriesSuccessfulCount)"
echo "TotalFilesSuccessfulCount: `t`t`t$($result.TotalFilesSuccessfulCount)"
echo "TotalFailureCount: `t`t`t`t`t$($result.TotalFailureCount)"
echo "FailedEntries:"$($result.FailedEntries | ft)
Pour voir un exemple qui définit des ACL de manière récursive dans des lots en spécifiant une taille de lot, consultez l’article de référence Set-AzDataLakeGen2AclRecursive.
Bonnes pratiques
Cette section décrit certaines des meilleures pratiques pour définir des listes de contrôle d’accès (ACL) de manière récursive.
Traitement des erreurs d’exécution
Une erreur d’exécution peut se produire pour de nombreuses raisons (par exemple, une panne ou un problème de connectivité client). Si vous rencontrez une erreur d’exécution, redémarrez le processus ACL récursif. Les listes de contrôle d’accès peuvent être réappliquées à des éléments sans impact négatif.
Traitement des erreurs d’autorisation (403)
Si vous rencontrez une exception de contrôle d’accès lors de l’exécution d’un processus ACL récursif, votre principal de sécurité AD peut ne pas disposer des autorisations suffisantes pour appliquer une liste de contrôle d’accès à un ou plusieurs des éléments enfants dans la hiérarchie de répertoires. Lorsqu’une erreur d’autorisation se produit, le processus s’arrête et un jeton de continuation est fourni. Corrigez le problème d’autorisation, puis utilisez le jeton de continuation pour traiter le jeu de données restant. Les répertoires et les fichiers qui ont déjà été traités avec succès n’auront pas besoin d’être traités de nouveau. Vous pouvez également choisir de redémarrer le processus ACL récursif. Les listes de contrôle d’accès peuvent être réappliquées à des éléments sans impact négatif.
Titre de compétences
Nous vous recommandons de provisionner un principal de sécurité Microsoft Entra auquel a été attribué le rôle Propriétaire des données Blob de stockage dans l’étendue du compte ou du conteneur de stockage cible.
Performances
Pour réduire la latence, nous vous recommandons d’exécuter le processus ACL récursif dans une machine virtuelle Azure située dans la même région que votre compte de stockage.
Limites des ACL
Le nombre maximal de listes ACL que vous pouvez appliquer à un répertoire ou à un fichier est de 32 ACL d’accès et de 32 ACL par défaut. Pour plus d’informations, consultez Contrôle d’accès dans Azure Data Lake Storage Gen2.