我有一个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]]"
}
}
我已经验证了服务主体对角色分配具有读访问权限。
答案 0 :(得分:0)
实际上,此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
权限,包括“应用程序权限”和“委派权限”,然后单击“授予权限”按钮)。这是我的测试结果:
希望这有帮助!