GetAccessPolicyAsync/SetAccessPolicyAsync 不使用托管身份

GetAccessPolicyAsync/SetAccessPolicyAsync not working with Managed Identity

我正在更新一些遗留代码以使用托管身份而不是访问密钥。
代码:

  1. 创建一个 DataLakeServiceClient
  2. 使用它来获取文件 DataLakeFileSystemClient (var dlfsc = dlsc.GetFileSystemClient(containerName);)
  3. 调用 GetAccessPolicyAsync 和 SetAccessPolicyAsync (var acl = await client.GetAccessPolicyAsync().ConfigureAwait(false);)

当我使用 StorageSharedKeyCredential 构建 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() 方法也被调用,并且在任何一种情况下都可以正常工作。

所以我的问题是,为什么 AccessPolicy 方法在使用 StorageSharedKeyCredential 创建 DataLakeFileSystemClient 时工作正常,但在使用 ManagedIdentityCredential 创建时却不能正常工作?

So my question is, why does the AccessPolicy methods work fine when the DataLakeFileSystemClient has been created using StorageSharedKeyCredential, but not when it is created using ManagedIdentityCredential?

这是因为只有共享访问密钥凭据支持访问策略操作,而不是使用托管身份时使用的 Azure AD 凭据。

从这个link: