Azure Nodejs SDK 列出资源组,结果为空

问题描述 投票:0回答:1

我正在尝试使用节点 SDK 列出资源组,我设法让它与交互式登录一起使用,但不能与服务主体一起使用。

const {
  ClientSecretCredential,
  DefaultAzureCredential,
} = require("@azure/identity");
const ComputeManagementClient = require('azure-arm-compute')
const { ResourceManagementClient } = require("@azure/arm-resources");
var msRestAzure = require('ms-rest-azure');

const tenantId =
  process.env["AZURE_TENANT_ID"] || "XXXXXX";
const clientId =
  process.env["AZURE_CLIENT_ID"] || "XXXXX";
const secret =
  process.env["AZURE_CLIENT_SECRET"] || "XXXXXX";
const sub = 'XXXXXX';

async function listResourceGroups(){
  msRestAzure.loginWithServicePrincipalSecret(clientId, secret, tenantId, async function (err, credentials) { // KO
 //msRestAzure.interactiveLogin(async function (err, credentials) { // OK
    const resourceClient = new ResourceManagementClient(credentials, sub);
    let resourceGroups = await resourceClient.resourceGroups.list();
    console.log(resourceGroups)
    resourceGroups.forEach(element => {console.log(element)})
  })
}
listResourceGroups()

我得到以下结果,它看起来像一个空列表:

{
  next: [Function: next],
  byPage: [Function: byPage],
  [Symbol(Symbol.asyncIterator)]: [Function: [Symbol.asyncIterator]]
}
/temp/azure/resgroups.js:34
    resourceGroups.forEach(element => {console.log(element)})
                   ^

TypeError: resourceGroups.forEach is not a function
    at /temp/azure/resgroups.js:34:20
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

服务主体是使用 Reader 权限创建的。

我错过了什么?

node.js azure azure-active-directory azure-service-principal
1个回答
0
投票

我在订阅下有一个具有 Reader 角色的服务主体,如下所示:

enter image description here

就我而言,我使用了以下修改后的代码并成功获得了包含资源组列表的响应

const { ResourceManagementClient } = require("@azure/arm-resources");
const { ClientSecretCredential } = require("@azure/identity");

const tenantId = "tenantId";
const clientId = "appId";
const clientSecret = "secret";
const subscriptionId = "subId";

async function listResourceGroups() {
    try {
        const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
        const resourceClient = new ResourceManagementClient(credential, subscriptionId);
        const resourceGroups = await resourceClient.resourceGroups.list();
        console.log("List of Resource Groups:");
        for await (const group of resourceGroups) {
            console.log(`- ${group.name}`);
        }
    } catch (error) {
        console.error("Error listing resource groups:", error.message);
    }
}

listResourceGroups();

回复:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.