NodeJS 具有托管标识的Azure默认凭据不工作(节点)

ijxebb2r  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(137)

我尝试将用户分配的托管身份与DefaultAzureCredential一起使用,但得到403权限不匹配错误。我按照MS文档中的代码示例操作,但仍然失败。但是,将DefaultAzureCredential替换为显式ManagedIdentityCredential效果很好。
这是我的代码:

const { BlobServiceClient } = require('@azure/storage-blob');
const { DefaultAzureCredential } = require('@azure/identity');
const {url, clientId} = require('./config');

const cred = new DefaultAzureCredential({managedIdentityClientId: clientId});
const containerClient = new BlobServiceClient(url, cred).getContainerClient('container-name');

(async () => {
  const exists = await containerClient.exists();
  console.log({exists});
})();

这看起来应该能用,但没有用,有什么想法吗?
版本:

  • "@ Azure /身份":"^1.1.0",
  • "@azure/存储块":"^12.12.0",
  • 节点v16.18.1
8aqjt8rx

8aqjt8rx1#

    • 我在我的环境中尝试,得到以下结果:**
  • 我尝试在我的环境中复制相同的代码,无论容器是否存在,它都成功执行。*
    • 代码:**
const { BlobServiceClient } = require('@azure/storage-blob');
const { DefaultAzureCredential } = require('@azure/identity');

const url="https://venkat123.blob.core.windows.net";
const clientId="<client-id>";
const cred = new DefaultAzureCredential({managedIdentityClientId: clientId});
const Client = new BlobServiceClient(url, cred);
const containerClient=Client.getContainerClient("test");

(async () => {
  const exists = await containerClient.exists();
  console.log({exists});
})();
    • 控制台:**

403,此请求未被授权使用此权限执行此操作。
如果要使用标识访问存储帐户,则需要类似**Storage-blob-contributorstorage-blob-owner**的角色。
转至门户-〉您的存储帐户-〉访问控制(IAM)-〉添加-〉添加角色分配-〉storage-blob-contributor或storage-blob-owner-〉添加您的用户托管身份ID。

此外,我尝试使用用户分配的托管标识与DefaultAzureCredential,它工作得很好。

    • 代码:**
const { BlobServiceClient } = require('@azure/storage-blob');
const { DefaultAzureCredential } = require('@azure/identity');

const url="https://venkat123.blob.core.windows.net";
const cred = new DefaultAzureCredential();
const Client = new BlobServiceClient(url, cred);
const containerClient=Client.getContainerClient("test");

(async () => {
  const exists = await containerClient.exists();
  console.log({exists});
})();
    • 控制台:**

相关问题