1引言

    随着业务的持续发展,各行业开始逐渐将业务系统通过云计算平台进行整合,采用部分云化的架构也成为业内主流,云计算已经经历了十多年的发展历程,广电、政府、医疗、教育各行各业也开始将传统的自建IT模式转为使用公有云方式。甚至出于可控性和私密性的考虑,更多的大型企业、运营商、政府也已经投入自建私有云平台。不管是公有云还是私有云,不同企业或者部门都会以租户形式存在于云上,出于安全考虑,他们都可以使用VPC技术进行网络上安全隔离,VPC即Virtual Private Cloud,VPC技术可以让租户在云内拥有一个与其他租户之间逻辑隔离的区域,并在这个区域内使用各种云资源,租户可以完全自由掌控云上虚拟网络,但这种隔离只是为租户提供一个私有空间。

    凡事没有绝对安全,基于VPC内云主机之间安全隔离也值得重视,其中需要考虑的问题很多。首先VPC内相同业务的云主机是否会落在同一台宿主机上,如果落在同一台宿主机上会带来什么样的风险。当同一台宿主机上的云主机较多的时候,云主机之间CPU、内存、磁盘IO高负载使用是否会互相影响,VPC内部的网络安全如何保障,如何避免单台云主机被攻击带来的全网沦陷。这些都是本文将探讨的问题。

    KVM是目前各大云平台使用最广泛的虚拟化技术,Openstack作为开源云计算管理平台架构的典范,本文将以KVM虚拟化技术和Openstack云解决方案为例,分析基于VPC内的云主机安全隔离技术。

2云主机安全隔离技术分析

2.1处理器及内存性能隔离

    当一个租户上云的时候,云主机会被调度到哪个计算节点由云平台的调度机制来决定,当VPC内云主机数量远远大于云平台计算节点数量,必然会导致部分云主机处于同一台计算节点。如果该租户云主机数量较少,调度策略不严谨也有可能导致部分云主机处于同一台计算节点。最好的处理方式是尽可能让相同业务的云主机或者说挂在同一个负载均衡器下的云主机落在不同的计算节点,如果条件允许最好是落在不同的机柜,不同的机房,规避单个计算节点故障带来相同业务多台云主机同时迁移的风险。以OpenStack为例,nova模块专门负责管理云主机,nova又由多个子服务组成,负责云主机调度的是nova-scheduler,nova-scheduler帮助选择在最合适的计算节点上启用云主机实例。调度过程分为两步如图1所示。第一步是通过过滤器筛选可用的计算节点,第二步是通过weight计算在权重最高的计算节点上创建实例。就过滤器而言,OpenStack有自己默认的过滤机制,我们可以根据自己的需求进行修改。默认情况下,过滤器会按照默认机制选出合适的计算节点,选举顺序如下:过滤曾创建失败的报错主机,尽可能分配不同可用区,过滤内存、磁盘、CPU不够用节点,过滤nova-compute服务异常节点,尽可能分散实例在不同节点上。最后再根据内存、CPU等计算节点容量评估权重得分,根据权重将云主机调度至合适的计算节点。如果需要忽略其他因素的影响直接强制分散云主机到不同计算节点可以直接使用默认的ServerGroupAntiAffinityFilter过滤器,如果想避免2种业务相同的云主机落在一台计算节点上还可以使用DifferentHostFilter过滤器指定不在某些实例所在的节点上创建实例,当然还可以借助自定义过滤器进行更高级的过滤,例如机柜感知等。当然也可以在云主机发放以后,使用热迁移的方式进行调度。

