1

Azure Data Lake Gen 2 有两个级别的访问控制;基于角色的访问控制 (RBAC) 和访问控制列表 (ACL)。容器级别的 RBAC 功能和 ACL 可以在目录和文件级别功能。目录的子对象要继承父级的ACL,需要指定“默认”权限与父级的访问权限相同。

请参阅:https ://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-access-control#default-permissions-on-new-files-and-directories

我的问题是我看到子目录继承其父 ACL 但子文件没有的行为。

我的步骤是这样的:

  1. 创建一个 AAD 组,例如“消费者”
  2. 在Microsoft Azure Storage Explorer中,新建一个目录(“foo”),右击“foo”,选择“Manage Access”,选择“Add”,将“Consumers”组添加到列表中,勾选[x] Access with [ x] 读取并 [x] 执行。使用 [x] 读取和 [x] 执行检查 [x] 默认值。
  3. 编写一个 Azure 函数,将 blob 从容器复制到具有托管访问权限的容器中的“foo/dataset/2020/05/myblob.csv”之类的内容。
  4. 向下钻取目录;“dataset”目录与“foo”具有相同的 ACL,“2020”和“05”也是如此。但是“myblob.csv”在其 ACL 中根本不包含“Consumers”组。

这是出乎意料的行为还是我在这里遗漏了一些基本的东西?

这似乎是函数或函数中使用的 Azure Data Lake Gen 2 SDK (C#) 的问题。

使用 Azure 存储资源管理器,当我在已添加“消费者”组的目录下手动添加文件时,它会应用预期的 ACL。当我添加一个包含文件的目录时,它也可以工作 - 子目录中的文件和子目录都具有预期的 ACL。

谢谢

[编辑] 这与使用 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。写一个测试...

4

1 回答 1

0

Use Azure Storage Explorer to set the permissions. And use the "propagate access-list" feature to set proper permissions.

于 2021-12-29T07:10:33.553 回答