Použití PowerShellu ke správě seznamů ACL ve službě Azure Data Lake Storage
V tomto článku se dozvíte, jak pomocí PowerShellu získat, nastavit a aktualizovat seznamy řízení přístupu adresářů a souborů.
Pro nové podřízené položky vytvořené v rámci nadřazeného adresáře už je k dispozici dědičnost seznamů ACL. Seznamy ACL ale můžete přidávat, aktualizovat a odebírat rekurzivně u existujících podřízených položek nadřazeného adresáře, aniž byste museli provádět tyto změny jednotlivě pro každou podřízenou položku.
Referenční informace | – Váš názor
Požadavky
Předplatné Azure. Další informace najdete v tématu Získání bezplatné zkušební verze Azure.
Účet úložiště s povoleným hierarchickým oborem názvů (HNS). Postupujte podle těchto pokynů a vytvořte ho.
Verze
2.6.0
Azure CLI nebo vyšší.Jedno z následujících oprávnění zabezpečení:
Zřízený objekt zabezpečení Microsoft Entra ID, který má přiřazenou roli Vlastník dat objektu blob služby Storage, vymezený cílový kontejner, účet úložiště, nadřazená skupina prostředků nebo předplatné.
Vlastníkem cílového kontejneru nebo adresáře, u kterého plánujete použít nastavení seznamu ACL. Pokud chcete seznamy ACL nastavit rekurzivně, zahrnuje to všechny podřízené položky v cílovém kontejneru nebo adresáři.
Klíč účtu úložiště.
Instalace modulu PowerShellu
Pomocí následujícího příkazu ověřte, jestli je
5.1
nainstalovaná verze PowerShellu nebo vyšší.echo $PSVersionTable.PSVersion.ToString()
Pokud chcete upgradovat verzi PowerShellu, přečtěte si téma Upgrade existujícího prostředí Windows PowerShell.
Nainstalujte modul Az.Storage .
Install-Module Az.Storage -Repository PSGallery -Force
Další informace o instalaci modulů PowerShellu najdete v tématu Instalace modulu Azure PowerShellu.
Připojení k účtu
Zvolte, jak mají příkazy získat autorizaci k účtu úložiště.
Možnost 1: Získání autorizace pomocí ID Microsoft Entra
Poznámka:
Pokud k autorizaci přístupu používáte MICROSOFT Entra ID, ujistěte se, že je vašemu objektu zabezpečení přiřazena role Vlastník dat objektu blob služby Storage. Další informace o tom, jak se použijí oprávnění seznamu ACL a vliv jejich změny, najdete v tématu Model řízení přístupu ve službě Azure Data Lake Storage.
Díky tomuto přístupu systém zajistí, že váš uživatelský účet bude mít příslušná přiřazení řízení přístupu na základě role v Azure (Azure RBAC) a oprávnění ACL.
Otevřete příkazové okno Windows PowerShellu a přihlaste se k předplatnému Azure pomocí
Connect-AzAccount
příkazu a postupujte podle pokynů na obrazovce.Connect-AzAccount
Pokud je vaše identita přidružená k více než jednomu předplatnému, nastavte aktivní předplatné na předplatné účtu úložiště, ve které chcete vytvořit a spravovat adresáře. V tomto příkladu
<subscription-id>
nahraďte zástupnou hodnotu ID vašeho předplatného.Select-AzSubscription -SubscriptionId <subscription-id>
Získejte kontext účtu úložiště.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
Možnost 2: Získání autorizace pomocí klíče účtu úložiště
Díky tomuto přístupu systém nekontroluje oprávnění Azure RBAC ani ACL. Získejte kontext účtu úložiště pomocí klíče účtu.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -StorageAccountKey '<storage-account-key>'
Získání seznamů ACL
Pomocí rutiny Get-AzDataLakeGen2Item
získejte seznam ACL adresáře nebo souboru.
Tento příklad získá seznam ACL kořenového adresáře kontejneru a potom vytiskne seznam ACL do konzoly.
$filesystemName = "my-file-system"
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL
Tento příklad získá seznam ACL adresáře a potom vypíše seznam ACL do konzoly.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL
Tento příklad získá seznam ACL souboru a potom vytiskne seznam ACL do konzoly.
$filePath = "my-directory/upload.txt"
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL
Následující obrázek ukazuje výstup po získání seznamu ACL adresáře.
V tomto příkladu má vlastnící uživatel oprávnění ke čtení, zápisu a provádění. Vlastnící skupina má oprávnění jen ke čtení a spouštění. Další informace o seznamech řízení přístupu najdete v tématu Řízení přístupu ve službě Azure Data Lake Storage.
Nastavení seznamů ACL
Když nastavíte seznam ACL, nahradíte celý seznam ACL včetně všech položek. Pokud chcete změnit úroveň oprávnění objektu zabezpečení nebo přidat nový objekt zabezpečení do seznamu ACL, aniž by to ovlivnilo jiné existující položky, měli byste místo toho aktualizovat seznam ACL. Pokud chcete místo nahrazení aktualizovat seznam ACL, přečtěte si část Aktualizace seznamů ACL tohoto článku.
Pokud se rozhodnete nastavit seznam ACL, musíte přidat položku pro vlastnícího uživatele, položku pro vlastnící skupinu a položku pro všechny ostatní uživatele. Další informace o vlastnícího uživatele, vlastnící skupině a všech ostatních uživatelích najdete v tématu Uživatelé a identity.
V této části se dozvíte, jak:
- Nastavení seznamu ACL
- Rekurzivní nastavení seznamů ACL
Nastavení seznamu ACL
Pomocí rutiny Set-AzDataLakeGen2ItemAclObject
vytvořte seznam ACL pro vlastnícího uživatele, vlastnící skupinu nebo jiné uživatele. Potom pomocí rutiny Update-AzDataLakeGen2Item
potvrďte seznam ACL.
Tento příklad nastaví seznam ACL v kořenovém adresáři kontejneru pro vlastnícího uživatele, vlastnící skupinu nebo jiné uživatele a potom vytiskne seznam ACL do konzoly.
$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
Tento příklad nastaví seznam ACL v adresáři pro vlastnícího uživatele, vlastnící skupinu nebo jiné uživatele a potom vytiskne seznam ACL do konzoly.
$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
Poznámka:
Pokud chcete nastavit výchozí položku seznamu ACL, při spuštění příkazu Set-AzDataLakeGen2ItemAclObject použijte parametr -DefaultScope. Například: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope
.
Tento příklad nastaví seznam ACL v souboru pro vlastnícího uživatele, vlastnící skupinu nebo jiné uživatele a potom vytiskne seznam ACL do konzoly.
$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
Poznámka:
Chcete-li nastavit seznam ACL konkrétní skupiny nebo uživatele, instančního objektu nebo spravované identity, použijte příslušná ID objektů. Chcete-li například nastavit seznam ACL skupiny, použijte group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
. Chcete-li nastavit seznam ACL uživatele, použijte user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
Následující obrázek znázorňuje výstup po nastavení seznamu ACL souboru.
V tomto příkladu má vlastnící uživatel a vlastnící skupina oprávnění jen pro čtení a zápis. Všichni ostatní uživatelé mají oprávnění k zápisu a spuštění. Další informace o seznamech řízení přístupu najdete v tématu Řízení přístupu ve službě Azure Data Lake Storage.
Rekurzivní nastavení seznamů ACL
Nastavte seznamy ACL rekurzivně pomocí rutiny Set-AzDataLakeGen2AclRecursive .
Tento příklad nastaví seznam ACL adresáře s názvem my-parent-directory
. Tyto položky poskytují vlastnícího uživatele oprávnění ke čtení, zápisu a spouštění, dává vlastnící skupině oprávnění jen pro čtení a spouštění a dává všem ostatním přístup. Poslední položka seznamu ACL v tomto příkladu poskytuje konkrétnímu uživateli s ID objektu xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx oprávnění ke čtení a spuštění.
$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
Poznámka:
Pokud chcete nastavit výchozí položku seznamu ACL, při spuštění příkazu Set-AzDataLakeGen2ItemAclObject použijte parametr -DefaultScope. Například: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope
.
Příklad, který rekurzivně nastavuje seznamy ACL v dávkách zadáním velikosti dávky, najdete v referenčním článku Set-AzDataLakeGen2AclRecursive .
Aktualizace seznamů ACL
Při aktualizaci seznamu ACL upravíte seznam ACL místo nahrazení seznamu ACL. Můžete například přidat nový objekt zabezpečení do seznamu ACL, aniž by to ovlivnilo jiné objekty zabezpečení uvedené v seznamu ACL. Pokud chcete seznam ACL nahradit místo aktualizace, přečtěte si část Nastavení seznamů ACL tohoto článku.
V této části se dozvíte, jak:
- Aktualizace seznamu ACL
- Rekurzivní aktualizace seznamů ACL
Aktualizace seznamu ACL
Nejprve získejte seznam ACL. Potom pomocí rutiny Set-AzDataLakeGen2ItemAclObject
přidejte nebo aktualizujte položku seznamu ACL. Pomocí rutiny Update-AzDataLakeGen2Item
potvrďte seznam ACL.
Tento příklad vytvoří nebo aktualizuje seznam ACL v adresáři uživatele.
$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
Poznámka:
Pokud chcete aktualizovat výchozí položku seznamu ACL, při spuštění příkazu Set-AzDataLakeGen2ItemAclObject použijte parametr -DefaultScope. Například: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID xxxxxxxx-xxxx-xxxxxxxxxxx -Permission r-x -DefaultScope
.
Rekurzivní aktualizace seznamů ACL
Aktualizujte seznamy ACL rekurzivně pomocí rutiny Update-AzDataLakeGen2AclRecursive .
Tento příklad aktualizuje položku seznamu ACL oprávněním k zápisu.
$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
Poznámka:
Chcete-li nastavit seznam ACL konkrétní skupiny nebo uživatele, instančního objektu nebo spravované identity, použijte příslušná ID objektů. Chcete-li například nastavit seznam ACL skupiny, použijte group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
. Chcete-li nastavit seznam ACL uživatele, použijte user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
Příklad, který rekurzivně aktualizuje seznamy ACL v dávkách zadáním velikosti dávky, najdete v referenčním článku Update-AzDataLakeGen2AclRecursive .
Odebrání položek seznamu ACL
V této části se dozvíte, jak:
- Odebrání položky seznamu ACL
- Rekurzivní odebrání položek seznamu ACL
Odebrání položky seznamu ACL
Tento příklad odebere položku z existujícího seznamu 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
Rekurzivní odebrání položek seznamu ACL
Jednu nebo více položek seznamu ACL můžete rekurzivně odebrat. Pokud chcete odebrat položku seznamu ACL, vytvořte nový objekt ACL pro položku seznamu ACL, který se má odebrat, a pak tento objekt použijte v operaci odebrání seznamu ACL. Stávající seznam ACL nezískáte, stačí zadat položky seznamu ACL, které se mají odebrat.
Odeberte položky seznamu ACL pomocí rutiny Remove-AzDataLakeGen2AclRecursive .
Tento příklad odebere položku seznamu ACL z kořenového adresáře kontejneru.
$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
Poznámka:
Pokud chcete odebrat výchozí položku seznamu ACL, při spuštění příkazu Set-AzDataLakeGen2ItemAclObject použijte parametr -DefaultScope. Například: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---" -DefaultScope
.
Příklad, který rekurzivně odebere seznamy ACL v dávkách zadáním velikosti dávky, najdete v referenčním článku Remove-AzDataLakeGen2AclRecursive .
Zotavení po selháních
Při rekurzivní úpravě seznamů ACL může dojít k chybám modulu runtime nebo oprávnění.
V případě chyb za běhu restartujte proces od začátku. K chybám oprávnění může dojít v případě, že objekt zabezpečení nemá dostatečná oprávnění k úpravě seznamu ACL adresáře nebo souboru, který je v hierarchii adresářů, který se upravuje. Vyřešte problém s oprávněním a pak se rozhodnete proces obnovit z bodu selhání pomocí tokenu pokračování nebo ho restartovat od začátku. Pokud chcete restartovat od začátku, nemusíte token pokračování používat. Položky seznamu ACL můžete znovu použít bez negativního dopadu.
Tento příklad vrátí výsledky do proměnné a potom kanály neúspěšné položky do formátované tabulky.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$result
$result.FailedEntries | ft
Na základě výstupu tabulky můžete opravit jakékoli chyby oprávnění a pak pokračovat v provádění pomocí tokenu pokračování.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinuationToken $result.ContinuationToken
$result
Příklad, který rekurzivně nastavuje seznamy ACL v dávkách zadáním velikosti dávky, najdete v referenčním článku Set-AzDataLakeGen2AclRecursive .
Pokud chcete, aby proces dokončil nepřerušený podle chyb oprávnění, můžete to zadat.
Tento příklad používá ContinueOnFailure
parametr, aby provádění pokračovalo i v případě, že operace narazí na chybu oprávnění.
$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)
Příklad, který rekurzivně nastavuje seznamy ACL v dávkách zadáním velikosti dávky, najdete v referenčním článku Set-AzDataLakeGen2AclRecursive .
Osvědčené postupy
Tato část obsahuje některé pokyny pro osvědčené postupy pro nastavení seznamů ACL rekurzivně.
Zpracování chyb za běhu
K chybě za běhu může dojít z mnoha důvodů (například kvůli výpadku nebo problému s připojením klienta). Pokud dojde k chybě za běhu, restartujte rekurzivní proces seznamu ACL. Seznamy ACL je možné znovu použít u položek, aniž by to způsobilo negativní dopad.
Zpracování chyb oprávnění (403)
Pokud při spuštění rekurzivního procesu seznamu ACL dojde k výjimce řízení přístupu, nemusí mít instanční objekt zabezpečení AD dostatečná oprávnění k použití seznamu ACL pro jednu nebo více podřízených položek v hierarchii adresářů. Pokud dojde k chybě oprávnění, proces se zastaví a poskytne se token pro pokračování. Opravte problém s oprávněním a pak pomocí tokenu pro pokračování zpracujte zbývající datovou sadu. Adresáře a soubory, které už byly úspěšně zpracovány, se nebudou muset znovu zpracovat. Můžete také zvolit restartování rekurzivního procesu seznamu ACL. Seznamy ACL je možné znovu použít u položek, aniž by to způsobilo negativní dopad.
Přihlašovací údaje
Doporučujeme zřídit objekt zabezpečení Microsoft Entra, který má přiřazenou roli Vlastník dat objektů blob služby Storage v oboru cílového účtu úložiště nebo kontejneru.
Výkon
Pokud chcete snížit latenci, doporučujeme spustit rekurzivní proces seznamu ACL ve virtuálním počítači Azure, který se nachází ve stejné oblasti jako váš účet úložiště.
Omezení seznamu ACL
Maximální počet seznamů ACL, které můžete použít pro adresář nebo soubor, je 32 přístupových seznamů ACL a 32 výchozích seznamů ACL. Další informace najdete v tématu Řízení přístupu ve službě Azure Data Lake Storage Gen2.