在哪里可以查看服务主体具有的 Azure AD 角色列表?

Where to see a list of Azure AD roles that a serivice princple have?

如图,我在“Azure AD”->“企业应用”blade->然后打开我的服务原理详情

我只想知道这个 SP 目前有什么 Azure AD 角色(不是 Azure 角色 RBAC)。

我检查了“角色和管理员”blade,看起来它所做的只是显示一个列表,其中列出了可以分配给此 SP 的角色,而不是已经分配的角色。

对我来说,这个blade是如此误导和无用。 (我还以为这个SP分了这么多角色....)

我什至尝试了“az ad sp show”命令,它也没有显示分配给此 SP 的 Azure AD 角色。

那我在哪里可以看到呢?

Search 栏旁边有一个小下拉按钮,您可以在 Assignable: yesAssignable: no 之间切换。

当您设置为 no 时,您会看到在 AD 级别为您的 sp 分配的角色。 在我们的例子中,“目录读者”等等,它们是 AD 级角色而不是 RBAC 级角色。

这不是在 SP 级别完成的,您需要在分配的范围(管理组、订阅等)中查看角色分配。如果你考虑一下,这是有道理的。如果您只看到角色 Owner,如果您没有看到它分配给的范围,那意义不大。 RG 的所有者与订阅的所有者有很大不同。

您可以下载 CSV 或 JSON 格式的范围内的角色分配。按照以下步骤在范围内下载角色分配。

在 Azure 门户中,单击 所有服务,然后单击 select 要下载角色分配的范围。例如,您可以 select 管理组、订阅、资源组或资源。

  • 单击特定资源。
  • 单击访问控制(IAM)
  • 单击下载角色分配打开“下载角色分配”窗格。

https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-list-portal

我不确定您是否可以从门户中看到这一点,但您可以通过以下内容找到答案。 Get-AzureAdMsRoleAssignment 需要 AzureADPreview 模块

# the Enterprise Application's object ID
$appObjectId = ""

$roles = @()
$rolesAssignedId = (Get-AzureAdMsRoleAssignment -filter "PrincipalId eq '$appObjectId'").RoleDefinitionId
foreach ($roleId in $rolesAssignedId)
{
    $roleName = (Get-AzureADDirectoryRoleTemplate | where {$_.ObjectId -eq $roleId}).DisplayName
    $roles += $roleName
}
$roles