为什么在使用服务主体执行 New-AzRoleAssignment 时出现错误 'The provided information does not map to an AD object id.'?

Why do I get the error 'The provided information does not map to an AD object id.' when executing New-AzRoleAssignment using a Service Principal?

在 Azure DevOps 管道中使用 Powershell,我试图将密钥保管库的主体角色 Storage Account Key Operator Service Role 分配给存储帐户。

命令行

将 Azure 与服务主体连接后,命令行为 运行:

$credentials = New-Object -TypeName System.Management.Automation.PSCredential($servicePrincipalApplicationId, $clientSecret)

Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant $tenantId

这是我执行的命令行:

New-AzRoleAssignment -ApplicationId $keyVaultServicePrincipalId -ResourceGroupName $resourceGroupName -ResourceName $storageAccountName -ResourceType "Microsoft.Storage/storageAccounts" -RoleDefinitionName "Storage Account Key Operator Service Role"

其中:

服务主体

这里是服务主体的权限,命令是运行:

该命令是 运行 作为在订阅中具有所有者角色的服务主体:

在该订阅中创建的资源组也归该服务主体所有:

问题

当我执行 运行 命令时,出现以下错误:

New-AzRoleAssignment: The provided information does not map to an AD object id.

为什么在执行命令 New-AzRoleAssignment 时出现错误 The provided information does not map to an AD object id.

我也可以在我这边重现这个,有两个问题。

1.In你的命令,ResourceType应该是Microsoft.Storage/storageAccounts,而不是Microsoft.Storage/storageAccount

2.In你的AD App的API权限与DevOps servcie连接中使用的服务主体相关,需要添加Application权限 Directory.Read.AllAzure Active Directory Graph 中,而不是 Microsoft Graph

稍等片刻后即可正常使用