Azure active directory Get-AzureADServicePrincipal需要哪些权限?

Azure active directory Get-AzureADServicePrincipal需要哪些权限?,azure-active-directory,Azure Active Directory,我正在尝试运行PowerShell脚本,用于从DevOps服务主体分配许可 DevOps服务主体已分配以下权限并获得管理员同意: Application.Read.All approvalsignment.ReadWrite.All 用户阅读 它在获取服务主体的步骤失败,服务主体是要分配的角色的所有者: $sp = Get-AzureADServicePrincipal -filter "displayName eq '$AppName'" 出现以下错误消息: Erro

我正在尝试运行PowerShell脚本,用于从DevOps服务主体分配许可

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

  • Application.Read.All
  • approvalsignment.ReadWrite.All
  • 用户阅读
它在获取服务主体的步骤失败,服务主体是要分配的角色的所有者:

$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 sp管理角色。我只想应用执行作业所需的特定权限。

我注意到您已分配了权限
用户。请阅读
,该权限仅存在于委派权限中。因此,我猜您配置的其他两个权限
Application.Read.All
approvalinsignment.ReadWrite.All
也是委派权限

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

当我通过Fiddler4跟踪这个cmd时,后端请求是
GEThttps://graph.windows.net/exxxxx4e-bd27-40d5-8459-23xxxxa757fb/servicePrincipals?api-版本=1.6&%24filter=displayName%20eq%20%27xxxx%27

graph.windows.net
用于Azure AD graph,而
graph.microsoft.com
用于microsoft graph

因此,它将Azure广告图称为Microsoft Graph。您需要的是Azure AD Graph的应用程序权限

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


谢谢。这让我意识到AzureAD模块根本不适合我们的需要,因为Azure广告图权限太广。如果我们重写脚本来调用MS Graph API,我们可以使用Microsoft Graph权限,而我今天已经证明了这一点。我在理解上的差距是AD图和MS图之间的差异。