3

我有一个服务主体,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]]"
}
}

我已验证服务主体具有角色分配的读取权限。

4

1 回答 1

1

实际上,这个 powershell 脚本Get-AzureRmRoleAssignment不仅需要具有 Azure REST API 权限的角色分配读取权限,还需要具有 Azure AD Graph API 的读取目录数据权限

我们可以使用 Fiddler 找出这个命令调用了哪个 API:

在此处输入图像描述

这意味着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应用程序权限和委托权限,然后单击授予权限按钮)。这是我的测试结果: 在此处输入图像描述

希望这可以帮助!

于 2018-04-06T16:32:57.430 回答