0

在 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 的预注册主体 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.

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

4

1 回答 1

1

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

在此处输入图像描述

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

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

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

过一段时间生效,就可以正常工作了。

在此处输入图像描述

于 2020-11-03T01:48:26.257 回答