更新:我发现问题与IncludeClassicAdministrators
参数无关 - 没有那个问题仍然会发生。我已经相应地更新了这个问题。
背景
我正在编写一个 Azure 自动化脚本来监控谁有权访问我的订阅。我打电话Get-AzureRmRoleAssignment
来获取管理员列表。当我在本地运行我的脚本并以我自己的身份进行身份验证时,它工作正常。当我在自动化中运行它时,我正在使用服务主体进行身份验证,并且由于Access denied to the specified API version失败。
详细信息
我启用了调试输出,我可以看到Get-AzureRmRoleAssignment
进行了 3 个 API 调用:
GET https://management.azure.com/subscriptions/xxx/providers/Microsoft.Authorization
/roleAssignments?api-version=2015-07-01
GET https://management.azure.com//subscriptions/xxx/providers/Microsoft.Authorization
/roleDefinitions?$filter=atScopeAndBelow()&api-version=2015-07-01
POST https://graph.windows.net/xxx/getObjectsByObjectIds?api-version=1.42-previewInternal
{
"objectIds": [
"282e2807-cbd9-43bb-89c2-edc3122fcc04",
"b3a38989-fcf1-4569-b1a6-444e1cd583b6",
"6b0b69bb-49d8-48a6-a740-8c354eb575ea",
"6b0b69bb-49d8-48a6-a740-8c354eb575ea",
"90c78c97-1b3b-444f-a3bb-9fb9dfdb3455",
"7db061f0-361d-4148-a5ef-0a37b138f37c",
"844d81c7-7027-44c3-899d-21e90a7e599d",
"6b0b69bb-49d8-48a6-a740-8c354eb575ea"
],
"includeDirectoryObjectReferences": true
}
在 Azure 自动化中,这是最后一次调用(获取第一次调用返回的用户对象 ID 的用户详细信息)失败:
Status Code:
Forbidden
Headers:
ocp-aad-diagnostics-server-name: CL43Rj9/Eg1H2aYXpRQBM3J4ssdQAWJx32NV+f61Yn4=
request-id : 0a184c82-1dd0-4f29-9192-aa746dff470a
client-request-id : e94a29bf-9846-427e-b958-8a2f9d3a32e3
x-ms-dirapi-data-contract-version: 1.42-previewInternal
ocp-aad-session-key : inmY52ItGZojOuCWsXYSgmNBsJZIQXlg8-l0FLzrvOnftsGwyOfzjmNtXMfLiXQqOp32Pk1n1GjvnvbJdT0Pak6d
7NwIFNIy0tUBep-rTRH__HFt_Kb_2ffSgOPlJSe-.ms4g4jKJV0H4VNYwMDPJljQFyNDjrw42XxrOKmkPXHU
Strict-Transport-Security : max-age=31536000; includeSubDomains
Access-Control-Allow-Origin : *
Duration : 1323869
Cache-Control : private
Server : Microsoft-IIS/8.5
X-AspNet-Version : 4.0.30319
X-Powered-By : ASP.NET,ASP.NET
Date : Wed, 24 Feb 2016 02:45:55 GMT
Body:
{
"odata.error": {
"code": "Authentication_Unauthorized",
"message": {
"lang": "en",
"value": "Access denied to the specified API version."
}
}
}
我在本地运行时看到完全相同的调用,所以我认为这不是版本问题。(我正在使用图库中的 MSOnline 模块。)
我在想我需要向我的服务主体授予一些额外的权限,但不确定哪些权限。我添加了以下所有权限,但仍然收到相同的错误:
Windows Azure Active Directory
应用程序权限
- 读/写目录数据
- 读取目录数据
委托权限
- 读取目录数据
- 阅读所有用户的完整个人资料
- 阅读所有用户的基本资料
Windows Azure 服务管理 API
委派权限
- 以组织用户身份访问 Azure 服务管理
Microsoft Graph
应用程序权限
- 读取目录数据