我们已经通过Service Connections(服务主体身份验证)在Azure DevOps和Azure Key Vault之间建立了连接。但是,为了使其正常工作,我们需要将Azure Key Vault
-> Networking
标记为“允许来自:All networks
”的访问。鉴于我们在这里存储了机密,我们想使用选项Private endpoint and selected networks
代替Allow trusted Microsoft services to bypass this firewall?
设置为Yes
。
喜欢这个:
但是这会导致Azure DevOps上的错误->管道->库:
指定的Azure服务连接需要具有“获取,列出”所选密钥库的机密管理权限。请点击“授权”以启用Azure管道设置这些权限或在Azure门户中管理秘密权限。
如果我们为Azure Key Vault设置“允许来自:All networks
的访问,它会按照前面所述的方式工作,但如果可能的话,我们希望避免这样做。
在管道中设置Azure Key Vault任务
或设置变量组,然后切换回Private endpoint and selected networks
会导致部署时发生类似的错误。
MyKey:“客户端地址未经授权,且呼叫者不受信任服务。\ r \ n客户地址:111.222.333.44 \ r \ n来电者:appid = ; oid = 00000000-0000-0000-0000-000000000000; iss = https://sts.windows.net/ / \ r \ n保险柜:我的保险柜;位置=北欧洲。指定的Azure服务连接需要具有对所选对象的“获取,列出秘密管理”权限密钥库。要设置这些权限,请下载生成/发布日志中的ProvisionKeyVaultPermissions.ps1脚本和执行它,或从Azure门户进行设置。“
不幸的是,每次客户地址都是新的,但是oid
和iss
值相同。根据文档,只能将IPv4 address or CIDR
添加到防火墙。有什么方法可以将Azure代理标记为受信任的Microsoft服务,或者这是一种不好的做法?不过,它似乎比All networks
更安全。
(作者评论后更新)
您是否正在使用Microsoft托管代理?它们是动态的,也许您可以在Azure中的VM上托管代理。您将知道机器的IP,并在KV设置中允许它。
签出Self-Hosted Agents在Microsoft文档中。
这仍然是一个未解决的问题-Issue
可能某些解决方案如URL中所述
在您的代理的管道和白名单IP中添加任务,然后从keyvault获得值后,删除白名单。
也许每周都有白名单Azure DevOps IP列表,但再次看起来似乎不可靠
@ Grand的建议实际上也是解决方案之一。