我正在从azure devops yaml pipeline更新密钥库访问策略。以下是标准代码。
- task: AzureCLI@2
displayName: "Set KeyVault access policy for Web App"
inputs:
azureSubscription: "$(serviceConnection1)"
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
az keyvault set-policy -n '$(KeyVaultName)' --secret-permissions get list --object-id '$(appId)'
任务成功,但也会失败很多次并出现错误
“在订阅中找不到保管库”。服务主体具有密钥保管库的贡献者权限。
keyvault的网络设置为“所有网络”,因此没有防火墙规则。
我很肯定,这里没有技术错误,但是这个错误导致任务失败了很多次。任何帮助都是很好的。
3条答案
按热度按时间2nc8po8w1#
你正在使用的Azure SPN必须能够访问多个订阅,因此,当SPN突然在其他某个订阅中具有默认上下文时,就会发生这种情况。最好明确告诉AZCLI要使用哪个订阅
建议,试试这个
添加**“az帐户集--订阅”$(serviceConnection 1)“"**
plupiseo2#
谢谢sikumars-msft | Microsoft Docs。将您的建议作为答案发布以帮助其他社区成员。
理想情况下,当提供的名称与Azure中可用的保管库不匹配时,我们会收到消息
The Vault '$KeyVaultName' not found within subscription
。因此,我们建议您将--debug
参数与上述cmdlet结合使用,这样可以从关键方面提供更多信息参考:Vault not found in the subscription error occurs randomly azure devops pipeline - Microsoft Q&A
bkhjykvo3#
当订阅中有太多保管库时会发生这种情况。例如,如果我运行
az keyvault show --name $keyvaultName --resource-group "$azureSubscription-rg"
,它工作正常,如果我再运行az keyvault set-policy --name $keyvaultName --object-id $principalObjectId --secret-permissions all
,它会出错,说vault not found。我发现--debug
的有效负载很大,并且不包含我使用set-policy查找的保管库。对我有效的是
az keyvault set-policy --name $keyvaultName --object-id $principalObjectId --secret-permissions all --resource-group "$azureSubscription-rg"