《Windows Azure Platform 系列文章目录》
我们在使用Azure PaaS服务的时候,经常会发现这些PaaS提供的是公网的DNS地址,且无法限制客户端对这些PaaS DNS地址的访问。所以我们只能通过虚拟机的方式来搭建自己的Azure公有云部署,通过把虚拟机都加入到虚拟网络中,通过虚拟网络的内网IP地址互相访问。而不是采用PaaS服务。
后来微软云Azure做了功能的改进,允许我们限制对PaaS DNS的访问。我们现在有两种方式来进行限制,分别是
1.Service Endpoint,服务终结点
2.Private Link
这2个服务看起来非常类似,主要解决的问题都是:限制了谁可以链接到Azure的服务。
笔者将分别介绍这2种服务,我们首先从Service Endpoint开始。
Service Endpoint,笔者比较喜欢叫做VNet Integration。这是微软云Azure提供的比较早的服务。服务终结点允许您将对 PaaS 资源的访问权限限制为来自 Azure 虚拟网络(Virtual Network)的流量。
使用Service Endpoint的时候,PaaS服务并不加入到Virtual Network中。而是通过安全隧道的方式,源地址的流量离开Virtual Network,通过Azure 主干网,访问到Azure PaaS服务。
并且PaaS服务配置可以识别出,源地址的流量来自于Virtual Network,并允许访问。所以不需要在Azure PaaS服务上配置IP白名单。
在举个更详细的例子:
场景:1台Azure VM加入到Virtual Network里,该VM没有公网IP,想访问到Azure PaaS SQL Database,应该如何配置?
场景 | 解决方案 | VM访问需要的IP | 缺点 |
场景一: 如果采用PaaS的IP白名单 |
1.在Azure VM上分配公网IP地址 2.在Azure PaaS SQL Database上,把Azure VM的公网IP地址加入到访问的白名单里 |
虚拟机的公网IP | Azure VM需要额外分配IP地址,增加安全隐患 |
场景二: 如果采用Service Endpoint |
1.不需要在Azure VM上分配公网IP地址 2.把Azure PaaS SQL Database加入到VM所在的Virtual Network里,信任一个或者多个subnet发来的流量 |
虚拟机的内网IP |
总体架构图如下:
Service Endpoint通过在虚拟网络Virtual Network上启用subnet或subnet来支持Service Endpoint来设置。设置完毕后,你可以将PaaS资源配置为仅接受来自这些子网的流量。无需执行任何IP 白名单或者NAT。你告诉Azure PaaS资源,哪个VNet或者子网允许流量。启用Service Endpoint后,PaaS资源会看到来自VNet专用IP的流量,而部署来自其公网IP的流量。
使用Service Endpoint的另一个优点是:流量以最佳方式路由到 Azure 资源。即使您的 subnet上有 UDR 将 Internet 流量路由回本地或通过防火墙设备,使用Servcie Endpoint也意味着流量会直接发送到 Azure 资源。
以下服务支持Servcie Endpoint
- Azure Storage
- Azure SQL 数据库
- Azure SQL 数据仓库
- PostgreSQL 的 Azure 数据库
- MySQL 和 MariaDB 的 Azure 数据库
- Azure Cosmos DB
- Azure KeyVault
- Azure Service Bus
- Azure 事件中心
- Azure 数据湖存储(仅第 1 代)
- Azure 应用服务
- Azure 容器注册表
服务终结点确实存在一些限制或缺点。首先,请记住,服务终结点(Service Endpoint)的流量离开虚拟网络,并且 Azure PaaS 资源仍在其公共地址上访问。服务终结点不能由来自本地的流量(通过 VPN 或快速路由)使用,只能用于来自 Azure 虚拟网络的流量。如果要允许,则需要访问本地资源,以便将公共 IP 列入白名单。