Použití PowerShellu ke správě seznamů ACL v Azure Data Lake Storage Gen2

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 seznamu ACL je již k dispozici pro nové podřízené položky vytvořené v nadřazené adresáři. 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

  1. 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.

  2. 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 Gen2.

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.

  1. 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
    
  2. 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>
    
  3. 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-AzDataLakeGen2Itemzí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.

Get ACL output for directory

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 v Azure Data Lake Storage Gen2.

Nastavení seznamů ACL

Když nastavíte seznam ACL, nahradítecelý 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.

Get ACL output for file

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 v Azure Data Lake Storage Gen2.

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.

Viz také