簡體   English   中英

是否可以為 DataLake Gen2 存儲中的目錄創建 SAS 令牌?

[英]Is it possible to create a SAS token for a directory in DataLake Gen2 storage?

我有一個 Azure Function 從嵌套在ADLS Gen 2 存儲容器中的目錄(命名空間)觸發。

示例: ADLS_AccountName/topLevelContainer/Directory1/Directory2/{name}

不幸的是,Function 需要整個 DataLake 的Connection string作為輸入綁定(作為應用程序設置存儲在local.settings.json中)。

對於 Function 來說,這是太多的權限了。

如何為給定的嵌套命名空間生成 SAS 令牌並將其用作 Function 的應用程序設置?

不幸的是,無法為 ADLS Gen2 存儲帳戶中的特定文件夾創建 SAS 令牌 但是您可以利用Access Control List來授予對特定文件或目錄的權限。

您可以將安全主體與應用程序中的目錄和文件的訪問級別相關聯。 (注意:ACL 僅適用於同一租戶中的安全主體)

如果您僅使用 ACL(無 RBAC)授予權限,則要授予安全主體對文件夾的讀取或寫入權限,您需要授予安全主體對容器以及層次結構中每個文件夾的執行權限指向所需文件夾/文件的文件夾。

這是一個獲取和設置名為my-directory的目錄的 ACL 的示例。 字符串user::rwx,group::rx,other::rw-賦予所屬用戶讀、寫和執行權限,賦予所屬組僅讀和執行權限,並賦予所有其他用戶讀和寫權限。

public async Task ManageDirectoryACLs(DataLakeFileSystemClient fileSystemClient)
{
    DataLakeDirectoryClient directoryClient =
        fileSystemClient.GetDirectoryClient("my-directory");

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

}

更多細節,你可以參考這篇文章

標記為正確的答案不再准確。 Please look at https://docs.microsoft.com/en-us/dotnet/api/azure.storage.sas.datalakesasbuilder?view=azure-dotnet Starting service version 2020-02-10 it is possible to generate SAS token for ADLS Gen2 帳戶中的目錄。

自身份驗證版本2020-02-10起支持目錄范圍的 SAS 令牌,請參閱目錄范圍的共享訪問簽名 (SAS) 普遍可用

Python package azure-storage-file-datalake提供 function generate_directory_sas

對於TypeScript/JavaScript ,請檢查 package @azure/storage-file-datalake及其 function generateDataLakeSASQueryParameters並設置{ isDirectory: true }DataLakeSASSignatureValues

generateDataLakeSASQueryParameters(
  {
    pathName: 'my/folder',
    permissions: DirectorySASPermissions.parse('r'),
    isDirectory: true,
    ...,
    version: '2020-02-10'
  }, ...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM