我正在尝试通过 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: message:"Resource 'b175c95c-e50f-5c46-0b0d-d9f7106d0873' does not exist or one of its queried reference-property objects are not present."
最佳答案
Angular 色分配本身由以下因素构成:
- 安全主体 ID(用户、组、服务主体等,无论您要为其分配 Angular 色)
- Angular 色定义 ID(您分配的 Angular 色的标识符,例如贡献者、所有者或与此相关的自定义 RBAC Angular 色)
- 范围(分配此 Angular 色的范围,例如订阅级别或特定资源组)
这个概念在 Microsoft Docs 上有详细且很好的解释。
当获取像此处所讨论的 Angular 色分配列表时,响应对象包含 principalId
但不包含 principalType
来指示它是用户、组、服务主体还是微星。
因此,查询此主体的一种安全方法是不假设任何特定类型,而只是查找具有该 Id 的对象。
azure-graph
中提供的 getObjectsByObjectIds
方法 ( documentation ) 可以帮助解决这个问题。在幕后使用的 Azure AD Graph API 可能是 getObjectsByObjectIds
作为一个旁 Node ,值得一提的是,这个问题与another SO thread密切相关。 ,因此只需在此处引用它即可为将来阅读本文的任何人提供上下文帮助。
关于javascript - azure-graph Users.get(principalID) 抛出 Request_ResourceNotFound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54091305/