为什么在使用服务主体执行 Add-AzKeyVaultManagedStorageAccount 时出现错误 'Forbidden.'?

Why do I get the error 'Forbidden.' when executing Add-AzKeyVaultManagedStorageAccount using a Service Principal?

在 Azure DevOps 管道中使用 Powershell,我试图通过调用命令 Add-AzKeyVaultManagedStorageAccount.

为密钥保管库分配一个新的存储帐户

到目前为止,除了最后一个命令失败并出现 Forbidden 错误外,所有脚本似乎都有效。

我找到了 a similar issue on the MSDN,但似乎 KeyVault 的策略设置正确。

服务主体的权限

这里是服务主体(名为Azure DevOps - Azure Resource Manager)的权限,命令是运行:

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

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

Key Vault principal 已被赋予
角色 Storage Account Key Operator Service Role 在存储帐户上:

proper policies 已经配置了 Key Vault,最重要的是 Permissions to (Key Vault Managed) Storage 部分:

Vault Name                          : accountsmanager-test
Resource Group Name                 : accountsmanager-test-global-rg
Location                            : Canada Central
Resource ID                         : /subscriptions/***/resourceGroups/accountsmanager-test-global-rg/providers/Microsoft.KeyVault/vaults/accountsmanager-test
Vault URI                           : https://accountsmanager-test.vault.azure.net/
Tenant ID                           : ***
SKU                                 : Standard
Enabled For Deployment?             : False
Enabled For Template Deployment?    : False
Enabled For Disk Encryption?        : False
Enabled For RBAC Authorization?     : False
Soft Delete Enabled?                : True
Soft Delete Retention Period (days) :
Access Policies                     :
                                      Tenant ID                                  : ***
                                      Object ID                                  : ***
                                      Application ID                             :
                                      Display Name                               : accountsmanager-test (6c55f481-78bf-4f5c-ab40-d8c93d7707df)
                                      Permissions to Keys                        :
                                      Permissions to Secrets                     : get
                                      Permissions to Certificates                :
                                      Permissions to (Key Vault Managed) Storage :

                                      Tenant ID                                  : ***
                                      Object ID                                  : <Service Principal's Object ID>
                                      Application ID                             :
                                      Display Name                               :
                                      Permissions to Keys                        :
                                      Permissions to Secrets                     :
                                      Permissions to Certificates                :
                                      Permissions to (Key Vault Managed) Storage : get, list, delete, set, update, regeneratekey, getsas, listsas,
                                      deletesas, setsas, recover, backup, restore, purge


Network Rule Set                    :
                                      Default Action                             : Allow
                                      Bypass                                     : AzureServices
                                      IP Rules                                   :
                                      Virtual Network Rules                      :

Tags                                :

问题

在脚本中,我运行下面的命令,就像documentation中描述的那样:

Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName 'key1' -DisableAutoRegenerateKey

我收到以下错误:

Operation returned an invalid status code 'Forbidden'

为什么在执行命令 Add-AzKeyVaultManagedStorageAccount 时出现错误 Forbidden

有点奇怪。我有同样的问题。

但是当我使用预览功能 Azure role-based 访问控制(预览) 时,我可以 运行 成功。

以下是我的步骤供大家参考:

将密钥保管库管理员角色分配给服务主体。