Azure-docs: 使用vnet和防火墙保护Azure DevOps构建管道无法从Key Vault获得秘密

创建于 2019-09-15  ·  50评论  ·  资料来源: MicrosoftDocs/azure-docs

我想使用DevOps Build Pipeline任务中存储在密钥库中的机密信息,并且希望深入了解安全最佳实践和防御。 作为安全性最佳实践,我希望可以从选定的虚拟网络,选定的Azure服务和受信任的Internet IP访问密钥库。 当然,我将使用服务主体和适当的权限(列表/获取)。

不幸的是,Azure DevOps不是受信任的服务之一。 因此,我的替代方法是将DevOps IP列入白名单。 我发现我的DevOps位于美国东部2地区,并且我下载了Azure数据中心IP(使用美国东部2过滤)。 美国东部地区约有285个IP2。 Key Vault防火墙对可以添加的防火墙规则有限制,限制为127个! 所以,我很不走运!

目前,只有允许所有网络,我才能在构建管道中从密钥库中获取秘密! 是的,我仍然必须进行身份验证才能获得这些机密,但我在深入防御上迷失了方向。 我确实需要将密钥库锁定到受信任的网络,但我不能。 为什么? 我不能添加超过127条防火墙规则(以覆盖该区域),并且DevOps并不是值得信赖的Azure服务之一!


文件详细资料

请勿编辑此部分。

Pri2 awaiting-product-team-response key-vaulsvc product-question triaged

最有用的评论

顺便说一句,上面提到的文章说IP范围可以每周更改。 建议我们每周更新一次防火墙,甚至尝试跟踪更改,这非常荒谬。

所有50条评论

@ aspnet4you感谢您的反馈。
我们正在积极调查,并将尽快与您联系。

@ KalyanChanumolu-MSFT-感谢您调查问题。 Key Vault是关键的基础架构组件,从其业务性质来看,我们不想将其公开给不受信任的网络。 如果我可以在自己的通风口中建造机器,那应该没问题,但是我的目标是将Azure DevOps用于CI / CD。 我需要存储密钥和秘密,并能够安全地检索它们。

@ aspnet4you ,感谢您分享查询。 将IP列入白名单不是一种有效的方法,但绝对是一种解决方法。 我们正在与产品团队合作,将Azure Dev Ops作为Azure Key Vault的受信任服务获得,这在所有方面都是一个完整的解决方案。 请允许我们有时间,我将与您分享我的下一个更新。

您可以在构建定义中添加一个步骤,以将代理IP地址列入白名单,然后在构建结束时将其从白名单中删除。 在Azure产品团队将Azure DevOps添加为受信任的服务之前,这不是解决方案,而是一种解决方法。 感谢@ Daniel Mann提供了这个想法。

解决方案很简单,但是我不会信任ipify.org作为REST API端点来获取我的构建代理的IP地址。 相反,我在Azure Function-GetClientIP上创建了自己(且受信任)的服务。 DevOps不是我的日常工作,我很难弄清楚如何分配和使用用户定义的变量并将其传递到管道中的下一步/任务/阶段! 关于变量用法的Microsoft文档不足以帮助我,但经过大量不成功的运行后,我才弄清楚了!

在我的博客“ Azure DevOps构建管道”中查看完整的解决方案,

@ aspnet4you ,有关将Azure DevOps作为受信任服务的讨论。 Azure DevOps有一种独特的方案,其中访问Key Vault的身份属于客户而不是Microsoft。 这违反了“可信服务”的可伸缩性和安全性要求。

目前,唯一的解决方法似乎是将DevOps计算机的IP地址添加到AKV防火墙。 此子集比Datacenter的所有IP都小,将符合127个IP规则的限制。

我目前正在努力获取IP,并将很快更新线程。

@ aspnet4you ,请在下面找到有关IP的详细信息:

对于将AzureDevops服务列入白名单-https://docs.microsoft.com/zh-cn/azure/devops/organizations/security/allow-list-ip-url ? view = azure -

对于将托管代理列入白名单-https : //docs.microsoft.com/zh-cn/azure/devops/pipelines/agents/hosted = azure-devops = yaml# agent -ip-ranges

希望这可以帮助。

@ aspnet4you ,希望对您

@ souravmishra-msft它表明将azure devops服务列入白名单,链接中的ip还不够。
例如,尝试将devops中的变量组链接到keyvault的机密时,我还需要添加ip:52.236.xx(我有意隐藏了2个字节)。 您知道这些IP地址在哪里吗? 您可以为devops变量组链接提供完整的ip吗?

@ aspnet4you ,感谢您分享查询。 将IP列入白名单不是一种有效的方法,但绝对是一种解决方法。 我们正在与产品团队合作,将Azure Dev Ops作为Azure Key Vault的受信任服务获得,这在所有方面都是一个完整的解决方案。 请允许我们有时间,我将与您分享我的下一个更新。

此功能有任何更新吗? 是否有任何链接来跟踪功能“ Azure Dev Ops作为Azure Key Vault的受信任服务”

@ aspnet4you ,如何单独将IP列入白名单,以在没有相关的Key Vault访问策略的情况下获得秘密/密钥?

@oviliz-很好的问题。 IP白名单是防止未经授权访问Vault的最后防御之一。 必须使用“密钥保管库访问策略”配置服务主体以列出和获取密钥和机密。 这是我在《 Azure DevOps构建管道》一文中所述的第二个要求,即

您好@ KalyanChanumolu-MSFT有任何更新吗? 今天,我面临着同样的问题。 在发布管道(Azure DevOps)中,我无法从Azure Key Vault步骤中的KV中检索秘密。 上面与IP的链接断开了...那么如何获取管道中的秘密? 允许受信任的Microsoft服务绕过此防火墙吗? (是)-也没有帮助。

我也面临着这个问题,很明显,哪些IP需要列入白名单。 另外,这将我们的库开放给我们无法控制的服务,因此我对此解决方案感到非常不满。

顺便说一句,上面提到的文章说IP范围可以每周更改。 建议我们每周更新一次防火墙,甚至尝试跟踪更改,这非常荒谬。

我也面临着同样的问题,每周将IP列入白名单根本不是一种选择。

是否可以在VM内为构建管道使用自托管代理,在VNet内设置此VM,然后允许其在Key Vault中访问? 我绝不是专业人士,所以这种方法有多荒谬?

FWIW在此受到此解决方案的启发: https :

将我们添加到列表中。 ADO为何不是密钥库的受信任服务?

如果您在每周文件中搜索devops或托管代理,则不会突出显示任何ip。 您在https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=56519中使用的IP地址是什么? 如果您按数据中心进行搜索,则有appservice,devspace等,但是与devop和主机代理有什么关系呢?

@ ShaneBala-keyvault,根据要求,将您添加到此线程中。

将我们添加到列表中。 ADO为何不是密钥库的受信任服务?

和您在一起,希望将许多项目移至AZ Devops,但这是一个问题

+1,应尽快修复。 即使秘密管道变量可以用于发布,我也希望有一个真实的来源。 保存后无法再次查看机密管道变量值,因此无论如何放置该信息,无论如何都需要将信息存储在其他位置。

所以关于这个问题的问题:

https://stackoverflow.com/q/61411653/3850405

+1这真的很关键。 微软对此有何评论?

@ souravmishra-msft是否应该重新打开?

@Ogglas这绝对应该重新打开。 他们应该列出ips或标记服务以绕过Azure Keyvault防火墙。 他们为其他服务这样做,为什么不让天蓝色的人堕落呢?

+1,这里同样的问题

+1

也加入了..对我来说也是一个巨大的问题

这到底有多远??? “变通办法”的链接也不起作用:)

@jsburckhardt-不确定您指的是哪种解决方法,但是您可以查看我的博客文章,
https://blogs.aspnet4you.com/2019/09/20/azure-devops-build-pipeline-use-keys-and-secrets-from-key-vault/

我们是否需要为此创建一个新问题,或者找到一种重新打开它的方法@ souravmishra-msft?

@captainbrown ,我重新打开了该线程。 我还再次在内部更新了程序管理器,因为从最初打开该线程的时间开始,内部线程是由产品团队创建的。

我还将这个线程分配给程序管理器。 他们可能需要一些时间才能在此线程上做出响应,因为我不确定此更改可能需要产品方面的复杂性。

我还提高了与该github线程相对应的内部线程的强度,并将使您随时了解最新进展。

