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 错误。
以下是我在配置过程中执行的步骤:
- 我创建了应用程序注册,为其创建了一个秘密并添加了一个 API 到 blob 存储和 adls 的权限:
- 在我的存储帐户的根目录中,我添加了用于读取和执行访问的 ACL(访问控制列表)。
- 使用邮递员,我为我的应用程序获取了 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-X
在 d
目录,那么它将正常工作。
要给目录赋予ACL权限,参考下面的截图。
参见参考资料-Common scenarios related to ACL permissions,你的情况与上一个相同。
测试(该命令实质上调用了您使用的 REST API):
我正在尝试使用应用程序注册(活动 directory/service 主体)授权配置 folder-specific 对 adls (gen2) 存储的访问。当我对整个 storage/container 使用 RBAC 配置时,它运行良好,但是当我配置甚至对根文件夹的访问(读取+执行)时,我仍然遇到 403 错误。 以下是我在配置过程中执行的步骤:
- 我创建了应用程序注册,为其创建了一个秘密并添加了一个 API 到 blob 存储和 adls 的权限:
- 在我的存储帐户的根目录中,我添加了用于读取和执行访问的 ACL(访问控制列表)。
- 使用邮递员,我为我的应用程序获取了 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-X
在 d
目录,那么它将正常工作。
要给目录赋予ACL权限,参考下面的截图。
参见参考资料-Common scenarios related to ACL permissions,你的情况与上一个相同。
测试(该命令实质上调用了您使用的 REST API):