GetAccessPolicyAsync/SetAccessPolicyAsync 不适用于托管标识
Posted
技术标签:
【中文标题】GetAccessPolicyAsync/SetAccessPolicyAsync 不适用于托管标识【英文标题】:GetAccessPolicyAsync/SetAccessPolicyAsync not working with Managed Identity 【发布时间】:2022-01-05 12:33:27 【问题描述】:我正在更新一些旧代码以使用托管标识而不是访问密钥。 代码:
-
创建 DataLakeServiceClient
使用它来获取文件 DataLakeFileSystemClient (
var dlfsc = dlsc.GetFileSystemClient(containerName);
)
调用 GetAccessPolicyAsync 和 SetAccessPolicyAsync (var acl = await client.GetAccessPolicyAsync().ConfigureAwait(false);
)
当我使用 StorageSharedKeyCredential 构造 DataLakeServiceClient
时,一切正常。
但是,当我使用 DataLakeServiceClient
ManagedIdentityCredential vai(DefaultAzureCredential),抛出如下异常:
The specified resource does not exist.
RequestId:f2543e09-a01e-000d-321b-e47741000000
Time:2021-11-28T05:51:15.6906885Z
Status: 404 (The specified resource does not exist.)
ErrorCode: ResourceNotFound
Content:
<?xml version="1.0" encoding="utf-8"?><Error><Code>ResourceNotFound</Code><Message>The specified resource does not exist.
RequestId:f2543e09-a01e-000d-321b-e57741000000
Time:2021-11-28T05:51:15.6906885Z</Message></Error>
我假设这来自 Azure.Identity 尝试使用 ManagedIdentityCredential 获取令牌时?
需要注意的重要一点是 DataLakeFileSystemClient ExistsAsync()
方法也被调用,在任何一种情况下都可以正常工作。
所以我的问题是,为什么在使用 StorageSharedKeyCredential 创建 DataLakeFileSystemClient 时 AccessPolicy 方法可以正常工作,但在使用 ManagedIdentityCredential 创建时却不行?
【问题讨论】:
【参考方案1】:所以我的问题是,为什么 AccessPolicy 方法在 DataLakeFileSystemClient 已使用 StorageSharedKeyCredential,但不是在使用它创建时 ManagedIdentityCredential?
这是因为访问策略操作仅受共享访问密钥凭据支持,而不是在您使用托管标识时使用的 Azure AD 凭据。
来自link
:
【讨论】:
太好了 - 谢谢!不过,您发布的链接似乎已损坏。 对不起,我的错。编辑了答案并提供了正确的链接:docs.microsoft.com/en-us/rest/api/storageservices/…。以上是关于GetAccessPolicyAsync/SetAccessPolicyAsync 不适用于托管标识的主要内容,如果未能解决你的问题,请参考以下文章