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řazenou skupinu 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.
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
Otevřete příkazové okno Windows PowerShellu a přihlaste se k předplatnému Azure pomocí příkazu Connect-AzAccount a postupujte podle pokynů na obrazovce.
Connect-AzAccount
Pokud je vaše identita přidružená k více než jednomu předplatnému a nezobrazí se výzva k výběru předplatného, nastavte aktivní předplatné na předplatné účtu úložiště, se kterým chcete pracovat. 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
Získání seznamů ACL
Získejte seznam ACL adresáře nebo souboru pomocí rutiny Get-AzDataLakeGen2Item .
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 jeho 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. K potvrzení seznamu ACL použijte rutinu Update-AzDataLakeGen2Item .
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 aaaaaaaa-bbbb-cccc-1111-222222222222 -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 aaaaaaaa-bbbb-cccc-1111-222222222222 -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.