Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        去年关闭。
                    
                
        

我正在尝试通过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'不存在或其中之一
  查询的参考属性对象不存在。”

最佳答案

角色分配本身由以下各项组成:


安全主体ID(用户,组,服务主体等,无论您将角色分配给什么)
角色定义ID(用于分配角色的标识符,例如该角色的贡献者,所有者或自定义RBAC角色)
范围(分配此角色的范围,例如在订阅级别或特定资源组)


Microsoft Docs上对此概念进行了详细解释,并且很好。

当进入此处类似的角色分配列表时,响应对象包含prinicipalId而不是principalType来指示它是用户,组,服务主体还是MSI。
因此,查询此主体的一种安全方法是不假定任何特定类型,而只是查找具有该ID的对象。

同一包getObjectsByObjectIds中可用的azure-graph方法(documentation)可以帮助您解决此问题。在后台使用的Azure AD Graph API可能是getObjectsByObjectIds

一个侧面节点,值得一提的是,这个问题与another SO thread密切相关,因此在这里引用它可以为将来阅读此书的人提供帮助。

10-08 13:33
查看更多