Azure DevOps管道变量组无法列出密钥保管库

问题描述

我有Azure DevOps管道变量组,该组不能列出Key Vault。但是,管道可以设置秘密。怎么了?

根本找不到关键值:

- Create Variable Group in Library of Azure DevOps
- Select Service Principal as Subscription
- No Key vault instance is listed in drop down

主要VAULT访问策略

- Application: Service Principal
- Key Permission: List
- Secret Permission: Get,List,Set

管道中的工作代码

$ConnectionString = az storage account show-connection-string -g $(resource-group) -n sa$(project- 
name)$(environment) -o "tsv"
$CurrentConnectionString = az keyvault secret show --name StorageAccountConnectionString --vault-name 
$(key-vault-name) --query value -o "tsv"
          if (!($ConnectionString -eq $CurrentConnectionString)) {
            az keyvault secret set -n StorageAccountConnectionString --vault-name $(key-vault-name) --value $ConnectionString -o none
          }
          else {
            write-host("Secret already in key vault!")
          }

解决方法

据我所知,如果您为服务主体设置了Secret Permission: Get,List,则它可以使用Azure Devops中的Azure Key Vault。

由于在下拉列表中看不到密钥库名称,因此可以尝试检查Azure服务连接。

如果您使用Service principal (manual)创建服务连接,则需要确保服务主体位于正确的Azure Subscription下。

enter image description here

另一方面,您可以使用以下Azure Powershell脚本创建一个新的服务主体。

az account set --subscription <Azure-SubscriptionId>

az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/SUBSCRIPTION_ID"

然后,您可以为新的Service Principal设置Key Vault权限,并在Azure Devops Service连接中使用它。

您还可以尝试使用Service principal (automatic) Azure Devops Service连接并检查它是否可以看到密钥库。

enter image description here