Sdílet prostřednictvím


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

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.0 Azure 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

  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

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

Získat výstup ACL pro adresář

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.

Získejte výstup ACL pro soubor

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.

Viz také