PowerShell gebruiken om ACL's te beheren in Azure Data Lake Storage
In dit artikel leest u hoe u PowerShell gebruikt om de toegangsbeheerlijsten van mappen en bestanden op te halen, in te stellen en bij te werken.
ACL-overname is al beschikbaar voor nieuwe onderliggende items die onder een bovenliggende map zijn gemaakt. U kunt echter ook ACL's recursief toevoegen, bijwerken en verwijderen op de bestaande onderliggende items van een bovenliggende map zonder dat u deze wijzigingen afzonderlijk hoeft aan te brengen voor elk onderliggend item.
Vereisten
Een Azure-abonnement. Zie Gratis proefversie van Azure downloaden voor meer informatie.
Een opslagaccount waarvoor hiërarchische naamruimte (HNS) is ingeschakeld. Volg deze instructies om er een te maken.
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.
De PowerShell-module installeren
Controleer of de versie van PowerShell die is geïnstalleerd, is
5.1
of hoger met behulp van de volgende opdracht.echo $PSVersionTable.PSVersion.ToString()
Zie Bestaande Windows PowerShell upgraden om uw versie van PowerShell bij te werken
Installeer de Az.Storage-module .
Install-Module Az.Storage -Repository PSGallery -Force
Verbinding maken met het account
Kies hoe u wilt dat uw opdrachten autorisatie voor het opslagaccount verkrijgen.
Optie 1: Autorisatie verkrijgen met behulp van 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.
Met deze methode zorgt het systeem ervoor dat uw gebruikersaccount beschikt over de juiste Azure RBAC-toewijzingen (op rollen gebaseerd toegangsbeheer) en ACL-machtigingen.
Open een Windows PowerShell-opdrachtvenster en meld u aan bij uw Azure-abonnement met de
Connect-AzAccount
opdracht en volg de aanwijzingen op het scherm.Connect-AzAccount
Als uw identiteit is gekoppeld aan meer dan één abonnement, stelt u uw actieve abonnement in op het abonnement van het opslagaccount waarin u mappen wilt maken en beheren. Vervang in dit voorbeeld de waarde van de
<subscription-id>
tijdelijke aanduiding door de id van uw abonnement.Select-AzSubscription -SubscriptionId <subscription-id>
Haal de context van het opslagaccount op.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
Optie 2: autorisatie verkrijgen met behulp van de sleutel van het opslagaccount
Met deze methode controleert het systeem geen Azure RBAC- of ACL-machtigingen. Haal de context van het opslagaccount op met behulp van een accountsleutel.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -StorageAccountKey '<storage-account-key>'
ACL's ophalen
Haal de ACL van een map of bestand op met behulp van de Get-AzDataLakeGen2Item
cmdlet.
In dit voorbeeld wordt de ACL van de hoofdmap van een container opgehaald en wordt de ACL vervolgens naar de console afgedrukt.
$filesystemName = "my-file-system"
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL
In dit voorbeeld wordt de ACL van een map opgehaald en wordt de ACL vervolgens naar de console afgedrukt.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL
In dit voorbeeld wordt de ACL van een bestand opgehaald en wordt de ACL vervolgens naar de console afgedrukt.
$filePath = "my-directory/upload.txt"
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL
In de volgende afbeelding ziet u de uitvoer nadat u de ACL van een map hebt opgehaald.
In dit voorbeeld heeft de gebruiker die eigenaar is, lees-, schrijf- en uitvoermachtigingen. De groep die eigenaar is, heeft alleen lees- en uitvoermachtigingen. Zie Toegangsbeheer in Azure Data Lake Storage voor meer informatie over toegangsbeheerlijsten.
ACL's instellen
Wanneer u een ACL instelt, vervangt u de volledige ACL, inclusief alle vermeldingen. Als u het machtigingsniveau van een beveiligingsprincipaal wilt wijzigen of een nieuwe beveiligingsprincipaal wilt toevoegen aan de ACL zonder dat dit van invloed is op andere bestaande vermeldingen, moet u in plaats daarvan de ACL bijwerken . Als u een ACL wilt bijwerken in plaats van deze te vervangen, raadpleegt u de sectie ACL's bijwerken van dit artikel.
Als u ervoor kiest om de ACL in te stellen , moet u een vermelding toevoegen voor de gebruiker die eigenaar is, een vermelding voor de groep die eigenaar is en een vermelding voor alle andere gebruikers. Zie Gebruikers en identiteiten voor meer informatie over de gebruiker die eigenaar is, de groep die eigenaar is en alle andere gebruikers.
In deze sectie ziet u hoe u het volgende kunt doen:
- Een ACL instellen
- ACL's recursief instellen
Een ACL instellen
Gebruik de Set-AzDataLakeGen2ItemAclObject
cmdlet om een ACL te maken voor de eigenaar van de gebruiker, de groep die eigenaar is of andere gebruikers. Gebruik vervolgens de Update-AzDataLakeGen2Item
cmdlet om de ACL door te voeren.
In dit voorbeeld wordt de ACL ingesteld in de hoofdmap van een container voor de eigenaar van de gebruiker, de groep die eigenaar is of andere gebruikers, en drukt u de ACL vervolgens af op de 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
In dit voorbeeld wordt de ACL ingesteld op een map voor de eigenaar van de gebruiker, de groep die eigenaar is of andere gebruikers, en drukt de ACL vervolgens af op de 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
Notitie
Als u een standaard-ACL-vermelding wilt instellen, gebruikt u de parameter -DefaultScope wanneer u de opdracht Set-AzDataLakeGen2ItemAclObject uitvoert. Voorbeeld: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope
.
In dit voorbeeld wordt de ACL ingesteld op een bestand voor de eigenaar van de gebruiker, de groep die eigenaar is of andere gebruikers, en drukt de ACL vervolgens af op de 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
Notitie
Gebruik de respectieve object-id's om de ACL van een specifieke groep of gebruiker, service-principal of beheerde identiteit in te stellen. Als u bijvoorbeeld de ACL van een groep wilt instellen, gebruikt u group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
. Als u de ACL van een gebruiker wilt instellen, gebruikt u user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
In de volgende afbeelding ziet u de uitvoer na het instellen van de ACL van een bestand.
In dit voorbeeld heeft de groep die eigenaar is alleen lees- en schrijfmachtigingen. Alle andere gebruikers hebben schrijf- en uitvoermachtigingen. Zie Toegangsbeheer in Azure Data Lake Storage voor meer informatie over toegangsbeheerlijsten.
ACL's recursief instellen
Stel ACL's recursief in met behulp van de cmdlet Set-AzDataLakeGen2AclRecursive .
In dit voorbeeld wordt de ACL van een map met de naam my-parent-directory
ingesteld. Deze vermeldingen geven de gebruiker lees-, schrijf- en uitvoermachtigingen, geeft de groep die eigenaar is alleen lees- en uitvoermachtigingen en geeft alle anderen geen toegang. De laatste ACL-vermelding in dit voorbeeld geeft een specifieke gebruiker met de object-id 'xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxx' lees- en uitvoermachtigingen.
$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
Notitie
Als u een standaard-ACL-vermelding wilt instellen, gebruikt u de parameter -DefaultScope wanneer u de opdracht Set-AzDataLakeGen2ItemAclObject uitvoert. Voorbeeld: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope
.
Zie het artikel Set-AzDataLakeGen2AclRecursive reference voor een voorbeeld waarmee ACL's recursief in batches worden ingesteld door een batchgrootte op te geven.
ACL's bijwerken
Wanneer u een ACL bijwerkt , wijzigt u de ACL in plaats van de ACL te vervangen. U kunt bijvoorbeeld een nieuwe beveiligingsprincipaal toevoegen aan de ACL zonder dat dit van invloed is op andere beveiligingsprinciplen die worden vermeld in de ACL. Als u de ACL wilt vervangen in plaats van deze bij te werken, raadpleegt u de sectie ACL's instellen van dit artikel.
In deze sectie ziet u hoe u het volgende kunt doen:
- Een ACL bijwerken
- ACL's recursief bijwerken
Een ACL bijwerken
Haal eerst de ACL op. Gebruik vervolgens de Set-AzDataLakeGen2ItemAclObject
cmdlet om een ACL-vermelding toe te voegen of bij te werken. Gebruik de Update-AzDataLakeGen2Item
cmdlet om de ACL door te voeren.
In dit voorbeeld wordt de ACL voor een gebruiker gemaakt of bijgewerkt in een map .
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$acl = (Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname).ACL
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID xxxxxxxx-xxxx-xxxxxxxxxxx -Permission r-x -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
Notitie
Als u een standaard-ACL-vermelding wilt bijwerken, gebruikt u de parameter -DefaultScope wanneer u de opdracht Set-AzDataLakeGen2ItemAclObject uitvoert. Voorbeeld: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID xxxxxxxx-xxxx-xxxxxxxxxxx -Permission r-x -DefaultScope
.
ACL's recursief bijwerken
Werk ACL's recursief bij met behulp van de cmdlet Update-AzDataLakeGen2AclRecursive .
In dit voorbeeld wordt een ACL-vermelding bijgewerkt met schrijfmachtigingen.
$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
Notitie
Gebruik de respectieve object-id's om de ACL van een specifieke groep of gebruiker, service-principal of beheerde identiteit in te stellen. Als u bijvoorbeeld de ACL van een groep wilt instellen, gebruikt u group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
. Als u de ACL van een gebruiker wilt instellen, gebruikt u user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
Zie het naslagartikel Update-AzDataLakeGen2AclRecursive voor een voorbeeld waarin ACL's recursief worden bijgewerkt in batches door een batchgrootte op te geven.
ACL-vermeldingen verwijderen
In deze sectie ziet u hoe u het volgende kunt doen:
- Een ACL-vermelding verwijderen
- ACL-vermeldingen recursief verwijderen
Een ACL-vermelding verwijderen
In dit voorbeeld wordt een vermelding verwijderd uit een bestaande ACL.
$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
ACL-vermeldingen recursief verwijderen
U kunt een of meer ACL-vermeldingen recursief verwijderen. Als u een ACL-vermelding wilt verwijderen, maakt u een nieuw ACL-object voor de ACL-vermelding die moet worden verwijderd en gebruikt u dat object in de bewerking ACL verwijderen. Haal de bestaande ACL niet op, geef alleen de ACL-vermeldingen op die moeten worden verwijderd.
Verwijder ACL-vermeldingen met behulp van de cmdlet Remove-AzDataLakeGen2AclRecursive .
In dit voorbeeld wordt een ACL-vermelding verwijderd uit de hoofdmap van de container.
$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
Notitie
Als u een standaard-ACL-vermelding wilt verwijderen, gebruikt u de parameter -DefaultScope wanneer u de opdracht Set-AzDataLakeGen2ItemAclObject uitvoert. Voorbeeld: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---" -DefaultScope
.
Zie het naslagartikel Remove-AzDataLakeGen2AclRecursive voor een voorbeeld dat ACL's recursief verwijdert in batches door een batchgrootte op te geven.
Herstellen na fouten
Er kunnen runtime- of machtigingsfouten optreden bij het recursief wijzigen van ACL's.
Voor runtimefouten start u het proces opnieuw vanaf het begin. Machtigingsfouten kunnen optreden als de beveiligingsprincipaal niet over voldoende machtigingen beschikt om de ACL te wijzigen van een map of bestand dat zich in de maphiërarchie bevindt die wordt gewijzigd. Los het machtigingsprobleem op en kies er vervolgens voor om het proces te hervatten vanaf het punt van de fout met behulp van een vervolgtoken of start het proces opnieuw vanaf het begin. U hoeft het vervolgtoken niet te gebruiken als u liever opnieuw wilt opstarten vanaf het begin. U kunt ACL-vermeldingen opnieuw gebruiken zonder negatieve gevolgen.
In dit voorbeeld worden de resultaten geretourneerd naar de variabele en worden de vermeldingen vervolgens niet in een opgemaakte tabel weergegeven.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$result
$result.FailedEntries | ft
Op basis van de uitvoer van de tabel kunt u eventuele machtigingsfouten oplossen en vervolgens de uitvoering hervatten met behulp van het vervolgtoken.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinuationToken $result.ContinuationToken
$result
Zie het artikel Set-AzDataLakeGen2AclRecursive reference voor een voorbeeld waarmee ACL's recursief in batches worden ingesteld door een batchgrootte op te geven.
Als u wilt dat het proces ononderbroken wordt voltooid door machtigingsfouten, kunt u dat opgeven.
In dit voorbeeld wordt de ContinueOnFailure
parameter gebruikt, zodat de uitvoering wordt voortgezet, zelfs als de bewerking een machtigingsfout tegenkomt.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinueOnFailure
echo "[Result Summary]"
echo "TotalDirectoriesSuccessfulCount: `t$($result.TotalFilesSuccessfulCount)"
echo "TotalFilesSuccessfulCount: `t`t`t$($result.TotalDirectoriesSuccessfulCount)"
echo "TotalFailureCount: `t`t`t`t`t$($result.TotalFailureCount)"
echo "FailedEntries:"$($result.FailedEntries | ft)
Zie het artikel Set-AzDataLakeGen2AclRecursive reference voor een voorbeeld waarmee ACL's recursief in batches worden ingesteld door een batchgrootte op te geven.
Aanbevolen procedures
In deze sectie vindt u enkele aanbevolen richtlijnen voor het recursief instellen van ACL's.
Runtimefouten afhandelen
Een runtimefout kan om verschillende redenen optreden (bijvoorbeeld een storing of een probleem met de clientconnectiviteit). Als er een runtimefout optreedt, start u het recursieve ACL-proces opnieuw. ACL's kunnen opnieuw worden toegepast op items zonder een negatieve impact te veroorzaken.
Machtigingsfouten afhandelen (403)
Als er een uitzondering voor toegangsbeheer optreedt tijdens het uitvoeren van een recursief ACL-proces, beschikt uw AD-beveiligingsprincipaal mogelijk niet over voldoende machtigingen om een ACL toe te passen op een of meer onderliggende items in de adreslijsthiërarchie. Wanneer er een machtigingsfout optreedt, stopt het proces en wordt er een vervolgtoken opgegeven. Los het machtigingsprobleem op en gebruik vervolgens het vervolgtoken om de resterende gegevensset te verwerken. De mappen en bestanden die al zijn verwerkt, hoeven niet opnieuw te worden verwerkt. U kunt er ook voor kiezen om het recursieve ACL-proces opnieuw te starten. ACL's kunnen opnieuw worden toegepast op items zonder een negatieve impact te veroorzaken.
Referentie
U wordt aangeraden een Microsoft Entra-beveiligingsprincipaal in te richten waaraan de rol Eigenaar van opslagblobgegevens is toegewezen in het bereik van het doelopslagaccount of de doelcontainer.
Prestaties
Als u de latentie wilt verminderen, raden we u aan het recursieve ACL-proces uit te voeren op een virtuele Azure-machine (VM) die zich in dezelfde regio bevindt als uw opslagaccount.
ACL-limieten
Het maximum aantal ACL's dat u kunt toepassen op een map of bestand, is 32 toegangs-ACL's en 32 standaard-ACL's. Zie Toegangsbeheer in Azure Data Lake Storage Gen2 voor meer informatie.