图1 nova-scheduler的调度机制

    当VPC内云主机数量足够多,甚至很多私有云平台实际上总共就只配置了一个VPC的时候,同一台计算节点某一云主机CPU和内存高负载使用是否会对该计算节点其他云主机性能带来影响,实际上这个问题也不局限于VPC内。CPU和内存的超售复用必然会对云主机性能带来一定的影响,尤其是当一台云主机CPU和内存高负载使用的时候将严重影响同一宿主机其他云主机的性能。那么在不配置超售复用的情况下,CPU和内存的隔离优化需要怎么实现,来保证业务稳定运行。默认情况下云主机只能使用同一颗物理CPU内部的逻辑核。目前主流的Xeon处理器能提供14个甚至更多的Core,并借助超线程技术可以提供28个逻辑核,主流云厂商和公有云服务提供商都是以一个vCPU即一个超线程的形式提供计算服务。超线程技术可以提升物理机的处理性能,还能为云计算提供更多的vCPU数量,但是当超线程互相竞争时,物理核整体计算能力会严重下降。当租户在申请一台云主机的时候,vCPU可能会落在不同的Core上,如图2所示。此时由于一个Core有2个超线程,另一个超线程将被其他云主机使用,也就是说2个云主机可能同时使用同一个Core。那么此时该租户云主机将会受到该计算节点其他云主机负载水平影响,可以是VPC内其他云主机也可以是其他租户的云主机。

图2 云主机的vCPU超线程分布

    要解决这个问题,让计算性能更稳定,可以使用vCPU绑定技术,让同一台云主机的vCPU分配到同一个Core上,如图3所示。利用绑定技术不但可以平均分配同一台宿主机不同CPU的利用率,还可以为重要业务的云主机分配独立的Core来隔离其他云主机带来的干扰。


图3 vCPU绑定

    接下去就是内存的隔离性及优化,云主机通过内存虚拟化来实现不同虚拟机之间的内存隔离。内存虚拟化技术在客户机已有地址映射(虚拟地址和机器地址)的基础上,引入一层新的地址——“物理地址”。在虚拟化场景下,客户机OS将“虚拟地址”映射为“物理地址”,Hypervisor负责将客户机的“物理地址”映射成“机器地址”,再交由物理处理器来执行。很多云服务商为了节省内存成本,会使用一些内存复用技术,比如内存合并、内存气泡等。内存复用在业务压力大的时候会加重云主机CPU消耗降低云主机性能,所以内存复用需要根据不同的应用场景去使用,比如桌面云场景下可以使用内存合并复用技术如图4所示,因为大量桌面云主机的操作系统和软件可能都是一样的。业务峰谷值较大且变化时间比较固定的场景可以使用内存气泡技术,动态回收云主机暂时不用的物理内存,分配给需要复用内存的虚拟机。


图4 Kerel SamePage Merging内存合并

综上所述,在生产环境中遇到CPU压力比较高的情况,CPU的绑定是一个有效的技术解决手段,但是内存复用技术建议慎用。且服务器内存相对比较便宜,建议增加宿主机的内存配置保证云主机稳定运行。

2.3磁盘IO性能隔离

    云主机后端存储技术实现方式分为两种,一种是集中式存储,一种是分布式存储。现在基于分布式存储架构的云计算平台已经成为主流。磁盘IO作为云计算集群瓶颈之一,云主机磁盘IO高负载对其他云主机的影响也不局限于VPC内部。云计算集群的硬盘IO被集群中所有云主机共享,而且这种共享在没有被限制隔离的情况下,所有云主机都会争抢这个资源,当集群中一台云主机因为计算机病毒或者业务因素磁盘IO飙高的时候,会造成其他云主机IOWAIT跟着飙高,出现这种情况,对于IO比较敏感的业务是灾难性的。对于这种情况,首先需要考虑配置SSD硬盘或高性能硬盘来创建高性能的存储资源池供这些云主机使用。除此以外,需要通过限制云主机的磁盘IO速率来隔离和优化。

    Cinder是Openstack中必不可少的组建之一,作用于云主机和存储设备之间,管理后端存储并为用户提供统一的存储接口。Cinder可以添加磁盘IO读写的QoS,支持front-end端口和back-end端设置QoS, 其中 front-end 表示 hypervisor 端,也就是在宿主机上设置虚拟机的 QoS。back-end 端指在存储设备上设置 QoS,该功能需要存储设备的支持。创建好QoS策略以后就可以和数据卷进行绑定,实现磁盘IO限制的效果。如图5所示:


