Megosztás a következőn keresztül:


ACL-ek kezelése a PowerShell használatával az Azure Data Lake Storage-ban

Ez a cikk bemutatja, hogyan használhatja a PowerShellt a címtárak és fájlok hozzáférés-vezérlési listájának lekérésére, beállítására és frissítésére.

Az ACL-öröklés már elérhető a szülői könyvtár alatt létrehozott új gyermekelemek számára. A szülőkönyvtár meglévő gyermekelemeit rekurzív módon is hozzáadhatja, frissítheti és eltávolíthatja anélkül, hogy ezeket a módosításokat külön-külön kellene végrehajtania minden gyermekelemhez.

Referencia Visszajelzés | küldése

Előfeltételek

  • Azure-előfizetés. További információ: Ingyenes Azure-próbaidőszak lekérése.

  • Hierarchikus névtérrel (HNS) rendelkező tárfiók. Az alábbi utasításokat követve hozzon létre egyet.

  • Azure CLI-verzió 2.6.0 vagy újabb.

  • Az alábbi biztonsági engedélyek egyike:

    • Kiépített Microsoft Entra ID biztonsági tag, amely a Storage Blob Data Owner szerepkörhöz lett hozzárendelve, hatóköre a céltárolóra, tárfiókra, szülőerőforrás-csoportra vagy előfizetésre terjed ki.

    • Annak a céltárolónak vagy könyvtárnak a tulajdonosa, amelyre ACL-beállításokat kíván alkalmazni. Az ACL-ek rekurzív beállításához ez magában foglalja a céltárolóban vagy könyvtárban lévő összes gyermekelemet.

    • Tárfiókkulcs.

A PowerShell-modul telepítése

  1. Az alábbi paranccsal ellenőrizze, hogy a Telepített 5.1 PowerShell verziója vagy annál magasabb-e.

    echo $PSVersionTable.PSVersion.ToString()
    

    A PowerShell verziójának frissítéséről további információt a meglévő Windows PowerShell frissítése című témakörben talál .

  2. Telepítse az Az.Storage modult.

    Install-Module Az.Storage -Repository PSGallery -Force  
    

    További információ a PowerShell-modulok telepítéséről: Az Azure PowerShell-modul telepítése

Csatlakozás a fiókhoz

Adja meg, hogy a parancsok hogyan kérhessenek engedélyt a tárfiókhoz.

1. lehetőség: Engedélyezés beszerzése a Microsoft Entra-azonosítóval

Feljegyzés

Ha a Hozzáférés engedélyezéséhez Microsoft Entra-azonosítót használ, győződjön meg arról, hogy a biztonsági taghoz hozzárendelték a Storage Blob Data Owner szerepkört. Az ACL-engedélyek alkalmazásával és a módosításuk hatásaival kapcsolatos további információkért tekintse meg az Azure Data Lake Storage hozzáférés-vezérlési modelljét.

Ezzel a módszerrel a rendszer biztosítja, hogy a felhasználói fiók rendelkezik a megfelelő Azure-szerepköralapú hozzáférés-vezérlési (Azure RBAC-) hozzárendelésekkel és ACL-engedélyekkel.

  1. Nyisson meg egy Windows PowerShell-parancsablakot, majd jelentkezzen be az Azure-előfizetésbe a Connect-AzAccount paranccsal, és kövesse a képernyőn megjelenő utasításokat.

    Connect-AzAccount
    
  2. Ha identitása több előfizetéshez van társítva, állítsa be az aktív előfizetést annak a tárfióknak az előfizetésére, amelyben címtárakat szeretne létrehozni és kezelni. Ebben a példában cserélje le a <subscription-id> helyőrző értékét az előfizetés azonosítójára.

    Select-AzSubscription -SubscriptionId <subscription-id>
    
  3. A tárfiók környezetének lekérése.

    $ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
    

2. lehetőség: Engedélyezés beszerzése a tárfiókkulcs használatával

Ezzel a módszerrel a rendszer nem ellenőrzi az Azure RBAC- vagy ACL-engedélyeket. A tárfiók környezetének lekérése egy fiókkulcs használatával.

$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -StorageAccountKey '<storage-account-key>'

ACL-ek lekérése

