无法在 Azure Devops 上运行的 powershell 脚本中访问 Azure Key Vault 机密

Shi*_*wat 2 powershell azure azure-resource-manager azure-keyvault azure-devops

我有一个 powershell 脚本,尝试使用此命令检索存储在 Azure 密钥保管库中的机密。

$password = (Get-AzureKeyVaultSecret -vaultName $vaultName -name $secretName).SecretValueText
Run Code Online (Sandbox Code Playgroud)

当我在本地执行 powershell 脚本时,它工作得很好。但是,当我尝试在 Azure Devops 上执行相同操作时,它失败并给出以下错误。

[error]Operation returned an invalid status code 'Forbidden'
Run Code Online (Sandbox Code Playgroud)

我觉得这不是访问策略问题,因为我能够使用本地运行的 powershell 脚本在我的保管库上成功执行读/写操作。

Pet*_*der 5

我很确定这是一个访问策略问题。

转到 DevOps 项目设置 - 管道 - 服务连接,然后单击“更新服务连接”(使用对话框的完整版本)。您可以在其中找到订阅 ID 和服务主体 ID。

然后,您必须向此 SPN 授予显式权限:

Login-AzureRmAccount -subscription <YourSubscriptionID>
$spn= Get-AzureRmADServicePrincipal -spn <YourSPN>
Set-AzureRmKeyVaultAccessPolicy -VaultName <YourVaultName> -ObjectId $spn.Id -PermissionsToSecrets get,list;
Run Code Online (Sandbox Code Playgroud)