我还想指出的是,我已经修复了该线程前面的评论之一中提到的URL。 您可能希望同时查看一下这些内容,并让我们知道这些内容是否适用于您的解决方案,如果不能解决,我们也会对此进行更新。

@ souravmishra-msft非常感谢您重新打开此问题。 允许devops服务的范围不能使您无法访问密钥库(可能范围在网站上已过期),并且可能的子网列表太长,无法添加到密钥库的网络访问控制中。

我和我的团队将热切期待您的计划经理的讲话

谢谢您重新打开... @captainbrown我看到了相同的问题,其中带有ip服务的文档或json文件肯定已过期/未正确记录。

同意,谢谢您的重新开放。 这也是我们真的很想解决的问题。

@ souravmishra-msft谢谢,我希望这会很快得到优先处理。

+1,这也是我们面临的问题。 Azure DevOps不仅可以访问Key-vault,而且还需要使用DevOps管道来生成一些文件并将其上传到受防火墙保护的存储帐户,但是我们面临着同样的问题,即Azure DevOps不是受信任的服务解决方法是每周将约250个IP地址列入白名单,这将非常丑陋(而且还不确定是否可以将多少IP地址添加到存储帐户防火墙中)。 如果能解决这个问题,那就太好了!

当前没有针对此问题的解决方法。

您可以使用自托管代理,并将以下IPv4范围添加到密钥库防火墙的允许列表。 此处的详细信息: https :

(Azure DevOps团队已意识到此问题,目前正在进行永久性修复的工作)

此功能当前处于预览状态。

这是另一种解决方法...您可以使用比例集来设置自己的vnet。

https://docs.microsoft.com/zh-cn/azure/devops/pipelines/agents/scale-set-agents?view=azure-devops

另一个把戏...我不拥有这个把戏的所有权,有人向我展示。
如果您有企业devops帐户,则有一种方法允许devops读取您的库的密钥库机密。
如果您有个人帐户,则此功能无效。

您可以打开通往Azure / 11网络的防火墙,并使用keyvault设置从devops到azure的连接。 设置变量库并添加密码。 添加机密后,请删除防火墙规则,然后尝试添加机密。 该错误消息将为您提供可以放置在防火墙中的IP。 我们发现它在一个月内没有发生变化,并且我们知道它会发生变化。 目前,我们正在寻找像其他所有人一样的解决方法。 我将对构建和发行版进行进一步的测试,但这将允许Native Devops GUI直接与Keyvaults交互。

同样,这不适用于个人帐户。

+1我们通过私有链接/端点使用AzDO到SQL Server时遇到类似的问题。

+1类似问题在这里。

这里提供解决方法。 这不是文档本身的问题。 这是一种解决方法https://docs.microsoft.com/zh-cn/azure/devops/pipelines/agents/v2-linux?view=azure-devops#please-close您也可以在此处发布功能请求https:// developercommunity.visualstudio.com/spaces/21/index.html

+1,今天就解决这个问题。

如果Microsoft要为Azure DevOps启用服务标签,是否可以在Keyvault防火墙上使用它? https://devblogs.microsoft.com/devops/new-ip-address-ranges-with-service-tags-for-azure-devops-services/

@ JQUINONES82恐怕不适合托管代理。 从您的链接:

服务标签不适用于Microsoft托管代理。

+1,过去两年来一直

+1,今天就解决这个问题。

这是封闭的,所以我如何得到修复?

安全性不是功能要求,它是任何云组件的必要条件。 如果不固定,可以重新打开吗? 我看到提到正在预览中的内容...我将使用预览功能。 这将阻止我们的部署,因为我不想花更多的钱来天真地将VM纺成虚拟机来做...

@jsburckhardt-不确定您指的是哪种解决方法,但是您可以查看我的博客文章,
https://blogs.aspnet4you.com/2019/09/20/azure-devops-build-pipeline-use-keys-and-secrets-from-key-vault/

嗨,队友,是一个不错的解决方法。 不幸的是,由于安全限制。 团队无法控制KV / vNet白名单IP

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

bityob picture bityob  ·  3评论

monteledwards picture monteledwards  ·  3评论

paulmarshall picture paulmarshall  ·  3评论

JamesDLD picture JamesDLD  ·  3评论

mrdfuse picture mrdfuse  ·  3评论