Kérje le egy könyvtár vagy fájl ACL-jének lekérését a Get-AzDataLakeGen2Itemparancsmag használatával.

Ez a példa lekéri egy tároló gyökérkönyvtárának ACL-ét, majd kinyomtatja az ACL-t a konzolon.

$filesystemName = "my-file-system"
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL

Ez a példa lekéri egy könyvtár ACL-ét, majd kinyomtatja az ACL-t a konzolon.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL

Ez a példa lekéri egy fájl ACL-ét, majd kinyomtatja az ACL-t a konzolon.

$filePath = "my-directory/upload.txt"
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL

Az alábbi képen egy könyvtár ACL-jének lekérése után látható a kimenet.

Címtár ACL-kimenetének lekérése

Ebben a példában a tulajdonos felhasználó olvasási, írási és végrehajtási engedélyekkel rendelkezik. A tulajdonoscsoport csak olvasási és végrehajtási engedélyekkel rendelkezik. További információ a hozzáférés-vezérlési listákról: Hozzáférés-vezérlés az Azure Data Lake Storage-ban.

ACL-ek beállítása

Az ACL beállításakor a teljes ACL-t lecseréli, beleértve az összes bejegyzést is. Ha módosítani szeretné egy biztonsági tag engedélyszintét, vagy új biztonsági tagot szeretne hozzáadni az ACL-hez anélkül, hogy más meglévő bejegyzéseket érinteni kellene, akkor ehelyett frissítenie kell az ACL-t. Az ACL lecserélése helyett az ACL frissítéséről a cikk ACL-ek frissítése című szakaszában olvashat.

Ha úgy dönt, hogy beállítja az ACL-t , hozzá kell adnia egy bejegyzést a tulajdonos felhasználóhoz, egy bejegyzést a tulajdonoscsoporthoz és egy bejegyzést az összes többi felhasználóhoz. A tulajdonos felhasználóról, a tulajdonosi csoportról és az összes többi felhasználóról további információt a Felhasználók és identitások című témakörben talál.

Ez a szakasz a következő lépéseket mutatja be:

  • ACL beállítása
  • ACL-ek rekurzív beállítása

ACL beállítása

Set-AzDataLakeGen2ItemAclObject A parancsmaggal létrehozhat egy ACL-t a tulajdonos felhasználó, a tulajdonoscsoport vagy más felhasználók számára. Ezután a Update-AzDataLakeGen2Item parancsmaggal véglegesítse az ACL-t.

Ez a példa beállítja az ACL-t a tulajdonos felhasználó, tulajdonoscsoport vagy más felhasználók tárolójának gyökérkönyvtárában, majd kinyomtatja az ACL-t a konzolon.

$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

Ez a példa beállítja az ACL-t egy címtárban a tulajdonos felhasználó, a tulajdonoscsoport vagy más felhasználók számára, majd kinyomtatja az ACL-t a konzolra.

$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

Feljegyzés

Ha alapértelmezett ACL-bejegyzést szeretne beállítani, használja a -DefaultScope paramétert a Set-AzDataLakeGen2ItemAclObject parancs futtatásakor. Például: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope

Ez a példa beállítja az ACL-t egy fájlon a tulajdonos felhasználó, a tulajdonoscsoport vagy más felhasználók számára, majd kinyomtatja az ACL-t a konzolon.

$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

Feljegyzés

Egy adott csoport, felhasználó, szolgáltatásnév vagy felügyelt identitás ACL-jének beállításához használja a megfelelő objektumazonosítókat. Például egy csoport ACL-jének beállításához használja a következőtgroup:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx: . A felhasználó ACL-jének beállításához használja user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxa következőt: .

Az alábbi képen egy fájl ACL-jének beállítása után látható a kimenet.

ACL-kimenet lekérése fájlhoz

Ebben a példában a tulajdonos felhasználó és a tulajdonoscsoport csak olvasási és írási engedélyekkel rendelkezik. Minden más felhasználó rendelkezik írási és végrehajtási engedélyekkel. További információ a hozzáférés-vezérlési listákról: Hozzáférés-vezérlés az Azure Data Lake Storage-ban.

ACL-ek rekurzív beállítása

Az ACL-ek rekurzív beállítása a Set-AzDataLakeGen2AclRecursive parancsmaggal.

