【问题标题】:Azure Data Lake Gen 2 default access control list not being applied to new filesAzure Data Lake Gen 2 默认访问控制列表未应用于新文件
【发布时间】:2020-09-22 19:17:01
【问题描述】:

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]使用 [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。

谢谢

[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


【解决方案1】:

使用 Azure 存储资源管理器设置权限。并使用“传播访问列表”功能设置适当的权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 2020-11-22
    • 2022-11-10
    • 2020-01-24
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多