我们的云服务使用azure存储帐户。此存储帐户是虚拟网络的一部分,因此对存储帐户的访问仅限于selected networks
,并添加了vnet。这在我们的服务中非常有效。
当我们试图在azure管道中将数据复制到此存储帐户时,就会出现问题。在管道中,我们临时向存储帐户添加一个防火墙规则,以允许从管道代理的Ip地址到存储帐户的流量。然后我们复制数据(通过azcopy(,最后删除防火墙规则。这对私人代理来说很好。然而,我们也在使用托管在azure中的私有代理。问题是,如果代理在azure中运行,则与存储帐户的连接使用专用azure ip地址,并且防火墙规则不起作用。这在本文档中有规定:
与存储帐户部署在同一区域的服务使用专用Azure IP地址进行通信。因此,您不能基于特定Azure服务的公共出站IP地址范围来限制对这些服务的访问。
有什么方法可以强制外部路由吗?在我看来,以目前的配置,我们无法从azure内连接到存储帐户,而我们可以从azure外的私人代理(或任何其他pc(连接,这真的很愚蠢。
我已经尝试过在存储帐户的firewalls and virtual networks
部分中使用routing preference
设置,并使用-internetrouting
端点,但这没有任何区别。
解决方案是使用私有端点。我正在处理同样的问题,经过大量研究,我发现私有端点将有助于通过内部IP访问您的代理所在的远程vnet和存储所在的vnet。我已经对此进行了测试,并在下面提供了详细信息。
经过测试,我发现这是通过在存储vnet中创建一个专用DNS并设置一个vnet DNS链接来实现的,该链接允许代理所在的远程vnet中的VM将存储帐户连接解析为专用IP,而不是公共IP。此外,还会在远程vnet中创建一个NIC,该NIC提供到存储的专用IP的路由。
因此,NIC与为专用IP连接提供路由的代理位于同一个vnet中,并且存在一个DNS链接来将存储解析为专用IP,这一切都正常工作。代理将依赖专用DNS而不是公共DNS来解析存储主机名,因此代理将通过专用IP与azure正确通信。
编辑:我已经设置了一个私有端点,并确认它按预期工作。使用terraform有一些注意事项,我在相关的azurerm提供商GitHub问题中概述了这些注意事项:
https://github.com/hashicorp/terraform-provider-azurerm/issues/2977#issuecomment-1011183736
根据此处,您需要允许访问与您所在地区匹配的整个azure数据中心。因此,我正在考虑自动查询API,检索IP范围并使用它