Ez a példa egy névvel ellátott könyvtár ACL-jének my-parent-directorybeállítását állítja be. Ezek a bejegyzések olvasási, írási és végrehajtási engedélyeket adnak a tulajdonos felhasználónak, a tulajdonoscsoportnak csak olvasási és végrehajtási engedélyeket ad, és nem biztosít hozzáférést másoknak. A példában az utolsó ACL-bejegyzés egy adott felhasználónak ad engedélyt a következő objektumazonosítóval: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" olvasási és végrehajtási engedélyek.

$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

Feljegyzés

Ha alapértelmezett ACL-bejegyzést szeretne beállítani, használja a -DefaultScope paramétert a Set-AzDataLakeGen2ItemAclObject parancs futtatásakor. Például: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope

Ha egy olyan példát szeretne látni, amely a kötegméret megadásával állítja be az ACL-eket rekurzív módon, tekintse meg a Set-AzDataLakeGen2AclRecursive referenciacikket.

ACL-ek frissítése

Az ACL frissítésekor az ACL-t módosítja ahelyett, hogy lecseréli az ACL-t. Hozzáadhat például egy új biztonsági tagot az ACL-hez anélkül, hogy az az ACL-ben felsorolt többi biztonsági tagot érintené. Ha frissíteni szeretné az ACL-t a frissítés helyett, olvassa el a cikk ACL-ek beállítása című szakaszát.

Ez a szakasz a következő lépéseket mutatja be:

  • ACL frissítése
  • ACL-ek rekurzív frissítése

ACL frissítése

Először szerezze be az ACL-t. Ezután a Set-AzDataLakeGen2ItemAclObject parancsmaggal vegyen fel vagy frissítsen egy ACL-bejegyzést. Az ACL véglegesítéséhez használja a Update-AzDataLakeGen2Item parancsmagot.

Ez a példa létrehozza vagy frissíti az ACL-t egy felhasználó címtárában .

$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

Feljegyzés

Ha frissíteni szeretne egy alapértelmezett ACL-bejegyzést, használja a -DefaultScope paramétert a Set-AzDataLakeGen2ItemAclObject parancs futtatásakor. Például: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID xxxxxxxx-xxxx-xxxxxxxxxxx -Permission r-x -DefaultScope

ACL-ek rekurzív frissítése

Az ACL-ek rekurzív frissítése az Update-AzDataLakeGen2AclRecursive parancsmaggal.

Ez a példa egy írási engedéllyel rendelkező ACL-bejegyzést frissít.

$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

Feljegyzés

Egy adott csoport, felhasználó, szolgáltatásnév vagy felügyelt identitás ACL-jének beállításához használja a megfelelő objektumazonosítókat. Például egy csoport ACL-jének beállításához használja a következőtgroup:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx: . A felhasználó ACL-jének beállításához használja user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxa következőt: .

Ha egy kötegméret megadásával rekurzív módon frissíti az ACL-eket, tekintse meg az Update-AzDataLakeGen2AclRecursive referenciacikket.

ACL-bejegyzések eltávolítása

Ez a szakasz a következő lépéseket mutatja be:

  • ACL-bejegyzés eltávolítása
  • ACL-bejegyzések rekurzív eltávolítása

ACL-bejegyzés eltávolítása

Ez a példa eltávolít egy bejegyzést egy meglévő ACL-ből.

$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

ACL-bejegyzések rekurzív eltávolítása

Egy vagy több ACL-bejegyzést rekurzív módon távolíthat el. ACL-bejegyzés eltávolításához hozzon létre egy új ACL-objektumot az ACL-bejegyzés eltávolításához, majd használja ezt az objektumot az ACL-művelet eltávolításához. Ne szerezze be a meglévő ACL-t, csak adja meg az eltávolítandó ACL-bejegyzéseket.

Távolítsa el az ACL-bejegyzéseket a Remove-AzDataLakeGen2AclRecursive parancsmaggal.

Ez a példa eltávolít egy ACL-bejegyzést a tároló gyökérkönyvtárából.

$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

Feljegyzés

Ha el szeretne távolítani egy alapértelmezett ACL-bejegyzést, használja a -DefaultScope paramétert a Set-AzDataLakeGen2ItemAclObject parancs futtatásakor. Például: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---" -DefaultScope

