首页 > 解决方案 > Azure DataLake 存储服务主体的 REST api 无法使用特定于文件夹的访问

问题描述

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

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

并得到错误:

{
    "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"
    }
}

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

标签: azurerestactive-directoryazure-storage

解决方案


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

手术 / ABC/ d/
列表 /abc/d/ --X --X R-X

您已经在容器(即)处授予R-X(实际上--x已经足够)权限/,因此您只需要--Xabc目录和目录R-X处授予d,然后它就可以正常工作。

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

在此处输入图像描述

见参考——ACL权限相关的常见场景,你的情况和上一个一样。

在此处输入图像描述

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

在此处输入图像描述

在此处输入图像描述


推荐阅读