I am trying to use the node SDK to list resource groups, I managed to get it to work with Interactive login but not with a service principal.
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()
I get the following result, which looks like an empty list:
{
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)
The service principal was created with Reader permissions.
What am I missing ?