Azure DevOps管道中随机出现“在订阅中未找到保险库”错误

4

我正在使用Azure DevOps的YAML管道更新密钥保管库的访问策略。以下是标准代码:

       - 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)'

任务有时会因错误而成功,但失败次数也很多。
错误信息为:"订阅中找不到保管库"。服务主体具有密钥保管库的贡献者权限。
密钥保管库的网络设置为"All Networks",因此没有防火墙规则。
我相当确定这里没有技术错误,但任务经常由于此错误而失败。任何帮助都将是极好的。

你好,这个问题有任何更新吗?请随时告诉我们下面的答案是否能帮到你,并且欢迎留言评论。 - Jane Ma-MSFT
3个回答

3

这种情况通常是由于订阅中拥有太多保险库导致的。

例如,如果我运行以下命令:az keyvault show --name $keyvaultName --resource-group "$azureSubscription-rg",那么一切正常。但如果我接着运行az keyvault set-policy --name $keyvaultName --object-id $principalObjectId --secret-permissions all,则会出现“未找到保险库”的错误。通过使用--debug参数,我发现收到的负载很大,且不包含我要寻找的设定策略的保险库。

我的解决方案如下:

az keyvault set-policy --name $keyvaultName --object-id $principalObjectId --secret-permissions all --resource-group "$azureSubscription-rg"


2

您正在使用的 Azure SPN 必须具有访问多个订阅的权限,因此当 SPN 突然在其他订阅中具有默认上下文时,就会发生这种情况。最好明确告诉 AZCLI 要使用哪一个。
建议尝试以下操作:
添加 "az account set --subscription '$(serviceConnection1)'"

 - task: AzureCLI@2
        displayName: "Set KeyVault access policy for Web App"
        inputs:
          azureSubscription: "$(serviceConnection1)"
          scriptType: bash
          scriptLocation: inlineScript
          inlineScript: |
            az account set --subscription '$(serviceConnection1)'
            az keyvault set-policy -n '$(KeyVaultName)' --secret-permissions get list --object-id '$(appId)'

0

感谢sikumars-msft | Microsoft Docs。将您的建议发布为答案以帮助其他社区成员。

理想情况下,当提供的名称与 Azure 中可用的保险库不匹配时,我们会收到消息The Vault '$KeyVaultName' not found within subscription。 因此,我们建议您结合上述 cmdlet 使用--debug参数,这将从关键方面提供更多见解。

az keyvault set-policy -n {TypeKeyVaultName} --secret-permissions get list --object-id $(appId) --debug  

参考:Azure DevOps管道中随机出现“订阅中未找到Vault”错误-Microsoft Q&A


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接