如何通过Azure Automation系统托管身份认证Microsoft Partner Center?
问题描述
我在Azure Automation中使用以下PowerShell脚本连接Microsoft Partner Center:
Connect-AzAccount -Identity $accessToken = (Get-AzAccessToken -ResourceUrl "https://api.partnercenter.microsoft.com").Token Connect-PartnerCenter -AccessToken $accessToken
该Azure Automation账户使用系统分配的托管身份,目前脚本能完成认证,但执行Get-PartnerCustomer时报错Error: Get-PartnerCustomer : (invalid_grant),推测是托管身份未配置Partner Center权限导致。同时有以下疑问:
- 是否可为该托管身份分配Microsoft Partner Center权限?若可以,具体操作方式是什么?
- 是否必须创建Azure AD应用注册?需要配置哪些应用权限?
- 是否存在其他认证方式?
- 该脚本需在Azure Automation中以非登录用户身份运行,是否可行?
脚本的作用范围:
- 从Microsoft Partner Center拉取所有客户信息
- 拉取每个客户的所有用户信息
- 拉取每个用户的所有许可证信息
解决方案与疑问解答
1. 为系统分配托管身份配置Partner Center权限
可以分配,操作步骤如下:
- 登录Partner Center,进入合作伙伴设置 > 用户和权限 > 应用程序
- 点击添加应用程序,在搜索框中输入托管身份的名称(即Azure Automation账户的名称,系统分配托管身份的显示名与资源名一致),找到后选中并添加
- 为该托管身份分配对应角色权限:根据脚本需求,可分配全局管理员(全权限)、合作伙伴中心读取者(仅只读权限),或组合客户管理员、用户管理管理员、许可证管理员以覆盖拉取客户、用户、许可证的权限
- 保存配置后,等待15-30分钟让权限生效
2. 是否必须创建Azure AD应用注册?
不是必须的,但如果托管身份权限配置受限,或需要更灵活的权限控制,可选择创建应用注册。若使用应用注册,需配置以下权限:
- 在Azure AD中为应用注册添加Partner Center类别的应用权限:
PartnerCenter.AllCustomerRead.All(读取所有客户信息)User.Read.All(读取所有用户信息)Directory.Read.All(辅助读取用户关联信息)License.Read.All(读取许可证信息)
- 完成权限添加后,需执行管理员同意操作,确保应用能获取到这些权限
3. 其他认证方式
除托管身份+AccessToken的方式,还有以下适合自动化场景的方案:
- 证书认证:创建Azure AD应用注册并上传证书,使用
Connect-PartnerCenter -ApplicationId <AppId> -CertificateThumbprint <Thumbprint> -TenantId <TenantId>完成认证 - 客户端密钥认证:使用应用注册的客户端密钥,执行
Connect-PartnerCenter -ApplicationId <AppId> -ClientSecret <Secret> -TenantId <TenantId>认证,注意密钥需定期轮换 - 服务主体认证:本质与应用注册一致,通过服务主体的身份信息完成Partner Center连接
4. 非登录用户身份运行可行性
完全可行。Azure Automation的系统分配托管身份本身就是非交互式的服务身份,无需登录用户参与。只要完成托管身份的Partner Center权限配置,或使用应用注册的非交互式认证方式,脚本就能在无人登录的情况下自动运行。
关于invalid_grant错误的修复
当前错误的核心原因是:托管身份虽能获取到Partner Center的AccessToken,但未被授予Partner Center的访问权限。按照问题1中的步骤完成权限分配后,重新运行脚本即可解决该错误。
内容的提问来源于stack exchange,提问作者Adib
相关产品推荐
相关产品推荐

