下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

保障虚拟化容器在应用环境中的平安

作者:课课家教育     来源: http://www.kokojia.com点击数:823发布时间: 2017-10-22 14:00:15

标签: 容器虚拟化容器虚拟机

  欢迎各位阅读本篇文章,本篇文章讲述了保障虚拟化容器在应用环境中的平安,课课家教育平台提醒各位:本篇文章纯干货~因此大家一定要认真阅读本篇文章哦!

保障虚拟化容器在应用环境中的平安_容器_虚拟化容器_虚拟机_课课家教育

  应用开发中迅速增长的虚拟化容器方式巩固加深了其在生产环境IT管理者心目中的地位。尽管看起来与虚拟机相似,但两者相比还是有一些核心差异,这些差异促使IT部门重新审视已有的安全策略。

  越来越多的IT部门正在被迫放弃已有的全栈虚拟机应用部署方式。应用运行在大量进程上,这些进程需要灵活可控。而在虚拟机中,如果进程发生变化,整个虚拟机的运行需要更改。

  虚拟机通常基于传统的单片应用模型,而容器则能对复合应用模型提供更好的支持。

  虚拟机具备了运行一个应用程序所需要的全部资源,包括应用程序、数据库、数据分析、虚拟化的硬件资源、BIOS以及应用正常工作所需要的所有服务。因此,每个虚拟机都是一个完整的系统,而虚拟机的安全策略在本质上与一个物理机系统完全相同。由于虚拟机是一个全栈系统,它的缺点是每当启动一台虚拟机,意味着启动BIOS,接着启动操作系统,然后启动余下的所有相关应用软件。虽然这个启动过程基于一系列虚拟化资源,比物理机启动快,但是并不足以快到能瞬时启动,除非使用事先预置好的热虚拟镜像(虚拟机快照),但是这种启动方式需要使用额外的存储资源,导致资源浪费。虚拟化容器则没有这些方面的问题。

