我正在尝试运行PowerShell脚本,以从DevOps服务主体分配appRoles。
DevOps服务主体具有以下权限并已获得管理员同意:
在获取服务主体的步骤失败,该主体是要分配的角色的所有者:
$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担任管理角色。我只想申请完成这项工作所需的特定权限。
答案 0 :(得分:1)
我注意到您分配了一个权限User.Read
,该权限仅存在于“委派”权限中。因此,我猜您配置的其他两个权限Application.Read.All
和AppRoleAssignment.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.All
和Directory.Read.All
可以满足您的需求。如果您不希望服务主体具有写权限,则可以选择Directory.Read.All
。