Azure提供了两个类似但不同的服务,允许虚拟网络(VNet)资源私下连接到其他Azure服务。Azure VNet服务端点和Azure私有端点(由Azure私有链接提供支持)都通过允许VNet流量不通过internet与服务资源通信来促进网络安全,但它们之间存在一些区别。这个由三部分组成的博客系列详细介绍了这两种服务。
- 在本系列的第1部分中,我们探讨了虚拟网络服务端点。
- 在第2部分(本部分!)中,我们将讨论私有链接和私有端点。
- 在第3部分中,我们将比较和对比这两种方法,并解释何时使用哪种方法。
准备学习私有链接和私有端点?我们走吧!
什么是私有链接?什么是私有端点?
上面,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中。
但这还不是全部。当然,存储帐户仍然有一个公共端点——它不会因为您没有使用它而消失。因此,如果需要,您可以阻止所有到其公共端点的通信,进一步保护它不受网络漏洞的影响。
私有端点可以为两种不同类别的服务启用:
- Azure PaaS服务,如Azure存储、Azure SQL数据库、Azure密钥库等。点击这里查看完整列表。例如,您可以创建一个端点来安全地将私有子网中的VM连接到存储帐户。在为存储帐户创建私有IP地址后,你可以选择阻止访问它的公共端点,这样唯一能到达它的流量来自通过私有端点的被批准的子网。
如果没有私有端点,就需要给虚拟机分配一个公共IP地址,将其暴露给internet和伴随它而来的所有威胁;子网将需要一个NAT或网关设备,需要一个额外的配置步骤和潜在的减慢流量;存储帐户需要对任何网络上的客户端开放,这样如果凭据泄露,internet上的任何人都可以访问它。不是很好!
- 您自己的服务,如果它运行在标准负载平衡器之后。这被称为私有链接服务,如果您的客户需要从他们自己的VNet中私有地连接到您的服务,那么您将希望创建一个。在您启用了私有链接服务之后,使用者在他们的虚拟网络中创建私有端点并发送连接到您的服务的请求。
如果没有私有端点,您的消费者将不得不通过internet访问您的服务。同样,它们的虚拟机需要被分配公共IP地址,相关的子网需要一个NAT或网关设备,而且您的服务资源也必须能够从internet访问。
(私有链接服务超出了本文的范围,因此我们将重点关注在Azure PaaS服务中使用私有端点。)
私有端点的好处
现在,让我们看看私有端点带来的一些好处。如果您已经阅读了本系列的第1部分(其中我们讨论了服务端点),那么这一点听起来会很熟悉:
- 增强的安全性:由于私有端点促进了对目标资源的私有连接(Azure称之为私有链接资源),所以没有必要在VNet资源端分配一个公共IP地址。如果没有公共IP地址,恶意参与者就无法扫描VM的开放端口以寻找漏洞,并关闭您的应用程序或窃取数据。另外,您可以将私有端点映射到特定的资源甚至子资源(例如,存储帐户或blob),从而减少数据溢出的风险。(您可以在Azure文档中找到可用的私有链接资源和子资源类型的列表。)
- 优化路由:私有端点在Azure主干网络上提供了从VNet到私有链接资源的直接路由,因此没有额外的跳点来降低流量。
- 更简单的网络架构:由于流量通过Azure主干网络从VNet资源流到私有链接资源,因此您不需要分配公共IP地址或配置NAT或网关设备。
- 私有端点支持:私有端点允许来自私有端点的流量访问私有链接资源,而无需公共对等或遍历internet。VPN隧道、ExpressRoute私有对等连接和peered VNets都与私有端点一起工作。
与AWS VPC端点相似
如果你是一个AWS用户和所有这一切听起来很熟悉,你可能会想到VPC接口端点,也是网络接口,使交通从虚拟网络访问子网AWS服务或端点服务(其他AWS托管的服务客户)不需要交通去在互联网上。接口端点将你连接到由AWS PrivateLink提供支持的服务,并从相关子网分配私有IP地址,因此流量的来源和目的地都是私有IP。非常像Azure私有链接的工作方式!
如何为Azure PaaS资源创建私有端点
让我们回到我们的VM和存储帐户示例。假设您希望流量从前者流到后者,而不必访问存储帐户的公共端点。我们将向您展示这个出色的Azure教程的缩略版。
下面是如何创建一个私有端点:
- 导航到私有链接中心并选择“创建私有端点”。
- 为私有端点输入订阅、资源组以及名称和区域。
- 选择“连接到我目录中的Azure资源”,然后选择订阅和“Microsoft”。Storage/storageAccounts”作为资源类型。
- 选择目标资源的名称,然后指定目标子资源。对于存储,可以是blob、blob_secondary、table、table_secondary、dfs和dfs_secondary。
- 选择端点应该部署到的VNet和子网。
- 然后,您可以选择与私有DNS区域集成,如果您使用默认的azd提供的DNS,这是推荐的,因为Azure会为您处理所有困难的工作。如果使用自定义DNS设置,则需要使用自己的DNS服务器或使用VM的hosts文件创建DNS记录。(稍后会有更多关于这个的内容!)
现在已经创建了私有端点,可以对其进行测试了。SSH或RDP到实例中并运行nslookup mystorageaccount.blob.core.windows.net,用存储帐户名替换mystorageaccount。你会看到这样的东西:
Server: 127.0.0.53
Address: 127.0.0.53#53Non-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文档。
在使用私有端点之前,需要了解一些事情
- 私有端点需要花钱。您需要为私有端点资源时间以及处理的入站和出站数据付费。但是,如果你运行自己的私有链接服务,私有链接服务是不需要额外收费的——只有私有端点。
- 在使用私有端点时,正确配置DNS设置是至关重要的,特别是在使用完全限定域名(FQDN)连接到私有端点资源时,因为Azure服务的FQDN解析到它们的公共IP地址。(例如,我们示例中的FQDN mystorageaccount.blob.core.windows.net将解析为52.238.154.132。)如果您的服务被配置为使用其公共端点连接到私有端点资源,并且您有一个自定义DNS设置,那么您将需要重写DNS解析以使用私有IP地址。(如果您使用的是azd提供的DNS,并且在创建私有端点时选择与私有DNS区域集成,那么您就万事俱备了——Azure负责处理细节。)
- 私有端点必须部署在与虚拟网络相同的区域,但是私有链接资源可以部署在不同的区域和/或AD租户。
- 私有端点不支持网络策略,比如网络安全组(NSGs),因此安全规则不会应用于它们。(这就是上述额外的学分作业奏效的原因!)但是不要担心——子网中的其他资源仍然像往常一样受NSG安全规则的控制。请注意,如果您不使用Azure门户来创建私有端点,则需要手动禁用子网的privateendpointnetworkpolicy设置。(如果您使用门户,这将自动为您处理。)
结论
可以看到,通过将私有端点资源引入到VNet中,私有端点是保护VNet和私有端点资源的好方法。流量源是一个私有IP地址,而目的地是同一子网中的私有IP地址。
“听起来不错,”您可能会说,“但是私有端点和服务端点之间有什么区别呢?”
为此,请继续关注本博客系列的第3部分,在其中我们将比较私有端点和服务端点!