我正在尝试通过Node.js获取资源组的IAM列表。返回的列表包含用户ID而不是用户名,因此我试图通过用户ID来获取用户名。
const authorizationManagement = require('azure-arm-authorization');
const GraphkManagementClient = require('azure-graph');
const authorizationClient = new authorizationManagement(credentials, subscriptionId);
const graphClient = new GraphkManagementClient(credentials, tenantId);
let iamList = client.roleAssignments.listForResourceGroup(workspaceName);
for (let i in iamList) {
const user = graphClient.users.get(iamList[i].principalId);
iamList[i].principalId = user;
}
return iamList;
但行:
const user = graphClient.users.get(iamList[i].principalId);
抛出:
Request_ResourceNotFound:消息:“资源 'b175c95c-e50f-5c46-0b0d-d9f7106d0873'不存在或其中之一 查询的参考属性对象不存在。”
答案 0 :(得分:2)
角色分配本身由以下组成:
进入此处类似的角色分配列表时,响应对象包含prinicipalId
但不包含principalType
,以指示它是用户,组,服务主体还是MSI。
因此,查询此主体的一种安全方法是不假定任何特定类型,而只是查找具有该ID的对象。
getObjectsByObjectIds
中可用的 azure-graph
方法(documentation)可以帮助您。在后台使用的Azure AD Graph API可能是getObjectsByObjectIds
一个旁节点,值得一提的是,这个问题与another SO thread密切相关,因此在这里引用它可以为将来阅读此书的人提供帮助。