【发布时间】:2020-09-22 19:17:01
【问题描述】:
Azure Data Lake Gen 2 具有两个级别的访问控制;基于角色的访问控制 (RBAC) 和访问控制列表 (ACL)。 RBAC 在容器级别起作用,ACL 可以在目录和文件级别起作用。目录的子对象要继承父级的ACL,需要指定“默认”权限与父级的访问权限相同。
我的问题是我看到子 目录 继承其父 ACL 但子 文件 不继承的行为。
我的步骤是这样的:
- 创建一个 AAD 组,例如“消费者”
- 在Microsoft Azure Storage Explorer中,新建一个目录(“foo”),右击“foo”,选择“Manage Access”,选择“Add”,将“Consumers”组添加到列表中,勾选[x]使用 [x] 读取和 [x] 执行访问。使用 [x] 读取和 [x] 执行检查 [x] 默认值。
- 编写一个 Azure 函数,将 blob 从容器复制到具有托管访问权限的容器中的类似“foo/dataset/2020/05/myblob.csv”的内容。
- 向下钻取目录; “dataset”目录与“foo”具有相同的 ACL,“2020”和“05”也是如此。但“myblob.csv”在其 ACL 中根本不包含“Consumers”组。
这是出乎意料的行为还是我在这里遗漏了一些基本的东西?
这似乎是函数或函数中使用的 Azure Data Lake Gen 2 SDK (C#) 的问题。
使用 Azure 存储资源管理器,当我在已添加“消费者”组的目录下手动添加文件时,它会应用预期的 ACL。当我添加一个包含文件的目录时它也可以工作 - 子目录中的文件和子目录都具有预期的 ACL。
谢谢
[edit] 这和用C# SDK写文件时的umask有关吗?我是否需要覆盖默认掩码以允许文件继承其父级的权限? https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-access-control#the-mask
[edit2] 我认为这与使用 DataLakeFileClient.Rename “移动” blob 有关。我怀疑 blob 保留其原始 ACL,而不是从其新父级继承 ACL。编写测试...
【问题讨论】:
-
这个问题解决了吗?
-
@HemantChandurkar,有点。事实证明,在我的第二次编辑中,我的预感是正确的。使用 DataLakeFileClient.Rename 会保留原始 ACL。我在 6 月份创建了一个功能请求:github.com/Azure/azure-sdk-for-net/issues/12512
-
我有类似的问题,还没有找到解决办法。我的问题是我创建的所有文件都继承了默认 ACL,但掩码除外(对于任何文件夹,一切正常)。由于掩码,所有其他服务主体权限都有一条警告,指出“以下访问权限超出了此实体的掩码范围:执行”。我不确定这会产生什么样的影响,但无论我对父文件夹做什么,我都无法改变这种行为。添加的任何文件都会出现所有这些警告。
-
@FabianVal 任何解决方案?我也面临同样的问题
-
@RoshanBirar 你找到解决方案了吗?
标签: azure azure-storage azure-data-lake azure-data-lake-gen2