图5 Cinder磁盘IO QoS创建

    在业务上对于IO密集的云主机,我们通常需要采用高性能的存储集群来满足业务的需求,对于个别云主机因为非关键业务或者安全问题存在高磁盘IO的情况,可以使用磁盘IO限制的方式来处理。

2.4虚拟私有云内部网络安全

     云主机VPC之间本身就具备网络隔离性,那么当一个租户上云以后如何保证VPC内云主机之间的网络安全呢?很多用户会在一个VPC内部署上百个云主机,有数据库、WEB等等各种类型的主机,还会包含各种不同的业务系统。当对外开放的云主机因为安全漏洞等因素被入侵以后便会对整个VPC带来安全威胁。比如前不久永恒之蓝勒索病毒就对很多云租户带来严重的灾难,甚至有的用户感染主机数量多达上百台。在传统网络内部ARP欺骗中间人攻击、DHCP服务端欺骗等也是巨大的攻击方式,在云环境下也同样值得探讨。


图6 VPC内安全组

    当一个租户在VPC内部署了不同业务的云主机,想在内部建立完善的访问控制隔离机制目前最简单高效的方式就是利用安全组的方式。可以利用安全组和安全策略模拟传统网络体系中的各个层次,建立多层访问控制体系,按需对业务的双向访问及端口限制进行访问控制,达到VPC内网络整体安全,如图6
所示。

    安全组可以有效的隔离内部云主机实现业务单双向访问控制,但是不能做更高级的安全措施,例如:东西向入侵检测、内部安全防御等。业内有些云计算厂商还推出了东西向安全服务模型,可以利用SDN控制器通过Openflow对接云管平台和网络设备,实现云主机之间流量转发的引流,让安全设备参与其中,提升东西向流量的安全性。

    不同的云平台有不一样的架构,以Openstack为例,存在着一个VPC内很多云主机同一个广播域的情况,当然根据不同的部门或者业务添加相应的子网进行广播域隔离是非常好的习惯,但是如果在一个二层网络中创建了大量云主机实例,二层网络中就需要考虑比较多的安全问题了,如DHCP Server Spoofing和ARP Spoofing等,在Openstack中默认情况下基于桥接接口iptables会对云主机发出的DHCP报文进行DROP过滤,避免DHCP Server Spoofing发生。对于ARP欺骗,如果攻击者控制了其中一台云主机,可以通过伪造IP地址或MAC地址发起一系列嗅探攻击。Openstack在二层的安全隔离可以使用ebtables来实现, ebtables可以实现数据链路层数据包的过滤,数据截获点比iptables更靠前。在Openstack中如果使用LinuxBridge环境,通过libvirt的nwfilter来设置一些ebtables的规则,给虚拟机增加了一道屏障。以确认通过的数据包中arp-ip-src、arp-mac-src、ip-src等与实际主机一致才可以被允许,并且丢弃不匹配的数据包,来实现VPC内的二层安全,对于OVS环境则需要OVS版本支持匹配ARP数据包头。实际上Openstack中的“prevent_arp_spoofing”配置项默认为开启状态,本身就具备mac和arp防欺骗功能。

    对外发布的互联网业务,需要做好漏洞修复和渗透防范等工作,VPC内的网络安全风险也不容小觑,建立完善的内部审计系统,依靠安全组做好业务区域分离,做好后端数据保护是目前最简单也最有效的网络安全保护措施。

3结束语

    云计算在各行各业得到了大规模的运用,得到了世界各国的广泛重视,当前是一个信息化的时代。新的环境拥有新的挑战,在企业上云过程中,企业需重视信息安全,做好基于云计算的网络安全、系统安全和数据安全。

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!