azure - Azure DataLake 存储服务主体的 REST api 无法使用特定于文件夹的访问
问题描述
我正在尝试使用应用程序注册(活动目录/服务主体)身份验证配置对 adls(gen2)存储的特定于文件夹的访问。当我对整个存储/容器使用 RBAC 配置时,它运行良好,但是当我配置对根文件夹的访问(读取+执行)时仍然出现 403 错误。以下是我在配置过程中执行的步骤:
- 我创建了应用注册,为它创建了一个秘密,并为 blob 存储和 adls 添加了一个 API 权限:
- 在我的存储帐户的根目录中,我添加了 ACL(访问控制列表)以进行读取和执行访问。
- 使用邮递员,我为我的应用程序获取了 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) 访问时,它就可以工作。我还应该在我的配置中添加什么以对服务主体帐户使用特定于文件夹的访问权限?
解决方案
我也可以在我这边重现你的问题,从你的请求 url,你想做操作List /abc/d/
,所以要解决这个问题,你需要给 ACL 权限,如下所示。
手术 | / | ABC/ | d/ |
---|---|---|---|
列表 /abc/d/ | --X |
--X |
R-X |
您已经在容器(即)处授予R-X
(实际上--x
已经足够)权限/
,因此您只需要--X
在abc
目录和目录R-X
处授予d
,然后它就可以正常工作。
要授予目录的 ACL 权限,请参阅下面的屏幕截图。
见参考——ACL权限相关的常见场景,你的情况和上一个一样。
测试(该命令实质上调用了您使用的 REST API):
推荐阅读
- c# - C# 互操作 Outlook 联系人未遍历所有项目
- c# - 运行所选代码生成器时出错:没有为类型定义无参数构造函数
- python - Rust Pyo3 绑定:如何在通用 rust 类型上重用 python 方法
- algorithm - python中的数据结构和算法
- c# - 从列表中删除项目
存在于 CheckedListBox 项的子字符串中 - content-management-system - 我们如何为多页网站的 drupal-8 结构创建可跨页面使用的通用组件?
- dialogflow-es - 如何在 Dialogflow 中为 Facebook Messenger 创建动态轮播?
- html - 主页链接指向与使用相同 ID 的导航栏链接略有不同的视图
- css - 反应悬停样式
- unity3d - 两个几乎相同的批处理脚本之一中的语法错误:“)”无法在此处进行语法处理