原创作者 彭昔敏
1. 前言
1.1 VPC是用户云上的“数据中心”
经典网络是阿里云最早的网络模式,早期选择经典网络也是在有限的研发资源前提下,采用当时相对成熟的技术,去满足快速增长的业务诉求。随着业务发展,经典网络也暴露了很多问题,比如安全隔离、弹性等,左耳朵耗子在2017年的博客《关于阿里云经典网络的问题》中,围绕一个曾在2013年阿里就职时发现的安全问题展开,揭示了经典网络内网全互通的潜在安全隐患。
文章指出,即便用户通过安全组进行隔离,仍无法完全避免风险,因为经典网络缺乏有效的隔离机制,所有云服务资源本质上在一个共享的网络环境中操作,这可能导致数据泄露、恶意攻击乃至服务中断等严重安全事件,当时这篇博客在网上引起非常广泛的讨论,而解决方案就是使用更为安全和成熟的VPC。
表1 VPC和经典网络的优势对比
阿里云 VPC(Virtual Private Cloud,专有网络)诞生于2014年,为用户提供云上安全、隔离的私有网络。用户可以完全掌控自己的VPC,包括选择IP地址范围、创建子网、配置路由和网关、设定安全组/ACL 规则等,用户可以在 VPC 中使用阿里云产品如云服务器ECS、云数据库RDS 和负载均衡NLB 等,VPC 为用户提供在云上逻辑隔离的网络环境,以便部署和访问阿里云云服务。
1.2 VPC是用户上云第一步
再来看一些例子,小王是一个大学生,了解到阿里云学生专享免费云服务器活动,完成学生认证之后,即领取到ECS免费权益,然后呢?创建VPC->创建vSwitch->创建ECS;小张是一个独立软件开发者,需要一个低成本、快速的方法来构建web应用,小张选择使用负载均衡,然后呢?创建VPC->创建vSwitch->创建NLB->创建ECS;小赵是一家移动应用初创公司的开发人员,选择使用云上托管的数据库服务来存储用户信息、用户生成内容和应用状态,然后呢?创建VPC->创建vSwitch->创建DB,VPC就是用户云上的“数据中心”,先创建了VPC,继而创建各类云服务。发展至今,VPC覆盖了几乎全量阿里云用户,在这里我说一句"VPC是上云必选项",相信各位看官不会反驳,通过上述例子,VPC不仅仅是用户上云必选项,更是“用户上云第一步”。
1.3 深度用云 VPC 必须先行
今天,我们来讨论VPC先行,如何看待这个必要性和急迫性?我们来看几个案例
表2 VPC使用不当案例
通过这些真实的客户案例,我们看到了前期VPC使用不当,随着业务发展,给用户带来的成本和代价是“昂贵”的,如果给用户一个选择题:是选择事后的“开飞机换引擎” 还是 选择 事前 规划和构建可扩展的网络,平滑的满足业务增长诉求,从代价角度来看,我相信用户会选择事前,VPC作为用户上云第一步,更要承担&做好这个“布道者”角色。
接下来的章节,首先带领大家认识VPC,然后,以一次典型的VPC规划过程,给出VPC的最佳实践,期望各位看官通过这些最佳实践,能够助力用户构建出满足业务诉求的正确用云姿势,话不多说,进入到VPC产品介绍章节。
2. 初识VPC
在介绍VPC产品时,我通常会给出一个对比:“很多人眼中的VPC” vs “实际上的VPC”。
2.1 很多人眼中的VPC
VPC=vSwitch+私网网段 +vRouter,当然这些确实也是构成VPC基础且重要的组件,私网网段划分合理为未来网络扩展、网络互联提供基础,vSwitch划分合理为服务容灾做好铺垫。
图1 很多人眼中的VPC
2.2 实际上的VPC
为了讲清楚VPC构成,需要两级分类来进行阐述,如此丰富且复杂的特性是为了满足用户在组网/安全/运维等维度的诉求。
图2 实际上的VPC
表3 VPC产品特性大表
抛出这样的对比,是为了接下来“一次典型的VPC规划过程”做铺垫,VPC的规划不仅仅包括地址规划和子网划分,还需要考虑组网、安全、高可用等,待娓娓道来。
3. 一次典型的VPC规划过程
图3 一次典型的VPC规划过程
3.1 选择地域和可用区
地域指数据中心所在的地理区域,通常按照数据中心所在的城市划分。例如,华北1(青岛)地域表示数据中心所在的城市是青岛。而可用区是指在同一地域内,电力和网络互相独立的物理区域。例如,华北1(青岛)地域支持2个可用区,包括青岛 可用区B和青岛 可用区C。同一可用区内实例之间的网络延时更小,其用户访问速度更快。
如何选择地域和可用区?建议从如下几个维度考虑
表4 用户选择地域和可用区的考虑因素
阿里云的VPC是地域粒度的,如果用户在多个地域部署业务,那至少在每个地域要创建一个VPC,若业务之间存在互联诉求,还需要考虑使用私网互访类产品实现VPC互访。VPC中的vSwitch是可用区粒度的,有如下注意事项:
- 部分阿里云地域拥有较多的可用区数量,例如北京地域有12个可用区,上海地域有11个可用区,杭州地域有8个可用区,用户在使用这些地域的时候,会遇到由于云服务库存因素导致需要选择多个可用区的情况,多个可用区意味着VPC内的多个vSwitch划分,用户需要提前预留足够的地址段,考虑可能产生可用区绕行带来的延时增加;
- 部分本地云地域仅提供1个可用区,例如南京地域,若客户有同城容灾需求,注意避开这些地域;
- 建议从稳定性/延时角度考虑,尽量避让绕行多可用区的业务流程设计。
3.2 确定账号和VPC的关系
这里的账号是指阿里云账号。有很多用户选择完地域之后,就开始着手创建VPC,也许目前业务规模确实不需要考虑账号规划,通过单账号或主子账户即可实现用户分权及资源统一管理,但是,随着业务规模扩大,出现了分账、业务环境强安全隔离诉求时,不免要考虑账号拆分了,不妨提前看一看来自Landing Zone推荐的多账号最佳实践。
图5 基于多账号的企业上云框架
总结一下账号划分的考虑因素,如下:
- 按业务单位或项目划分:为不同的业务部门创建独立的账号,以便于对资源、成本和权限进行隔离和管理;对于具有独特资源和权限需求的大型项目或应用程序,考虑为它们创建单独的账号。
- 按环境划分:创建分离的账号以隔离不同的环境,例如开发、测试、预生产和生产环境,减少环境之间相互影响的风险。
- 安全和合规要求:为满足特定的安全或合规要求,可能需要将敏感数据或工作负载隔离在一个单独的账号中。
- 成本管理:通过在不同账号中隔离资源,可以简化成本跟踪和计费管理。
- 集中化的日志管理和运维:创建一个专门的账号用于安全审计、日志记录和监控活动,集中存储和分析所有账号的日志信息。
为什么花了一些篇幅去讲账号划分?因为账号和VPC也有对应关系。
在共享VPC特性发布之前,账号和VPC 1:1对应,这意味着VPC数量随着账号数量上升所带来的网络复杂度上升,共享VPC基于资源共享机制,将VPC中vSwitch共享给其他账号。通过一个客户的典型最佳实践简单介绍一下什么是共享VPC,客户的网络运维人员管理着Infra账号,负责网络规划,包括创建VPC、访问互联网、连接IDC、跨VPC互联等,通过将vSwitch共享给业务账号,业务账号即拥有在该vSwitch中创建云服务(例如ECS/RDS/SLB等)的权限。业务账号无需关注网络规划,专注于业务创新即可。
图6 共享VPC
共享VPC解耦了VPC和账号,降低了多账号场景下的网络运维复杂度,但,并不意味着我们建议多账号场景必须使用共享VPC。到底怎么选?单个地域内,是选择多账号共享VPC,还是per 账号独立VPC?首先,它们不是互斥的,应该根据业务诉求去选择合适的方案,当然也可以2者结合使用,其次,如何选择请参考如下对比维度,存在强安全隔离诉求的场景建议独立VPC,例如生产环境和测试环境;重点项目有强稳定性诉求建议独立VPC,请考虑和小项目进行VPC拆分,隔离故障域。选择使用共享VPC一定要避免创建一个“巨大”的VPC,未来若有安全隔离、稳定性诉求,需要拆分VPC时,重建的代价也是极大的。
表5 多账号共享VPC和per账号独立VPC优劣势对比
3.3 规划网段
创建VPC时,在选完地域之后,紧接着就要选择网段或CIDR,网段规划不当会导致极高的重建成本,在前言的客户案例中也有体现。具体设置VPC网段/vSwitch网段的限制可参考:网段和IP地址,有如下规划建议:
- IPv4地址由用户自定义,推荐在VPC中使用RFC 1918定义的私有IPv4地址空间;IPv6地址由阿里云分配;
- 考虑到未来扩展,选择一个足够大的CIDR块,以便为未来可能需要的任何vSwitch、实例或新服务留出足够的空间,IPv4地址空间推荐使用/16掩码,若VPC容量需要扩容,有2种方式:为VPC增加附加网段(推荐使用)和VPC网段扩容;
- 考虑业务规划:若业务场景需要拆分为多个VPC,例如生产VPC、测试VPC,且后续存在互联诉求,避免地址重叠;
- 避免冲突:考虑到现有网络互联诉求(和IDC互联/跨VPC互联/多云互联),避免地址重叠;
- 规划子网:考虑到容灾诉求,需要多可用区规划vSwitch,考虑到安全诉求,需要按业务/项目/能否访问互联网等维度划分vSwitch,VPC需要预留足够的地址空间,用于vSwitch规划。
在进行复杂网络管理时,除了以上建议,用户更期望能有这样的工具去提升规划效率,VPC IPAM(IP address Managerment)提供了地址管理和规划功能,IPAM诞生的背后是云上用户网络规划最佳实践的积累,借助IPAM我们一起看看网段该如何划分。IPAM功能文档可以参考: IPAM地址管理。
图7 基于IPAM的网段规划
网段规划是自顶而下的。
- 首先要进行“网络地址作用范围”划分,划分的原则在于因安全/合规等因素无网络打通诉求。解释一下“网络范围”,窄义的理解是由一个网络地址和一个子网掩码共同定义的一个范围,广义的理解是要考虑“网络范围”对应的业务场景,举个例子,私网和互联网属于2个典型的“网络范围”。因为没有网络打通诉求,网络范围之间允许地址重叠(这也是为什么VPC允许公网私用),所以,在一个网络范围内进行接下来的网段规划。地址作用范围在客户侧常用的场景可以用于大规模企业内部不同子公司的网络规划,不同投后公司的网络规划,需要有独立隔离网络域等。
- 定义一个地址池的层级结构,层级结构的叶子结点是地址分配的最终对象,层级结构划分逻辑本质上是叶子结点的划分逻辑,以VPC网段规划为例,上面我们谈了那么多地域、账号的规划逻辑,把这个逻辑应用到地址池,如上图,按业务、环境、地域划分地址池。
- 定义地址分配规则,例如掩码长度不允许小于16、不允许冲突等,把上面的网段规划建议转换为这里的规则。
自顶而下的层级结构还有一个非常大的优势:网络互访时,路由/安全组的规则中会引用网段,层级结构提供了极大的易用性改进,通过按照业务诉求划分网段,在路由/安全规则中可以引用完整的大段网段,而非无法预期的锁碎网段。
最后啰嗦一句,在进行网段规划时,遵循这些最佳实践可以确保网络的灵活和可扩展。最重要的是,规划应当基于业务需求和未来的增长预期,以避免不必要的网络重构。
3.4 考虑安全隔离
在选择可用区、划分账号、规划网段都提到了安全隔离诉求,隔离是为了安全,隔离也有多层概念,业务隔离、资源隔离、网络隔离,账号拆分即实现了资源隔离,通过划分VPC实现网络隔离,资源隔离和网络隔离都是实现业务隔离的方式。用户进行组网时,会涉及到如下网络结构:VPC、跨VPC互访(同地域/跨地域)、VPC和IDC互访、互联网Egress方向、互联网Ingress方向,站在VPC视角,结合这些网络结构,有如下安全分层以及需要考虑安全隔离的场景
表7 基于VPC视角的网络安全分层
3.4.1 如何实现更加安全的vSwitch to vSwitch互访
云上最优的网络隔离方案一定是VPC,如果业务有强隔离诉求,请选择放入到不同的VPC中。同时,如果选择把多个业务放入同一个VPC中,建议通过vSwitch划分,因为VPC提供了丰富的安全手段,用于vSwitch间的安全防护,以一个简单的ECS互访为例:
图8 跨vSwitch的ECS互访场景下可应用的安全隔离特性
很多用户经常会问,“选择使用安全组还是NACL?”安全组和NACL不冲突,可结合使用。假设通过vSwitch进行业务划分,2个vSwitch之间限制访问范围和访问方向,通过NACL即可满足;分布在多个vSwitch中的2组ECS要求限制访问,同时每组ECS内能够互访,此时安全组是比较合适的选择,上述需求同时存在时,即可结合安全组和NACL同时进行网络安全隔离。
3.4.2 如何实现云服务的安全访问
这里先细化一下为什么存在安全访问云服务的诉求,来看几个场景:
场景一:搭建web服务,为了确保服务层和数据库层安全,避免数据暴露到公网或受到来自互联网的安全攻击,实现安全访问ECS/DB,首先,需要在网络上进行公私网隔离(这里call back 4.1节,下图通过vSwitch划分,将面向公网的LB层和面向私网的服务层/数据库层进行隔离,为后续应用安全特性打好基础),其次,进一步通过安全组/网络ACL等安全特性实现有限访问,仅允许来自x.x.x.x网段的访问,或仅允许访问TCP 80端口等。
图9 云上搭建web服务
场景二:用户关键数据存储在OSS中,需针对OSS设置严格的安全访问策略,确保数据不会泄漏。如下图所示,用户的AK/SK非预期泄漏,若未设置合适的OSS安全访问策略,侵入者可成功的将用户或企业数据盗取,从而发生了安全事件。
图10 云上OSS数据泄漏场景
我们常说“安全无小事”,通过以上2个场景,相信已经了解到安全访问云服务的必要性。根据云服务的网络访问边界,可以将云服务分为实例型和服务型,定义如下:实例型云服务是“放”在VPC中,实例网络入口与实例强相关,并且遵循单一出口原则,服务型云服务是“连”到VPC中,用户访问服务的网络入口与服务本身解耦。有一些简单的判断规则:
- 判断云服务属于什么类型:如果创建云服务的时候,需要选择VPC/vSwitch,那这个云服务就是实例型,例如ECS/RDS,如OSS、SLS在创建bucket或logstore时,无需选择VPC/vSwitch,它们就是服务型。
- 判断服务用什么样的接入方式,进而按需使用不同的安全防护特性
表6 服务型云服务接入方式对比
VPC终端节点策略如何解决场景二的安全风险呢,来看一个典型的策略示例,通过如下策略可限制本VPC仅能够访问examplebucket,无法访问侵入者的bucket,搭配资源侧的bucket策略,限制examplebucket只能接受来自本VPC的访问,在网络/资源纬度加固了云服务的安全访问。
图11 一个典型的终端节点策略
- 应用安全防护特性的注意事项:
- 注意安全组/NACL/路由的容量上限
- 若想应用NACL,需做好vSwitch划分,NACL是无状态规则,需同时配置出入规则
3.4.3 可观测能力的重要性
事前,进行有效的安全隔离设计,应用丰富的安全防护特性,事后,即发生了安全风险之后,能够快速定位出风险原因和风险点同样非常重要。VPC提供2种可观测能力:借助流日志,用户可以收集、存储和分析网络流日志。流日志中捕获的信息包括关于允许和拒绝的流量、源和目标 IP 地址、端口、协议编号、数据包和字节数以及操作(接受或拒绝)的信息,使用此功能对连接和安全问题进行故障排除,并确保网络访问规则按预期工作。借助流量镜像,可以分析实际流量内容(包括负载),从而深入了解网络流量。它的使用案例包括分析实际数据包以确定性能问题的根本原因、对复杂的网络攻击进行逆向工程以及检测并阻止内部滥用或受损的工作负载。篇幅有限,可移步官方文档了解应用最佳实践,PS:使用时需要注意特性使用限制。
图12 VPC可观测特性
以上,花了一些篇幅,介绍了不同分层VPC提供不同的安全策略,用户在设计网络架构和安全隔离策略时,建议应用最小权限原则,限制不必要的访问。
3.5 考虑容灾
以在云上搭建web服务为例,从单可用区部署演进到同城双中心的高可用容灾架构,首先,在VPC的网络架构上,需要在另一个可用区规划相应的vSwitch,用于部署云服务;其次,需要根据云服务所提供高可用能力选择合适的vSwitch进行部署,web服务所选用的云服务类型恰好代表了典型的容灾类型:NLB提供负载均衡能力,支持多可用区 active-active的容灾能力;ECS仅支持单可用区,多可用区容灾依赖NLB;DB提供多可用区主-备容灾能力;DNS提供多种流量负载均衡策略,不仅仅支持同地域多可用区,还支持跨地域,DNS服务在VPC网络之外,这里不做过多介绍。
图13 云上web服务架构从单可用区部署演进
3.6 访问互联网
创建VPC后,完成VPC内的vSwitch根据容灾/安全进行划分,此时业务出现了访问互联网的需求,例如,通过访问互联网下载镜像,或服务搭建完毕,期望对互联网用户提供访问,如何连接互联网?如何确保连接互联网的安全?继续往下看。
3.6.1 VPC连接互联网的方式
首先,来看一些典型的连接互联网的场景
表7 典型的连接互联网场景
那在上述场景中,VPC提供了什么样的连接能力呢?
(1)路由
以ECS访问互联网为例,VPC提供2种访问互联网的方式。方式一采用隐式互联网关的方式,因此,用户使用体感是无论VPC路由表如何配置,访问互联网不受影响,也正是因为这种实现方式,若同一个ECS,存在访问IDC或其他VPC的诉求,需配合VPC用户网段实现。方式二采用显式互联网网关的方式,即IPv4网关和IPv6网关,ECS访问互联网需要显式在其关联的vSwitch路由表中配置指向互联网网关的路由,也正是因为这种实现方式,可以通过限制路由或互联网网关创建权限实现互联网访问的统一控制,注意使用限制。
图14 VPC提供2种访问互联网的方式
(2)可观测
不论是ECS/NAT/NLB/ALB,都支持VPC流日志采集,针对互联网访问的场景,通过采集的日志,可满足合规和运维诉求,最佳实践参考👈。
3.6.2互联网访问的安全隔离设计建议
建议一:通过vSwitch划分实现公私网分离,划分原则需要考虑应用安全和路由相关特性,避免私网直接暴露在互联网。
以上,依赖VPC的子网路由特性。
建议二:在互联网出口考虑设定仅出规则,禁止来自互联网的主动访问
以上,依赖NAT网关的SNAT规则特性和IPv6网关的仅主动出规则特性。
建议三:建议通过VPC关联IPv4/IPv6网关来启用互联网访问能力,并配合子网路由/网关路由,满足用户期望通过防火墙进行3-7层防护的诉求。
安全团队出于安全合规要求,期望网络团队能够集中控制企业网络和互联网连接关系,而云上网络唯一提供互联网访问集中控制的能力就是IPv4网关/IPv6网关,以三方防火墙为例,配合VPC子网路由/网关路由,即可实现在业务流程中串联防火墙用于安全防护。
3.7 VPC/IDC互访
随着业务快速发展,基于账号、地域、VPC划分原则,出现了VPC互访、VPC和IDC互访的场景需求,为了满足用户诉求,云网络发布了VPC对等连接、高速通道、VPN网关、云企业网、转发路由器等产品,这里值得另一篇文章去讲清楚设计原则和注意事项。
4. 尾声
VPC提供的自定义和云上隔离环境是构建安全、可靠和可扩展云上基础设施的基础,本文通过一个典型的VPC规划过程,从明确业务需求和合规性要求开始,到设计一个灵活且安全高可用的网络拓扑结构,每一步都至关重要,确保VPC不仅满足当前的业务需求,而且可以适应未来的变化和扩展。VPC的成功规划和部署不只是关乎网络的设计,它确保用户的云基础设施能够提供稳定服务的核心要素之一。因此,VPC虽是免费的,但是,如果不重视,不恰当的设计和管理可能会造成隐性成本的积累,甚至进一步引发无法预计的商业损失,这也是为什么本文可以大胆地说 用对VPC很重要的理由。
附,文中对应链接:
[1]使用限制:
https://www.alibabacloud.com/help/zh/vpc/user-guide/overview-1
[2]网段和IP地址:
https://help.aliyun.com/zh/vpc/user-guide/overview-of-proprietary-networks-and-switches
[3]VPC网段扩容:
https://help.aliyun.com/zh/vpc/developer-reference/api-vpc-2016-04-28-modifyvpcattribute
[4]IPAM地址管理:
https://help.aliyun.com/zh/vpc/user-guide/ip-address-management-ipam/
[5]使用限制:
https://help.aliyun.com/zh/vpc/user-guide/operation-maintenance-and-monitoring/
[6]使用限制:
https://help.aliyun.com/zh/vpc/user-guide/ipv4-gateway-overview
[7]最佳实践参考:
[8]IPv6网关官方文档:
https://help.aliyun.com/zh/ipv6-gateway/product-overview/what-is-an-ipv6-gateway