Azure DataLake 存储服务主体的 REST api 无法使用 folder-specific 访问

REST api for Azure DataLake Storage Service Principal not possible to use folder-specific access

我正在尝试使用应用程序注册(活动 directory/service 主体)授权配置 folder-specific 对 adls (gen2) 存储的访问。当我对整个 storage/container 使用 RBAC 配置时,它运行良好,但是当我配置甚至对根文件夹的访问(读取+执行)时,我仍然遇到 403 错误。 以下是我在配置过程中执行的步骤:

  1. 我创建了应用程序注册,为其创建了一个秘密并添加了一个 API 到 blob 存储和 adls 的权限:
  2. 在我的存储帐户的根目录中,我添加了用于读取和执行访问的 ACL(访问控制列表)。
  3. 使用邮递员,我为我的应用程序获取了 Oauth 令牌,并尝试对容器执行 GET 请求,以使用 azure 文档中的 URL 获取目录中的文件列表(https://docs.microsoft.com/en-us/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"
    }
}

当我设置 RBAC (IAM) 访问整个容器而不是 ACL 时,它会起作用。我还应该在我的配置中添加什么以使用服务主体帐户的 folder-specific 访问权限?

我也可以在我这边重现你的问题,从你的请求url,你想做操作List /abc/d/,所以要解决这个问题,你需要像下面这样授予ACL权限.

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

您已经在容器中授予R-X(实际上--x就足够了)权限(即/),所以您只需要在--X abc 目录和 R-Xd 目录,那么它将正常工作。

要给目录赋予ACL权限,参考下面的截图。

参见参考资料-Common scenarios related to ACL permissions,你的情况与上一个相同。

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