问题描述
我有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
下。
另一方面,您可以使用以下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连接并检查它是否可以看到密钥库。