容器更多依赖于容器外部,而不是容器本身。

  容器更多依赖于容器外部,而不是容器本身。尽管也是从物理层创建的抽象实例,但虚拟化容器以动态的方式共享大部分资源,每个容器通过底层平台访问大部分的设备。容器化概念更接近于应用程序的使用方式,它假设BIOS和系统已经运行了,因此无需像虚拟机一样再次启动。容器化技术利用共享资源创建了一个宽松的沙盒环境,每个容器在上面构建函数、服务或者应用。

  在虚拟化容器中,应用程序可以被划分成多组容器化的功能,它们合力运行,构成的系统能够以更加灵活多变的方式提供进程。一个复合应用可以由一个专门配置并优化用于执行数据分析的容器,和一个专用的数据库或者应用逻辑协同组合而成。容器在这种服务链管理方面优于虚拟机,因为它基于一个共享平台工作,在使用共享的功能、设备方面比虚拟机更有效率。

  更高的灵活性意味着需要更多的安全性

  尽管容器的使用增加了整体的灵活性,它也引入了额外的管理需求以及安全问题。在虚拟机中,所有组件都在同一个地方,虚拟机可以作为一个独立实体进行管理和安全防护。与此不同的是,对于基于容器的应用,组成应用的一系列功能都是松耦合在一起,因此需要对每一个分别进行管理和安全防护。

  如果底层平台的安全防护不到位,那么在其基础上搭建的所有容器的安全都得不到保证。反过来的情况也是一样。我们假设一个容器镜像拥有完整的超级用户权限。因为容器需要持续地跟底层平台交互,一个有权限访问容器的入侵者,理论上就可以通过容器化环境攻破底层平台,从而获得底层平台的访问权限。

  尽管前面描述的情况听起来像是一个非常严重的设计缺陷,但这是容器运行的必要条件,也是其核心特点,正是这个特点使得容器能够比虚拟机提供给开发人员更多的功能提升潜力,吸引了大量产品开发的关注。生产环境IT系统选择采用容器技术需要确保两个关键问题,既要能保证容器自身内部的安全性,又要能保证容器化环境创建方式的安全性。

  保证虚拟化容器的安全性必然是任何使用容器的群体的高优先级任务。在可能的情况下,通过使用各自的命名空间来隔离容器。为每个虚拟化容器提供独立的网络堆栈,避免任何特殊权限的访问能够穿过多个不同的容器再到达物理端口。使用控制组管理资源分配和利用——这种方式加强了外部安全性,因为它能够有助于预防分布式DOS攻击。

  使用虚拟化容器的一些建议

  仅仅在非常必要的时候才能使用虚拟容器的增强权限,并且在不需要该权限时立即切换回标准权限。为以防万一,在不使用的时候,永远不要将权限设置为增强权限;每次提升权限和重置回标准权限所产生的额外内部处理时延是值得的,因为这种做法能增强整个IT平台的安全性。

  尝试用非root的权限运行服务:如果必须使用root权限,一定要与在物理IT基础设施上使用root权限一样小心。容器并不是一个沙盒,它存在各种各样的可与外部交互的方法。开发者并不是在一个密封空间里面开发,一个容器里面任何糟糕的代码可能会对同一物理平台上所有其他容器都产生严重的安全影响。绝大多数容器不需要root权限。大部分需要root权限的服务应该在容器外部的更底层平台运行。以低权限运行容器能够阻止任何类型的挂载请求,拒绝创建文件或者修改属性,防止模块装载,达到保护系统的目的。

  底层平台对容器的安全性处理与传统虚拟化不一样,这个主要区别正是虚拟化容器的核心功能所在。对于Docker来说,Docker后台守护进程(Docket Deamon)在物理平台的root环境中拥有全部权限,并使用该权限创建虚拟化的容器环境。任何有权限访问该后台守护进程的用户就能完全自由地做任何想做的事情。因此,必须只能通过专用的系统管理员权限控制方法来控制访问后台守护进程。

  虚拟容器安全性也包括监控容器如何使用API。API调用中的非常小的错误有可能导致恶意攻击,例如启动新的容器或者改变现有API调用,使之以很高的权限访问root环境。当企业系统在使用容器时,需要在API监控和管理方面做一些投入,比如采用Akana、Apigee或者CA Technologies的产品。

  干货:

  编程容器定义

  容器是用来存储和组织其他对象的对象。实现链表的类就是一个容器的示例。如

  vector mydata;//创建存储double类型值的容器mydata

  可以在容器中存储基本类型或任何类类型的条目。如果STL容器模板的类型实参是一个类类型,那么容器可以存储该类型的对象或者任何派生类类型的对象。

  通常,容器存储我们存储在其中的对象的副本,它们自动分配和管理对象占用的内存。当销毁某个容器的对象时,容器会负责销毁它包含的对象并释放它们占用的内存。使用STL容器存储对象的一个优点是我们不用费心管理它们的内存。

  在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。

  经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。

  STL容器类的模板

  容器部分主要由头文件,,,,,和组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关系。

数据结构描述实现头文件向量(vector) 连续存储的元素列表(list) 由节点组成的双向链表

  数据结构描述实现头文件向量(vector) 连续存储的元素列表(list) 由节点组成的双向链表,每个结点包含着一个元素双队列(deque) 连续存储的指向不同元素的指针所组成的数组集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的位次排列,没有两个不同的元素能够拥有相同的次序多重集合(multiset) 允许存在两个次序相等的元素的集合栈(stack) 后进先出的值的排列队列(queue) 先进先出的执的排列优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的一种队列映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列多重映射(multimap) 允许键对有相等的次序的映射为所有容器定义的操作

  小结:您可以不采纳我的答案,但请您一定要考虑下我的建议哦! 文章中不足及错误之处在所难免,敬请专家和读者给予批评指正。当然如果大家还想了解更多方面的详细内容的话呢,不妨关注课课家教育平台,在这个学习知识的天堂中,您肯定会有意想不到的收获的!

赞(22)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程