Ha egy kötegméret megadásával rekurzív módon távolítja el az ACL-eket, tekintse meg a Remove-AzDataLakeGen2AclRecursive referenciacikket.

Helyreállítás hibákból

Futtatókörnyezeti vagy engedélyhibák fordulhatnak elő az ACL-ek rekurzív módosításakor.

Futásidejű hibák esetén indítsa újra a folyamatot az elejétől kezdve. Engedélyhibák akkor fordulhatnak elő, ha a rendszerbiztonsági tag nem rendelkezik elegendő engedéllyel a módosított címtár vagy fájl ACL-jének módosításához. Oldja meg az engedélyproblémát, majd válassza a folyamat folytatását a meghibásodási pontról egy folytatási jogkivonat használatával, vagy indítsa újra a folyamatot az elejétől. Nem kell a folytatási jogkivonatot használnia, ha az elejétől kezdve szeretne újraindulni. Az ACL-bejegyzéseket negatív hatás nélkül újra alkalmazhatja.

Ez a példa eredményeket ad vissza a változónak, majd a csövek nem sikerült bejegyzéseket a formázott táblába.

$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$result
$result.FailedEntries | ft

A tábla kimenete alapján kijavíthatja az engedélyhibákat, majd folytathatja a végrehajtást a folytatási jogkivonat használatával.

$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinuationToken $result.ContinuationToken
$result

Ha egy olyan példát szeretne látni, amely a kötegméret megadásával állítja be az ACL-eket rekurzív módon, tekintse meg a Set-AzDataLakeGen2AclRecursive referenciacikket.

Ha azt szeretné, hogy a folyamat megszakítás nélkül befejeződjön engedélyhibákkal, ezt megadhatja.

Ez a példa a paramétert ContinueOnFailure használja, így a végrehajtás akkor is folytatódik, ha a művelet engedélyezési hibát tapasztal.

$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)

Ha egy olyan példát szeretne látni, amely a kötegméret megadásával állítja be az ACL-eket rekurzív módon, tekintse meg a Set-AzDataLakeGen2AclRecursive referenciacikket.

Ajánlott eljárások

Ez a szakasz az ACL-ek rekurzív beállítására vonatkozó ajánlott eljárásokat ismerteti.

Futtatókörnyezeti hibák kezelése

Futásidejű hiba több okból is előfordulhat (például kimaradás vagy ügyfélkapcsolati probléma). Ha futásidejű hibát tapasztal, indítsa újra a rekurzív ACL-folyamatot. Az ACL-ek újra alkalmazhatók az elemekre anélkül, hogy negatív hatással lenne.

Engedélyhibák kezelése (403)

Ha rekurzív ACL-folyamat futtatása közben hozzáférés-vezérlési kivételt tapasztal, előfordulhat, hogy az AD biztonsági tag nem rendelkezik elegendő engedéllyel ahhoz, hogy ACL-t alkalmazzon a címtárhierarchiában lévő gyermekelemek egy vagy több elemére. Engedélyhiba esetén a folyamat leáll, és egy folytatási jogkivonatot ad meg. Javítsa ki az engedélyproblémát, majd használja a folytatási jogkivonatot a fennmaradó adathalmaz feldolgozásához. A már sikeresen feldolgozott könyvtárakat és fájlokat nem kell újra feldolgozni. Dönthet úgy is, hogy újraindítja a rekurzív ACL-folyamatot. Az ACL-ek újra alkalmazhatók az elemekre anélkül, hogy negatív hatással lenne.

Igazolás

Javasoljuk, hogy kiépítsen egy Microsoft Entra biztonsági tagot, amely a Tárolóblob-adattulajdonos szerepkörhöz lett hozzárendelve a céltárfiók vagy tároló hatókörében.

Teljesítmény

A késés csökkentése érdekében javasoljuk, hogy futtassa a rekurzív ACL-folyamatot egy Olyan Azure-beli virtuális gépen (VM), amely a tárfiókja régiójában található.

ACL-korlátok

A címtárakra vagy fájlokra alkalmazható ACL-ek maximális száma 32 hozzáférési ACL és 32 alapértelmezett ACL. További információért lásd: Hozzáférés-vezérlés az Azure Data Lake Storage Gen2-ben.

Lásd még