Azure Graph 403 Authorization_RequestDenied使用VSTS的服务主体

时间:2018-04-06 15:01:09

标签: azure azure-devops azure-active-directory azure-ad-graph-api azure-ad-powershell-v2

我有一个VSTS用来运行Azure Powershell脚本的服务主体。我试图打电话的命令是Get-AzureRmRoleAssignment。我收到以下错误消息

  "Exception": {
     "Request": {
       "Method": "POST",
       "RequestUri": "https://graph.windows.net/********/getObjectsByObjectIds?api-version=1.6",
       "Properties": "System.Collections.Generic.Dictionary`2[System.String,System.Object]",
       "Headers": "System.Collections.Generic.Dictionary`2[System.String,System.Collections.Generic.IEnumerable`1[System.String]]"
     },
     "Response": {
       "StatusCode": 403,
       "ReasonPhrase": "Forbidden",
       "Content": {
         "odata.error": {
           "code": "Authorization_RequestDenied",
           "message": {
             "lang": "en",
             "value": "Insufficient privileges to complete the operation."
           }
         }
       },
       "Headers": "System.Collections.Generic.Dictionary`2[System.String,System.Collections.Generic.IEnumerable`1[System.String]]"
}
}

我已经验证了服务主体对角色分配具有读访问权限。

1 个答案:

答案 0 :(得分:0)

实际上,此PowerShell脚本Get-AzureRmRoleAssignment不仅需要读取访问权限以使用Azure REST API权限进行角色分配,还需要使用Azure AD Graph API读取目录数据权限

我们可以使用Fiddler找出此命令调用的API:

enter image description here

这意味着Get-AzureRmRoleAssignment需要调用3个API来完成操作。其中两个是Azure REST API,其中一个是Azure AD Graph API:

POST https://graph.windows.net/<tenantID>/getObjectsByObjectIds?api-version=1.6

<强>解决方案:

因此,请检查您的sp是否具有读取目录数据权限的权限。(您最好添加Read directory data权限,包括“应用程序权限”和“委派权限”,然后单击“授予权限”按钮)。这是我的测试结果: enter image description here

希望这有帮助!