安全与性能隔离|学习笔记

本文涉及的产品
访问控制,不限时长
简介: 快速学习安全与性能隔离

开发者学堂课程【分布式系统开发调度技术安全与性能隔离笔记与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/367/detail/4371


安全与性能隔离


内容介绍:

一、capability 访问控制

二、Token 方式

三、单机或集群的安全性

四、虚拟器、Docker、LXC 的计较


一、capability 访问控制

分布式系统当中的安全隔离问题,以及性能隔离问题。

安全隔离是分布式系统中或者是云计算最关心的一个核心问题,用户将数据或者计算放在一个公有云系统上,那它的安全性是能够得到保障的。

以阿里云的实践为例,介绍在分布式当中如何做到安全性,在分布式中,任何两个角色之间是通过 RPC 消息来进行通讯的,如何鉴别对方发送的消息是否是一个合法的消息,通常有两种做法:

一种是 capability 访问控制的方法,它是集群的管理员,在部署集群的时候,按照一定的密钥来生成任意两个角色之间通讯时所需要的加密文本。

通过这种方式任意两个技能之间通讯的时候,对对方送来的豹纹加以验证,如果是不在一个系统内的,或是网络之外发起攻击的消息发送后,由于秘文会验证不过从而这个消息发送就会失败,外面的攻击及恶意的程序就不会扰乱整个应用的运行。

这种方式的问题在于集群管理员在最初部署时,就需明确知道当前集群有哪些用户,有怎样的系统部署。


二、Token 方式

在动态环境下,有时管理员不知未来该集群会运行什么样的作业的,对于这样的场景会采用一种基于动态 Token 方式,即常见的动态口令,由于当集群中运行两个作业时,甚至两个不同的进程时,这两个进程之间通讯是首先经过一个第三方的授权机构来颁发一个动态口令。

当需要通讯的双方都获得这个口令之后,那么在他们的 RPC 的消息里面,会利用这种动态口令进行加密,而且这个口令只有通讯的双方才可以获得,当进程消失之后,口令的生命周期也就结束了。

下图是一个典型的阿里云飞天系统所涉及到的一个网络通讯结构,不同的运行的作业,以及他与分布式存储系统,还有其他的资源调度系统进行通讯时,都会分别基于 Capability 方式或者是 Token 方式来验证任意两个进程之间的通讯编。通过这种方式,可以比较安全的来实现访问控制的隔离。


三、单机或集群的安全性

对于单机集训上,对于一个 Tubo 上,会起多个用户进程,多个进程之间如何安全隔离,可以采用业界最常见的也是最标准做法——沙箱(Sandbox)的机制。

Tubo 在拉起一个进程时,会将这个进程放在一个独立的隔离的沙箱环境当中,只会将这个进程所需要的外部资源暴露给这个进程,而这个沙箱外的资源,对于这个进程而言是看不到的。

通过权限控制,它无法去访问本机或是集训中其它资源,这是通过沙箱机制,Capability 和 Token 方式,这三种技术手段来保证单机以及整个集群每一个角色之间通讯的时候的安全性和合法性.


四、虚拟器、Docker、LXC 的计较

除了安全隔离之外,还需考虑另外一方面的问题,因为该集群是多个业务之间共享,不同的业务对于及其硬件的资源的消耗是不一样的,有些进程需要大块的内存,有些进程却需要大量的 CPU,当这些进程都共享一个物理机器时,如何能够在性能上面做到互相不干扰,即是性能隔离。

将从多个维度来比较一下虚拟机,docker 以及 LXC 三种隔离技术,它们在各个方面的情况。

首先隔离性,虚拟机相当于在 Linux 常用的 KVM 这种虚拟技术,通过虚拟化的技术,例如对于磁盘的访问,对于网络的访问,都是通过虚拟的方式在物理层之间做了一次隔离,而且能够模拟出不同平台的客户端的 os,例如在 Linux 上面运行一个 virtual box,模拟出 Windows 环境,相对来讲,它的隔离性是最好的,因为它完全与将用户进程运行在一个完全虚拟的环境。

而 docker 其底层仍然是基于LXC,但在该基础之上,又作了一层相对薄一点的虚拟化,也是将硬件的访问,例如对磁盘,对于网络进行虚拟化,从而使得客户进程在运行时,依然能可以访问到这些硬件,但是通过 Docker 进行一次代理,所以docker 的隔离性相对 LXC 会有一层虚拟化的在里面,隔离性相对较好,而LXC区底层完全是基于 Linux kernel 的 namespace 来作为隔离机制,所以它的隔离性实际停留在对于库的调用上面,因此从隔离性上,虚拟机是最好的,Docker 介于 LXC和虚拟机之间,而 LXC 则完全是从底层的角度来做一次隔离。

另一方面从资源的配置管理的角度,由于虚拟机是通过硬件虚拟化的方式,可以通过虚拟化的方式来实现,因此在配置一个进程时,可以指定启一台虚拟机给他配置,例如适合的 CPU 或是100G的 memory,由于完全是通过虚拟化出来的,运行其中的客户进程是看不见,所以相对来讲它的资源管理和度量是比较容易的,而docker 完全基于 cgroup,这点和LXC完全是一样的,通过 cgroup 这种子系统的方式来进行 CPU 和 memory 的度量,它的本身由于没有虚拟化,所以它能够暴露给用户进程的,是整个机器的物理资源如CPU可能为23核或是 memory 是100G不能超卖出更多的东西。所以从资源的配置和度量的角度,虚拟机也是更胜一筹的。

对于移动性,移动性是指在一个集群当中,一个用户进程发生切换之后,要去另外一个机机器上运行的时候,运行所依赖的环境如何进行移动。

由于虚拟机是基于镜像文件,Image 以及快照 snapshot 这两种机制的运行,所以用户进程它所运行依赖的环境由 Image决定,而运行时所进行的进度状态信息则会保存在 snapshot 快照里面,所以当虚拟机要被停掉,迁移到另外一台机器上时,用户只要简单的将这个 image 文件以及运行时所产生的 snapshot 切换到另外的机器上,装载进来就可以恢复出之前这个客户进程所运行的状态,从这一点,虚拟机的移动性相对也是比较优秀的,对于最底层的 LXC,由于 LXC 完全是 Linux 内核所支持的一种机制,它是从库的层面做了一层虚拟化,完全依赖于kernel的版本,所以当一个基于LXC的程序,一个用户进程 crash 之后,他需要迁移到另外一台机器时,几乎无法做到,因为该进程运行时,所产生的一些状态信息,没有保存下来,而且要求迁移的目标机器的版本必须跟迁移之前的机器是完全一样,所以它对于 Linux 版本或者内核的版本要求比较高的兼容性,而 docker 则在二者之间做了取舍,他通过 image 的机制,将这个程序应用的程序所需要的环境依赖关系,打包在 image 文件里,当在一个机器上运行一个app进程时,首先会下载这个image,下载之后,作为一个运行环境,当这个app进程需要迁移时,在另外的机器上直接同样的过程下载下这个 image 文件就获得了这个用户的进程 app walker它运行时所需要的依赖环境。

使不同的 walker 在运行时所需要的 image 彼此不一样,image 使用了 Linux 新版本的一种文件格式,叫做 aufs,aufs 是一种新的存储格式,它是一种增量式的,当用户a的进程需要 imageA,当运行用户B的 walker 时,系统会自动发现 imageB 在 imageA 的基础上,只做了微小 改动,例如一个 Linux 内核参数配置,其他的部分大部分都不变,在这种情况下,Docker 系统会做会做一个去重的动作,将imageB 重建在 imageA 上,然后再加上一点增量的修改,这样就会很容易的实现imageB 的功能。

这种方式,非常轻量级的来部署和迁移一个用户的进程,包括 image,但是Docker没有类似于虚拟机这样的切片,或者 snapshot 这种机制,所以当用户的进程迁移之后,用户的进程实际上其运行状态是无法保留的,但是其依赖环境很容易迁移过去。从移动性角度来比较和剖析了一下 docker、LXC以及 vm之 间的性能。

从安全性的角度,首先虚拟机,由于虚拟机是通过虚拟空间的方式,把硬件和对软件的访问全部做了一个虚拟化,运行其中的购物进程,看不见宿主操作系统的情况,因此它的安全性是非常高的。

LXC是基于内核 namespace 这种方式来做的安全性,但假设客户程序利用 colonel的一些漏洞,溢出这种漏洞,利用这一漏洞获得了提权的入侵的动作,将他的进程提权成 rude 权限,那依然可以对系统造成一定的危害,而 docker 系统它和LXC类似,也是基于 namespace 的机制来做到这种安全性能,所以它的安全性和LXC是在一个层次级别,略比虚拟机的差些。

以上就是从这四个维度,对虚拟机技术,Docker 技术以及 LXC 的技术进行对比,在不同的应用场景,实际上有不同的取舍,虚拟机虽然隔离性,移动性等方面也比较多的优势,但它启停的开销比较大,而且进程启动之后,占用内存,系统资源比较严重,所以在对于可信区内部的范围,可以采用 docker 甚至 LXC 的技术来实现这种隔离性,因为它比较轻量级,以上是从安全性能隔离角度分析,在分布式系统中常见的技术,包括沙箱和 Docker 技术。

相关文章
|
26天前
|
存储 监控 Linux
充分利用服务器的磁盘资源,提高系统的稳定性和可维护性
充分利用服务器的磁盘资源,提高系统的稳定性和可维护性
32 0
|
6月前
|
测试技术 容器
隔离测试
隔离测试
72 6
|
存储 弹性计算 数据中心
倚天710平台稳定性--内存隔离降级运行
本文介绍利用倚天710平台的RAS特性,实现OS降级运行,提高系统稳定性
1624 0
倚天710平台稳定性--内存隔离降级运行
|
安全 芯片
隔离那些事
隔离那些事
100 0
|
负载均衡 Linux API
CPU 隔离:实践
SUSE Labs 团队探索了 Kernel CPU 隔离及其核心组件之一:Full Dynticks(或 Nohz Full),并撰写了本系列文章。
748 0
|
Kubernetes Java jenkins
K8S环境的Jenkin性能问题处理
通过helm部署的jenkins,在实际使用过程中时常出现响应变慢的问题,本文回顾了问题的分析和处理过程,希望能给您一些参考
352 1
K8S环境的Jenkin性能问题处理
|
SQL OLAP OLTP
为什么资源隔离对HTAP至关重要?
此前,通过《向量化引擎对HTAP的价值与技术思考》一文,我们分享了 OceanBase 怎样看待向量化引擎技术,并介绍了用它解决复杂查询场景的技术思路。
220 0
|
资源调度 安全 Linux
安全与性能隔离|学习笔记
快速学习安全与性能隔离
|
缓存 监控 Linux
CPU 隔离:管理和权衡
SUSE Labs 团队探索了 Kernel CPU 隔离及其核心组件之一:Full Dynticks(或 Nohz Full),并撰写了本系列文章..
356 0
CPU 隔离:管理和权衡
|
缓存 Linux 测试技术
CPU 隔离:简介
SUSE Labs 团队探索了 Kernel CPU 隔离及其核心组件之一:Full Dynticks(或 Nohz Full),并撰写了本系列文章。
456 0
CPU 隔离:简介