使用ApplicationId替代ObjectId调用New-AzRoleAssignment失败求助
问题:使用ApplicationId执行New-AzRoleAssignment报错'PrincipalId' cannot be null
问题场景
尝试用ApplicationId替代ObjectId执行New-AzRoleAssignment命令失败,执行代码:
$appId = 'f9f6b23d-eff8-48e1-a7f9-fd636a32e62c' # 示例应用ID $roleName='Azure Service Bus Data Owner' New-AzRoleAssignment -ApplicationId $appId -RoleDefinitionName $roleName
报错信息:
New-AzRoleAssignment: 'PrincipalId' cannot be null.
原因分析
-ApplicationId参数需要模块通过应用ID匹配对应的服务主体ObjectId(即PrincipalId),但如果未指定角色分配的作用域(Scope),模块无法精准定位到目标服务主体,导致无法自动填充PrincipalId,进而触发该错误。另外,角色分配本身必须明确作用域(订阅/资源组/具体资源层级),这是隐含的必填项。
解决方法
方法1:先获取服务主体ObjectId再执行分配
- 通过ApplicationId查询对应的服务主体ID:
$sp = Get-AzADServicePrincipal -ApplicationId $appId $principalId = $sp.Id
- 指定作用域执行角色分配(示例为Service Bus命名空间层级):
# 替换为实际的订阅ID、资源组、命名空间名称 $scope = "/subscriptions/{你的订阅ID}/resourceGroups/{资源组名称}/providers/Microsoft.ServiceBus/namespaces/{ServiceBus命名空间名称}" New-AzRoleAssignment -ObjectId $principalId -RoleDefinitionName $roleName -Scope $scope
方法2:直接指定ApplicationId和Scope
无需提前查询ObjectId,直接在命令中补充作用域参数,模块会自动匹配对应的服务主体:
$scope = "/subscriptions/{你的订阅ID}/resourceGroups/{资源组名称}/providers/Microsoft.ServiceBus/namespaces/{ServiceBus命名空间名称}" New-AzRoleAssignment -ApplicationId $appId -RoleDefinitionName $roleName -Scope $scope
内容的提问来源于stack exchange,提问作者lbpoundz
相关产品推荐
相关产品推荐

