Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure functions 是否可以为DataLake Gen2存储中的目录创建SAS令牌?_Azure Functions_Azure Data Lake - Fatal编程技术网

Azure functions 是否可以为DataLake Gen2存储中的目录创建SAS令牌?

Azure functions 是否可以为DataLake Gen2存储中的目录创建SAS令牌?,azure-functions,azure-data-lake,Azure Functions,Azure Data Lake,我有一个Azure函数,它从嵌套在 示例: ADLS\u AccountName/topLevelContainer/Directory1/Directory2/{name} 不幸的是,该函数需要整个DataLake的连接字符串作为输入绑定(作为应用程序设置存储在local.settings.json中) 这对于一个函数来说权限太大了 如何为给定的嵌套命名空间生成SAS令牌,并将其用作函数的应用程序设置?不幸的是无法为ADLS Gen2存储帐户中的特定文件夹创建SAS令牌。但您可以利用它来授予特

我有一个Azure函数,它从嵌套在

示例:
ADLS\u AccountName/topLevelContainer/Directory1/Directory2/{name}

不幸的是,该函数需要整个DataLake的
连接字符串
作为输入绑定(作为应用程序设置存储在
local.settings.json
中)

这对于一个函数来说权限太大了


如何为给定的嵌套命名空间生成SAS令牌,并将其用作函数的应用程序设置?不幸的是无法为ADLS Gen2存储帐户中的特定文件夹创建SAS令牌。但您可以利用它来授予特定文件或目录的权限

您可以将安全主体与应用程序中目录和文件的访问级别相关联。(注意:ACL仅适用于同一租户中的安全主体)

如果仅使用ACL(无RBAC)授予权限,则要授予安全主体对文件夹的读或写访问权限,需要授予安全主体对容器以及指向所需文件夹/文件的文件夹层次结构中的每个文件夹的执行权限

下面是一个获取和设置名为
my directory
的目录的ACL的示例。字符串
user::rwx,group::r-x,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);

}
公共异步任务管理器目录ACL(DataLakeFileSystemClient文件系统客户端)
{
DataLakeDirectoryClient directoryClient=
GetDirectoryClient(“我的目录”);
路径访问控制目录访问控制=
等待directoryClient.GetAccessControlAsync();
foreach(directoryAccessControl.AccessControlList中的变量项)
{
Console.WriteLine(item.ToString());
}
IList访问控制器
=PathAccessControlExtensions.ParseAccessControlList
(“用户::rwx,组::r-x,其他::rw-”;
directoryClient.SetAccessControlList(accessControlList);
}

有关更多详细信息,请参阅。

标记为正确的答案不再准确。请看
从服务版本2020-02-10开始,可以为ADLS Gen2帐户中的目录生成SAS令牌。

有许多活动部件!DataLake上的RBAC、DataLake的ConnectionString/AccountKey、目录的ACL、DataLake顶级目录(“容器”)的SAS令牌和单个Blob。不幸的是,我找不到方法拨入这些文件,因此1.)该函数只监视DataLake中的一个目录(“触发器绑定”),2.)只能访问这个目录。您提到的ACL几乎解决了#2问题,但由于父目录上的RWX允许访问所有子目录,因此在我的用例中这不起作用。需要一个目录作用域。最终使用了一个单独的专用ADLS Gen2存储帐户,并将SAS令牌的作用域保持在容器级别。请参阅我在建议答案下面的评论。不幸的是,ACL设置无法用作Azure函数输入绑定。此外,在嵌套目录上授予ACL PERM将授予对嵌套的所有父目录的权限。这不适用于我的用例。我想有很多人需要这个功能(他们只是还不知道)。如果实现的话,它可能会非常强大。您是否有与Python SDK等效的参考资料?