Azure提供了两个类似但不同的服务,允许虚拟网络(VNet)资源私下连接到其他Azure服务。Azure VNet服务端点和Azure私有端点(由Azure私有链接提供支持)都通过允许VNet流量不通过internet与服务资源通信来促进网络安全,但它们之间存在一些区别。这个由三部分组成的博客系列详细介绍了这两种服务。
准备学习私有链接和私有端点?我们走吧!
上面,VNet中的虚拟机可以使用Azure私有链接私有端点连接到特定的SQL数据库,就像它在VNet中一样,即使NSG拒绝出站流量。私有端点使得流量可以从一个私有IP地址流到同一个VNet中的另一个私有IP——不需要internet遍历。
Azure Private Link是一种服务,它允许虚拟网络资源私有地连接到其他资源,就好像它们是同一网络的一部分,通过Microsoft Azure主干而不是internet传输流量。
要利用此服务,需要创建一个私有链接私有端点。私有端点是向服务提供私有IP地址的网络接口,通常VNet只能通过公共IP地址访问该服务。
例如,每个存储帐户都有一个公共端点,默认情况下,该端点对任何网络上的客户机都是开放的。通过私有端点,您可以从VNet为存储帐户分配私有IP地址,并且该VNet中的虚拟机(VM)无需通过internet就可以访问存储帐户。这很强大,因为这意味着您不需要在流量源或目的地使用公共IP地址。这就好像您将存储帐户带入VNet中。
但这还不是全部。当然,存储帐户仍然有一个公共端点——它不会因为您没有使用它而消失。因此,如果需要,您可以阻止所有到其公共端点的通信,进一步保护它不受网络漏洞的影响。
私有端点可以为两种不同类别的服务启用:
如果没有私有端点,就需要给虚拟机分配一个公共IP地址,将其暴露给internet和伴随它而来的所有威胁;子网将需要一个NAT或网关设备,需要一个额外的配置步骤和潜在的减慢流量;存储帐户需要对任何网络上的客户端开放,这样如果凭据泄露,internet上的任何人都可以访问它。不是很好!
如果没有私有端点,您的消费者将不得不通过internet访问您的服务。同样,它们的虚拟机需要被分配公共IP地址,相关的子网需要一个NAT或网关设备,而且您的服务资源也必须能够从internet访问。
(私有链接服务超出了本文的范围,因此我们将重点关注在Azure PaaS服务中使用私有端点。)
现在,让我们看看私有端点带来的一些好处。如果您已经阅读了本系列的第1部分(其中我们讨论了服务端点),那么这一点听起来会很熟悉:
如果你是一个AWS用户和所有这一切听起来很熟悉,你可能会想到VPC接口端点,也是网络接口,使交通从虚拟网络访问子网AWS服务或端点服务(其他AWS托管的服务客户)不需要交通去在互联网上。接口端点将你连接到由AWS PrivateLink提供支持的服务,并从相关子网分配私有IP地址,因此流量的来源和目的地都是私有IP。非常像Azure私有链接的工作方式!
让我们回到我们的VM和存储帐户示例。假设您希望流量从前者流到后者,而不必访问存储帐户的公共端点。我们将向您展示这个出色的Azure教程的缩略版。
下面是如何创建一个私有端点:
现在已经创建了私有端点,可以对其进行测试了。SSH或RDP到实例中并运行nslookup mystorageaccount.blob.core.windows.net,用存储帐户名替换mystorageaccount。你会看到这样的东西:
Server: 127.0.0.53 Address: 127.0.0.53#53
Non-authoritative answer: mystorageaccount.blob.core.windows.net canonical name = mystorageaccount.privatelink.blob.core.windows.net. Name: mystorageaccount.privatelink.blob.core.windows.net Address: 10.1.0.5
注意上面的IP地址是如何成为私有IP地址的。如果你从你的本地终端运行相同的命令,你会看到这样的东西:
Server: 75.75.75.75 Address: 75.75.75.75#53
Non-authoritative answer: mystorageaccount.blob.core.windows.net canonical name = mystorageaccount.privatelink.blob.core.windows.net. mystorageaccount.privatelink.blob.core.windows.net canonical name = blob.blz81prdstr02z.store.core.windows.net. Name: blob.blz81prdstr02z.store.core.windows.net Address: 52.238.154.132
为了加分:阻止所有的流量到存储帐户的公共端点。您可以通过导航到存储帐户并在侧边栏中选择“防火墙和虚拟网络”来做到这一点。在“允许访问”下,选择“选定的网络”。然后保存更改。因为您没有白名单任何网络,没有网络可以访问存储帐户通过它的公共端点。
你可以在虚拟机上使用Azure CLI或PowerShell来测试这一点,将一个文件上传到你的存储帐户中。尝试从本地终端(或从同一VNet但不同子网中的VM)检索该文件,您将得到一个错误消息,说明您无法连接到存储帐户。正如预期的那样,您可以通过私有端点从VM连接到存储帐户,但是您不能在子网之外连接到它。
额外的好处:您可以创建一个NSG,通过阻止来自托管虚拟机的子网的出站流量来进一步锁定VNet。VM仍然能够通过私有端点访问存储帐户,并且可以确保其他流量不能离开子网。
同样,要获得完整的教程,请参阅Azure文档。
可以看到,通过将私有端点资源引入到VNet中,私有端点是保护VNet和私有端点资源的好方法。流量源是一个私有IP地址,而目的地是同一子网中的私有IP地址。
“听起来不错,”您可能会说,“但是私有端点和服务端点之间有什么区别呢?”
为此,请继续关注本博客系列的第3部分,在其中我们将比较私有端点和服务端点!