容器云平台的基础安全和管理安全设计( 三 )


容器云平台是一个多模块组成的复杂系统,各个组合模块的安全需要独立设计以及实现,结合上面容器平台的架构,给出容器云平台安全设计架构图,如下:

容器云平台的基础安全和管理安全设计


容器云平台安全架构
2.1 基础安全设计
2.1.1 容器运行时安全
容器运行时通常会给管理员提供多种配置选项 。容器运行时配置不当会降低系统的相对安全性 。例如,在Linux容器主机上,经允许的系统调用集合通常默认仅限于容器安全运行所必需的调用 。如果该列表被扩大,则被入侵的容器会让其它容器和主机操作系统面临更大风险 。同样,如果容器在特权模式下运行,则可以访问主机上的所有设备,从而让其本质上成为主机操作系统的一部分,并影响在主机操作系统上运行的所有其它容器 。
运行时配置不安全的一个示例是允许容器在主机上挂载敏感目录 。容器通常很少会对主机操作系统的文件系统进行更改,而且几乎不应该更改控制主机操作系统基本功能的位置(例如,Linux容器的/boot或/etc、Windows容器的C:Windows) 。如果允许遭到入侵的容器更改这些路径,那么,也可以被用来提权并攻击主机本身以及主机上运行的其它容器 。
1.安全基线
  • 建设安全基线(参照附件5和6)持续改进
  • 建设安全基线检测自动化工具
  • 建设容器资产清单工具,实时洞察容器运行状况
2.容器运行风格选择
容器运行风格方面,其实有多种选择,采用何种容器运行风格也是安全考虑的问题之一:
常见运行风格:
瘦容器(Thin Container):单进程应用的封装,在镜像中打包应用 。这非常适于微服务架构应用的服务交付 。
胖容器(Fat Container):多进程应用的封装,在镜像中打包应用 。容器引擎对进程管理的特殊性,我们会利用init.d/systemd或者supervisor等来启动管理进程 。但是容器应该尽可能是单一目的,容器中的进程应该是紧耦合的,并有一致的生命周期 。比如可以将“nginx”和“php-fpm”打包在一个容器镜像中 。
VM容器(VM Container):是利用容器模拟轻量级虚拟机:镜像本身不包含应用,需要利用在容器启动后动态安装和配置应用 。这是不建议的方案,会造成容器中应用配置管理和更新的复杂性 。如业务应用暂时无法改造,需要制定过渡方案 。一般而言,不建议选择VM容器风格 。
2.1.2 Kubernetes运行时安全
目前主流的容器云管理平台一般基于kubernetes构建,kubernetes平台采用分布式架构方式构建,根据平台功能由多个组件组成,如下图 。典型的组件包括api server,etcd,sheduler,controller manager,kubelet,kube-proxy,cAdvisor,Plugin networks(比如flannel)等 。
容器云平台的基础安全和管理安全设计


以上组件是容器云平台的控制(管理)平面,是容器云平台的大脑,全面洞察集群上的每一个容器和pod,并且调度新的pod,读取和存储集群中的所有私密信息,因此在通讯和数据存储和传输方面均需要严格安全包括,主要措施包括:
组件安全基线
Kubernetes安全运行需要满足必要的配置基线,关于基线建设包括:
  • 建设安全基线(参照NIST规范,CIS benchmark)持续改进
  • 建设安全基线检测自动化工具
组件之间通信加密
为了实现组件之间的安全,设计要求组件之间应该启用TLS,支持TLS以防止流量嗅探、验证服务器身份以及(对于相互TLS而言)验证客户端身份 。
需要开启的TLS通讯包括:

推荐阅读