Get-AzureADServicePrincipal需要哪些权限?

时间:2020-06-23 16:57:33

标签: azure-active-directory

我正在尝试运行PowerShell脚本,以从DevOps服务主体分配appRoles。

DevOps服务主体具有以下权限并已获得管理员同意:

  • Application.Read.All
  • AppRoleAssignment.ReadWrite.All
  • User.Read

在获取服务主体的步骤失败,该主体是要分配的角色的所有者:

$sp = Get-AzureADServicePrincipal -filter "displayName eq '$AppName'"

,并显示错误消息:

Error occurred while executing GetServicePrincipals 
Code: Authorization_RequestDenied
Message: Insufficient privileges to complete the operation.
RequestId: a8fadf67-94d6-40ec-ad88-6562cf9f6d80
DateTimeStamp: Tue, 23 Jun 2020 16:51:36 GMT
HttpStatusCode: Forbidden
HttpStatusDescription: Forbidden
HttpResponseStatus: Completed

我希望Application.Read.All授予此权限,因为我要搜索的资源是应用程序。

运行此脚本行需要什么权限,该文件记录在哪里?我正在应用最低特权原则,并且不想让Devops担任管理角色。我只想申请完成这项工作所需的特定权限。

1 个答案:

答案 0 :(得分:1)

我注意到您分配了一个权限User.Read,该权限仅存在于“委派”权限中。因此,我猜您配置的其他两个权限Application.Read.AllAppRoleAssignment.ReadWrite.All也是委派权限。

但是现在您是从服务主体运行Get-AzureADServicePrincipal的,这意味着它需要应用程序权限(这里没有用户)。

当我通过Fiddler4跟踪此cmd时,后端请求为GET https://graph.windows.net/exxxxx4e-bd27-40d5-8459-23xxxxa757fb/servicePrincipals?api-version=1.6&%24filter=displayName%20eq%20%27xxxx%27

graph.windows.net适用于Azure AD Graph,graph.microsoft.com适用于Microsoft Graph。

因此它正在调用Azure AD Graph而不是Microsoft Graph。您需要的是Azure AD Graph的应用程序权限。

根据我的测试,Application.ReadWrite.AllDirectory.Read.All可以满足您的需求。如果您不希望服务主体具有写权限,则可以选择Directory.Read.All

enter image description here