为什么在使用服务主体执行 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"
其中:
$keyVaultServicePrincipalId
是 Key Vault 的 pre-registered principal ID。它的值为cfa8b339-82a2-471a-a3c9-0fc0be7a4093
.
$resourceGroupName
是存储所在资源组的名称。它的值为accountsmanager-test-global-rg
.
$storageAccountName
是我的存储帐户的名称。它的值为accountsmanagertest
.
服务主体
这里是服务主体的权限,命令是运行:
该命令是 运行 作为在订阅中具有所有者角色的服务主体:
在该订阅中创建的资源组也归该服务主体所有:
问题
当我执行 运行 命令时,出现以下错误:
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.All
在 Azure Active Directory Graph
中,而不是 Microsoft Graph
。
稍等片刻后即可正常使用
在 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"
其中:
$keyVaultServicePrincipalId
是 Key Vault 的 pre-registered principal ID。它的值为cfa8b339-82a2-471a-a3c9-0fc0be7a4093
.$resourceGroupName
是存储所在资源组的名称。它的值为accountsmanager-test-global-rg
.$storageAccountName
是我的存储帐户的名称。它的值为accountsmanagertest
.
服务主体
这里是服务主体的权限,命令是运行:
该命令是 运行 作为在订阅中具有所有者角色的服务主体:
在该订阅中创建的资源组也归该服务主体所有:
问题
当我执行 运行 命令时,出现以下错误:
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.All
在 Azure Active Directory Graph
中,而不是 Microsoft Graph
。
稍等片刻后即可正常使用