Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak pomocí PowerShellu získat, nastavit a aktualizovat seznamy řízení přístupu adresářů a souborů.
Dědičnost ACL je již dostupná pro položky vytvořené v rámci nadřazeného adresáře. 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.0Azure CLI nebo vyšší.Jedno z následujících oprávnění zabezpečení:
Zřízený zabezpečení Microsoft Entra ID entita, která má přiřazenou roli Vlastník dat objektů blob úložiště, platnou pro cílový kontejner, účet úložiště, nadřazenou skupinu prostředků nebo předplatné.
Vlastník cílového kontejneru nebo adresáře, na který plánujete použít nastavení 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.1nainstalovaná 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 -ForceDalší 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-AzAccountPokud 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á ACL kořenového adresáře kontejneru a potom vypíše ACL na konzoli.
$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í 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ítecelý 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ím uživateli, vlastnící skupině a všech ostatních uživatelích najdete v části Uživatelé a identity.
V této části se dozvíte, jak:
- Nastavte ACL
- Rekurzivní nastavení seznamů ACL
Nastavení seznamu ACL
Pomocí rutiny Set-AzDataLakeGen2ItemAclObject vytvořte ACL pro vlastnícího uživatele, vlastnící skupinu nebo jiného 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 ACL konkrétní skupiny nebo uživatele, poskytovatele služby nebo spravované identity, použijte jejich příslušná ID objektů. Chcete-li například nastavit seznam ACL skupiny, použijte group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Chcete-li nastavit 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ímu uživateli oprávnění ke čtení, zápisu a spouštění, vlastnící skupině poskytují oprávnění jen pro čtení a spouštění a všem ostatním neposkytují žádný 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 ACL
Při aktualizaci ACL upravíte ACL místo jejího nahrazení. 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 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 ACL s 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 řízení přístupu (ACL) konkrétní skupiny nebo uživatele, služebního principálu nebo spravované identity, použijte jejich příslušná ID objektů. Chcete-li například nastavit seznam ACL skupiny, použijte group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Chcete-li nastavit 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 .
Odebrat položky ACL
V této části se dozvíte, jak:
- Odstraňte záznam ACL
- Odebrat položky ACL rekurzivně
Odebrat položku 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ě odebrat položky 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 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 s názvem Remove-AzDataLakeGen2AclRecursive.
Zotavení po selháních
Při rekurzivní úpravě seznamů řízení přístupu (ACL) může dojít k běhovým chybám nebo chybám 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 poté přesměruje 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 proběhl bez přerušení kvůli chybám oprávnění, můžete to specifikovat.
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 poskytuje pokyny pro osvědčené postupy nastavení 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 ACL. ACL je možné znovu použít u položek, aniž by to mělo negativní dopad.
Zpracování chyb oprávnění (403)
Pokud při spuštění rekurzivního procesu ACL dojde k výjimce řízení přístupu, může zabezpečení ADsecurity principal nemít dostatečné oprávnění k použití ACL na jednu nebo více podřízených položek v adresářové hierarchii. 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 restartovat rekurzivní proces 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 úložiště objektů blob v rámci cílového účtu úložiště nebo kontejneru.
Výkon
Pokud chcete snížit latenci, doporučujeme spustit rekurzivní proces ACL ve virtuálním počítači Azure, který se nachází ve stejné oblasti jako váš úložný účet.
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.