Azure DataLake 存储服务主体的 REST api 无法使用特定于文件夹的访问

Posted

技术标签:

【中文标题】Azure DataLake 存储服务主体的 REST api 无法使用特定于文件夹的访问【英文标题】:REST api for Azure DataLake Storage Service Principal not possible to use folder-specific access 【发布时间】:2021-07-11 06:52:02 【问题描述】:

我正在尝试使用应用注册(活动目录/服务主体)身份验证配置对 adls (gen2) 存储的特定文件夹访问。当我对整个存储/容器使用 RBAC 配置时,它运行良好,但是当我配置对根文件夹的访问(读取+执行)时仍然出现 403 错误。 以下是我在配置过程中执行的步骤:

    我创建了应用注册,为它创建了一个秘密,并为 blob 存储和 adls 添加了一个 API 权限: 在我的存储帐户的根目录中,我添加了用于读取和执行访问的 ACL(访问控制列表)。 使用邮递员,我为我的应用程序获取了 Oauth 令牌,并尝试对容器执行 GET 请求,以使用来自 azure docs (https://docs.microsoft.com/en-us/rest/api/storageservices/datalakestoragegen2/path/list) 的 URL 获取目录中的文件列表:

得到了错误:


    "error": 
        "code": "AuthorizationPermissionMismatch",
        "message": "This request is not authorized to perform this operation using this permission.\nRequestId:12401499-f01f-0105-2a98-327246000000\nTime:2021-04-16T08:15:07.8676657Z"
    

当我设置 RBAC (IAM) 访问整个容器而不是 ACL 时,它可以工作。我还应该在我的配置中添加什么来为服务主体帐户使用特定于文件夹的访问权限?

【问题讨论】:

【参考方案1】:

我也可以在我这边重现你的问题,从你的请求url,你想做操作List /abc/d/,所以要解决这个问题,你需要给ACL权限,如下所示。

Operation / abc/ d/
List /abc/d/ --X --X R-X

你已经给了容器R-X(其实--x就够了)权限(即/),所以你只需要给--Xabc目录和R-X@ 987654341@目录,那么它就可以正常工作了。

要授予目录的 ACL 权限,请参阅下面的屏幕截图。

见参考-Common scenarios related to ACL permissions,你的情况和上一个一样。

测试(该命令实质上调用了您使用的 REST API):

【讨论】:

我明白了,它还需要提供对文件夹中每个文件的 RWX 访问权限。虽然不够方便,但它有所帮助。谢谢

以上是关于Azure DataLake 存储服务主体的 REST api 无法使用特定于文件夹的访问的主要内容,如果未能解决你的问题,请参考以下文章

Azure databricks - 无法使用来自 datalake 存储 gen2 服务的 spark 作业读取 .csv 文件

使用服务主体从 DataBricks 连接到 Synapse

如何使用 java azure-storage-file-datalake 复制 Azure 存储文件/目录

如何在 databricks 工作区中使用 python 获取 azure datalake 存储中存在的每个文件的最后修改时间?

从 Azure Databricks 读取 Azure Datalake Gen2 映像

Azure Function Python 写入 Azure DataLake Gen2