【发布时间】:2023-01-05 19:44:23
【问题描述】:
Web 应用程序使用 AzureAD 作为用户管理。现在需要根据角色对用户进行细分。我发现至少在 Powershell 中,人们已经创建了一些复杂的查询来获取它。但这可以通过 Rest API 实现吗?
预期的结果会是这样的
admin: 5
signer: 20
executive: 1
【问题讨论】:
标签: javascript azure-active-directory
Web 应用程序使用 AzureAD 作为用户管理。现在需要根据角色对用户进行细分。我发现至少在 Powershell 中,人们已经创建了一些复杂的查询来获取它。但这可以通过 Rest API 实现吗?
预期的结果会是这样的
admin: 5
signer: 20
executive: 1
【问题讨论】:
标签: javascript azure-active-directory
现在需要根据角色对用户进行细分。我发现至少在 Powershell 中,人们已经创建了一些复杂的查询来获取它。但这可以通过 Rest API 实现吗?
不幸的是,为了通过 Rest API 获取 Azure 中个人用户的角色分配,需要调用 Rest API多次,
列出角色分配对象类型为用户或服务主体以及分配给它们的角色定义 ID,您可以使用以下 API 调用:
GET https://management.azure.com/subscriptions/<subscriptionID>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01您可以使用下面的 API 调用来获取角色定义列表,根据上述角色定义ID,列出所有角色及角色名称:
GET https://management.azure.com/subscriptions/<subscriptionID>/providers/Microsoft.Authorization/roleDefinitions?api-version=2022-04-01得到用户详情您需要调用以下 MS 图形端点:-
GET https://graph.microsoft.com/v1.0/users/<principalID>如果你想获得角色分配具体的用户,您可以通过在 API 调用中过滤该用户的对象 ID 来获取它,如下所示:-
GET https://management.azure.com/subscriptions/<subscriptionID>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=atScope() and assignedTO('principalID')您不能在任何工具或工具中合并所有这些 API 调用的结果 除非您以编程方式或通过脚本执行此操作。
因此,我使用 PowerShell 脚本来获得所需的输出,如下所示:-
PowerShell 脚本:-
$Roleassignments=(Get-AzADUser).UserPrincipalname | % { Get-AzRoleAssignment -SignInName $_ | Select-Object DisplayName,RoleDefinitionName,Scope} $a=$Roleassignments.RoleDefinitionName | Sort-Object | Get-Unique foreach($role in $a) { Write-host $role ":" $role.count }结果:-
【讨论】: