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
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 .
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.
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
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>
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-AzDataLakeGen2Item
parancsmag 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.
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-xxxxxxxxxxxx
a következőt: .
Az alábbi képen egy fájl ACL-jének beállítása után látható a kimenet.
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-directory
beá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-xxxxxxxxxxxx
a 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.