A .NET használata az ACL-ek kezeléséhez az Azure Data Lake Storage Gen2-ben
Ez a cikk bemutatja, hogyan használhatja a .NET-et a könyvtá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őkönyvtárban létrehozott új gyermekelemekhez. 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.
Package (NuGet) | Samples | API reference | Gen1 to Gen2 mapping | Give Feedback
Előfeltételek
Azure-előfizetés. Lásd: Ingyenes Azure-fiók létrehozása.
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:
Egy 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 projekt beállítása
Első lépésként telepítse az Azure.Storage.Files.DataLake NuGet csomagot.
Nyisson meg egy parancsablakot (például: Windows PowerShell).
A projektkönyvtárból telepítse az Azure.Storage.Files.DataLake előzetes verziós csomagot a
dotnet add package
parancs használatával.dotnet add package Azure.Storage.Files.DataLake -v 12.6.0 -s https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-net/nuget/v3/index.json
Ezután adja hozzá ezeket az utasításokat a kódfájl tetejére.
using Azure; using Azure.Core; using Azure.Storage; using Azure.Storage.Files.DataLake; using Azure.Storage.Files.DataLake.Models; using System.Collections.Generic; using System.Threading.Tasks;
Csatlakozás a fiókhoz
A cikkben szereplő kódrészletek használatához létre kell hoznia egy DataLakeServiceClient-példányt , amely a tárfiókot jelöli.
Csatlakozás a Microsoft Entra ID használatával
Megjegyzé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 Gen2 hozzáférés-vezérlési modelljét.
A .NET-hez készült Azure Identity-ügyfélkódtár használatával hitelesítheti az alkalmazást a Microsoft Entra-azonosítóval.
A csomag telepítése után adja hozzá ezt az utasítást a kódfájl tetejére.
using Azure.Identity;
Először az alábbi Azure-szerepköralapú hozzáférés-vezérlési (Azure RBAC) szerepkörök egyikét kell hozzárendelnie a biztonsági taghoz:
Role | ACL-beállítási képesség |
---|---|
Storage-blobadatok tulajdonosa | A fiók összes könyvtára és fájlja. |
Storage blobadat-közreműködő | Csak a biztonsági tag tulajdonában lévő könyvtárak és fájlok. |
Ezután hozzon létre egy DataLakeServiceClient-példányt , és adja át a DefaultAzureCredential osztály új példányát.
public static DataLakeServiceClient GetDataLakeServiceClient(string accountName)
{
string dfsUri = $"https://{accountName}.dfs.core.windows.net";
DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClient(
new Uri(dfsUri),
new DefaultAzureCredential());
return dataLakeServiceClient;
}
A DefaultAzureCredential adatokhoz való hozzáférés engedélyezésével kapcsolatos további információkért tekintse meg a .NET-alkalmazások Azure-szolgáltatásokkal való hitelesítését ismertető témakört.
Csatlakozás fiókkulcs használatával
Az adatokhoz való hozzáférést a fiók hozzáférési kulcsával (megosztott kulcs) engedélyezheti. Ez a példa létrehoz egy DataLakeServiceClient-példányt , amely a fiókkulccsal van engedélyezve.
public static DataLakeServiceClient GetDataLakeServiceClient(string accountName, string accountKey)
{
StorageSharedKeyCredential sharedKeyCredential =
new StorageSharedKeyCredential(accountName, accountKey);
string dfsUri = $"https://{accountName}.dfs.core.windows.net";
DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClient(
new Uri(dfsUri),
sharedKeyCredential);
return dataLakeServiceClient;
}
Figyelmeztetés
A megosztott kulccsal való engedélyezés nem ajánlott, mivel kevésbé biztonságos. Az optimális biztonság érdekében tiltsa le a megosztott kulccsal történő engedélyezést a tárfiókhoz, az Azure Storage-fiók megosztott kulcsának engedélyezésének megakadályozása című cikkben leírtak szerint.
A hozzáférési kulcsok és a kapcsolati sztring használatát a koncepcióalkalmazások vagy a fejlesztési prototípusok kezdeti ellenőrzésére kell korlátozni, amelyek nem férnek hozzá éles vagy bizalmas adatokhoz. Ellenkező esetben az Azure SDK-ban elérhető jogkivonatalapú hitelesítési osztályokat mindig előnyben kell részesíteni az Azure-erőforrásokhoz való hitelesítéskor.
A Microsoft azt javasolja, hogy az ügyfelek a Microsoft Entra-azonosítót vagy a közös hozzáférésű jogosultságkódot (SAS) használják az Azure Storage-adatokhoz való hozzáférés engedélyezéséhez. További információ: Műveletek engedélyezése adathozzáféréshez.
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:
- Címtár ACL-jének beállítása
- Fájl ACL-jének beállítása
- ACL-ek rekurzív beállítása
Címtár ACL-jének beállítása
Kérje le egy könyvtár hozzáférés-vezérlési listáját (ACL) a DataLakeDirectoryClient.GetAccessControlAsync metódus meghívásával, és állítsa be az ACL-t a DataLakeDirectoryClient.SetAccessControlList metódus meghívásával.
Ez a példa lekéri és beállítja egy névvel ellátott könyvtár ACL-ét my-directory
. A sztring user::rwx,group::r-x,other::rw-
olvasási, írási és végrehajtási engedélyeket ad a tulajdonos felhasználónak, a tulajdonoscsoportnak csak olvasási és végrehajtási engedélyeket ad, és minden másnak olvasási és írási engedélyt ad.
public async Task ManageDirectoryACLs(DataLakeFileSystemClient fileSystemClient)
{
DataLakeDirectoryClient directoryClient =
fileSystemClient.GetDirectoryClient("");
PathAccessControl directoryAccessControl =
await directoryClient.GetAccessControlAsync();
foreach (var item in directoryAccessControl.AccessControlList)
{
Console.WriteLine(item.ToString());
}
IList<PathAccessControlItem> accessControlList
= PathAccessControlExtensions.ParseAccessControlList
("user::rwx,group::r-x,other::rw-");
directoryClient.SetAccessControlList(accessControlList);
}
A tároló gyökérkönyvtárának ACL-ét is lekérheti és beállíthatja. A gyökérkönyvtár lekéréséhez adjon át egy üres sztringet (""
) a DataLakeFileSystemClient.GetDirectoryClient metódusnak.
Fájl ACL-jének beállítása
Kérje le egy fájl hozzáférés-vezérlési listáját (ACL) a DataLakeFileClient.GetAccessControlAsync metódus meghívásával, és állítsa be az ACL-t a DataLakeFileClient.SetAccessControlList metódus meghívásával.
Ez a példa lekéri és beállítja egy nevű fájl ACL-ét my-file.txt
. A sztring user::rwx,group::r-x,other::rw-
olvasási, írási és végrehajtási engedélyeket ad a tulajdonos felhasználónak, a tulajdonoscsoportnak csak olvasási és végrehajtási engedélyeket ad, és minden másnak olvasási és írási engedélyt ad.
public async Task ManageFileACLs(DataLakeFileSystemClient fileSystemClient)
{
DataLakeDirectoryClient directoryClient =
fileSystemClient.GetDirectoryClient("my-directory");
DataLakeFileClient fileClient =
directoryClient.GetFileClient("hello.txt");
PathAccessControl FileAccessControl =
await fileClient.GetAccessControlAsync();
foreach (var item in FileAccessControl.AccessControlList)
{
Console.WriteLine(item.ToString());
}
IList<PathAccessControlItem> accessControlList
= PathAccessControlExtensions.ParseAccessControlList
("user::rwx,group::r-x,other::rw-");
fileClient.SetAccessControlList(accessControlList);
}
ACL-ek rekurzív beállítása
Az ACL-ek rekurzív beállítása a DataLakeDirectoryClient.SetAccessControlRecursiveAsync metódus meghívásával. Adja át ezt a metódust a PathAccessControlItem listájának. Minden PathAccessControlItem definiál egy ACL-bejegyzést.
Ha alapértelmezett ACL-bejegyzést szeretne beállítani, akkor a PathAccessControlItem.DefaultScope tulajdonságot igaz értékre állíthatja.
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. Ez a metódus egy logikai paramétert fogad el, isDefaultScope
amely meghatározza, hogy az alapértelmezett ACL-t kell-e beállítani. Ez a paraméter a PathAccessControlItem konstruktorában használatos. Az ACL bejegyzései 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 a többi felhasználónak. A példában szereplő utolsó ACL-bejegyzés olvasási és végrehajtási engedélyekkel rendelkezik egy adott felhasználónak az objektumazonosítóval xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
public async Task SetACLRecursively(DataLakeServiceClient serviceClient, bool isDefaultScope)
{
DataLakeDirectoryClient directoryClient =
serviceClient.GetFileSystemClient("my-container").
GetDirectoryClient("my-parent-directory");
List<PathAccessControlItem> accessControlList =
new List<PathAccessControlItem>()
{
new PathAccessControlItem(AccessControlType.User,
RolePermissions.Read |
RolePermissions.Write |
RolePermissions.Execute, isDefaultScope),
new PathAccessControlItem(AccessControlType.Group,
RolePermissions.Read |
RolePermissions.Execute, isDefaultScope),
new PathAccessControlItem(AccessControlType.Other,
RolePermissions.None, isDefaultScope),
new PathAccessControlItem(AccessControlType.User,
RolePermissions.Read |
RolePermissions.Execute, isDefaultScope,
entityId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
};
await directoryClient.SetAccessControlRecursiveAsync
(accessControlList, null);
}
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 kérje le egy könyvtár ACL-ét a DataLakeDirectoryClient.GetAccessControlAsync metódus meghívásával. Másolja az ACL-bejegyzések listáját egy új PathAccessControl-objektumlistára. Ezután keresse meg a frissíteni kívánt bejegyzést, és cserélje le a listában. Állítsa be az ACL-t a DataLakeDirectoryClient.SetAccessControlList metódus meghívásával.
Ez a példa úgy frissíti a tároló gyökér ACL-ét, hogy lecseréli az ACL-bejegyzést az összes többi felhasználóra.
public async Task UpdateDirectoryACLs(DataLakeFileSystemClient fileSystemClient)
{
DataLakeDirectoryClient directoryClient =
fileSystemClient.GetDirectoryClient("");
PathAccessControl directoryAccessControl =
await directoryClient.GetAccessControlAsync();
List<PathAccessControlItem> accessControlListUpdate
= (List<PathAccessControlItem>)directoryAccessControl.AccessControlList;
int index = -1;
foreach (var item in accessControlListUpdate)
{
if (item.AccessControlType == AccessControlType.Other)
{
index = accessControlListUpdate.IndexOf(item);
break;
}
}
if (index > -1)
{
accessControlListUpdate[index] = new PathAccessControlItem(AccessControlType.Other,
RolePermissions.Read |
RolePermissions.Execute);
directoryClient.SetAccessControlList(accessControlListUpdate);
}
}
ACL-ek rekurzív frissítése
Az ACL rekurzív frissítéséhez hozzon létre egy új ACL-objektumot a frissíteni kívánt ACL-bejegyzéssel, majd használja ezt az objektumot az ACL-művelet frissítéséhez. Ne szerezze be a meglévő ACL-t, csak adja meg a frissíteni kívánt ACL-bejegyzéseket.
Az ACL rekurzív frissítése a DataLakeDirectoryClient.UpdateAccessControlRecursiveAsync metódus meghívásával. Adja át ezt a metódust a PathAccessControlItem listájának. Minden PathAccessControlItem definiál egy ACL-bejegyzést.
Ha egy alapértelmezett ACL-bejegyzést szeretne frissíteni, akkor a PathAccessControlItem.DefaultScope tulajdonságot igaz értékre állíthatja.
Ez a példa egy írási engedéllyel rendelkező ACL-bejegyzést frissít. Ez a metódus elfogad egy logikai paramétert, amely isDefaultScope
megadja, hogy frissíteni kell-e az alapértelmezett ACL-t. Ez a paraméter a PathAccessControlItem konstruktorában használatos.
public async Task UpdateACLsRecursively(DataLakeServiceClient serviceClient, bool isDefaultScope)
{
DataLakeDirectoryClient directoryClient =
serviceClient.GetFileSystemClient("my-container").
GetDirectoryClient("my-parent-directory");
List<PathAccessControlItem> accessControlListUpdate =
new List<PathAccessControlItem>()
{
new PathAccessControlItem(AccessControlType.User,
RolePermissions.Read |
RolePermissions.Write |
RolePermissions.Execute, isDefaultScope,
entityId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
};
await directoryClient.UpdateAccessControlRecursiveAsync
(accessControlListUpdate, null);
}
ACL-bejegyzések eltávolítása
Eltávolíthat egy vagy több ACL-bejegyzést. 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
Először kérje le egy könyvtár ACL-ét a DataLakeDirectoryClient.GetAccessControlAsync metódus meghívásával. Másolja az ACL-bejegyzések listáját egy új PathAccessControl-objektumlistára. Ezután keresse meg az eltávolítani kívánt bejegyzést, és hívja meg a gyűjtemény Eltávolítás metódusát. Állítsa be a frissített ACL-t a DataLakeDirectoryClient.SetAccessControlList metódus meghívásával.
Ez a példa úgy frissíti a tároló gyökér ACL-ét, hogy lecseréli az ACL-bejegyzést az összes többi felhasználóra.
public async Task RemoveDirectoryACLEntry
(DataLakeFileSystemClient fileSystemClient)
{
DataLakeDirectoryClient directoryClient =
fileSystemClient.GetDirectoryClient("");
PathAccessControl directoryAccessControl =
await directoryClient.GetAccessControlAsync();
List<PathAccessControlItem> accessControlListUpdate
= (List<PathAccessControlItem>)directoryAccessControl.AccessControlList;
PathAccessControlItem entryToRemove = null;
foreach (var item in accessControlListUpdate)
{
if (item.EntityId == "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
{
entryToRemove = item;
break;
}
}
if (entryToRemove != null)
{
accessControlListUpdate.Remove(entryToRemove);
directoryClient.SetAccessControlList(accessControlListUpdate);
}
}
ACL-bejegyzések rekurzív eltávolítása
Az ACL-bejegyzések rekurzív 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 DataLakeDirectoryClient.RemoveAccessControlRecursiveAsync metódus meghívásával. Adja át ezt a metódust a PathAccessControlItem listájának. Minden PathAccessControlItem definiál egy ACL-bejegyzést.
Ha el szeretne távolítani egy alapértelmezett ACL-bejegyzést, akkor a PathAccessControlItem.DefaultScope tulajdonságot igaz értékre állíthatja.
Ez a példa eltávolít egy ACL-bejegyzést a névvel ellátott my-parent-directory
könyvtár ACL-éből. Ez a metódus egy logikai paramétert fogad el, isDefaultScope
amely megadja, hogy el kívánja-e távolítani a bejegyzést az alapértelmezett ACL-ből. Ez a paraméter a PathAccessControlItem konstruktorában használatos.
public async Task RemoveACLsRecursively(DataLakeServiceClient serviceClient, bool isDefaultScope)
{
DataLakeDirectoryClient directoryClient =
serviceClient.GetFileSystemClient("my-container").
GetDirectoryClient("my-parent-directory");
List<RemovePathAccessControlItem> accessControlListForRemoval =
new List<RemovePathAccessControlItem>()
{
new RemovePathAccessControlItem(AccessControlType.User, isDefaultScope,
entityId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
};
await directoryClient.RemoveAccessControlRecursiveAsync
(accessControlListForRemoval, null);
}
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 egy folytatási jogkivonatot ad vissza meghibásodás esetén. Az alkalmazás a hiba elhárítása után újra meghívhatja ezt a példametódust, és átadhatja a folytatási jogkivonatot. Ha ez a példametódus első alkalommal van meghívva, az alkalmazás átadhat egy értéket a folytatási jogkivonat paraméterének null
.
public async Task<string> ResumeAsync(DataLakeServiceClient serviceClient,
DataLakeDirectoryClient directoryClient,
List<PathAccessControlItem> accessControlList,
string continuationToken)
{
try
{
var accessControlChangeResult =
await directoryClient.SetAccessControlRecursiveAsync(
accessControlList, continuationToken: continuationToken, null);
if (accessControlChangeResult.Value.Counters.FailedChangesCount > 0)
{
continuationToken =
accessControlChangeResult.Value.ContinuationToken;
}
return continuationToken;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return continuationToken;
}
}
Ha azt szeretné, hogy a folyamat megszakítás nélkül befejeződjön engedélyhibákkal, ezt megadhatja.
Annak érdekében, hogy a folyamat zavartalanul befejeződjön, adjon meg egy AccessControlChangedOptions objektumot, és állítsa az objektum ContinueOnFailure tulajdonságát a következőre true
.
Ez a példa rekurzív módon állítja be az ACL-bejegyzéseket. Ha ez a kód engedélyezési hibát tapasztal, rögzíti a hibát, és folytatja a végrehajtást. Ez a példa a hibák számát nyomtatja ki a konzolon.
public async Task ContinueOnFailureAsync(DataLakeServiceClient serviceClient,
DataLakeDirectoryClient directoryClient,
List<PathAccessControlItem> accessControlList)
{
var accessControlChangeResult =
await directoryClient.SetAccessControlRecursiveAsync(
accessControlList, null, new AccessControlChangeOptions()
{ ContinueOnFailure = true });
var counters = accessControlChangeResult.Value.Counters;
Console.WriteLine("Number of directories changed: " +
counters.ChangedDirectoriesCount.ToString());
Console.WriteLine("Number of files changed: " +
counters.ChangedFilesCount.ToString());
Console.WriteLine("Number of failures: " +
counters.FailedChangesCount.ToString());
}
Best practices
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.
Hitelesítő adatok
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.