《基于Kubernetes的容器云平台实战》——3.5 容器镜像安全加固

举报
华章计算机 发表于 2019/06/02 01:25:25 2019/06/02
【摘要】 本书摘自《基于Kubernetes的容器云平台实战》——书中的第3章,第3.5.1节作者是陆平、左奇、付光、张晗、赵培、单良

3.5 容器镜像安全加固

Docker容器通过namespace进行进程间的隔离,通过CGroup限制资源的使用,这只能做到进程及文件的安全隔离,同虚拟机操作系统级别的安全隔离尚有差距,正是因为这方面的原因,容器轻量快速的特性才能发挥出来。

研发应用软件时,开发人员编写代码并提交到配置库,触发持续集成流程,经测试人员进行测试,测试通过后由运维人员部署到生产环境,因此容器安全加固涉及容器的全生命周期,包括开发阶段及生产阶段。容器安全加固就是在开发测试环境中保证容器镜像构建、存储安全可信,在生产环境中保证容器启动、运行、停止正确即可。

3.5.1 容器安全加固规范

Docker主机安全加固

具有一定规模的企业会建立自己的主机安全加固规范及checklist,按照这个规范进行即可,如关闭swap、防火墙、文件句柄修改等,必要时使用安全工具对主机进行安全扫描。对安全要求极高的企业可以考虑使用自主研发的操作系统,在操作系统中启用SELinux。

更改运行容器的用户权限

为了防止容器“逃逸”并获得宿主机的权限,因此要用非root用户执行容器;如果用户已经在镜像中定义,那么可以通过Dockerfile在此镜像基础上生产新的镜像,在Dockerfile中添加用户:RUN useradd -d/home/<用户名> -m -s/bin/bash <用户名> USER <用户名>。如果制作镜像文件时需要使用root权限同后端daemon进程进行交互,则可以使用kaniko开源工具进行处理。

镜像中的setuid及setgid

setuid和setgid指令可用于提权,如果这两个指令使用高权限就可能引入了风险,因此在镜像中要进行权限控制,一般在Dockerfile末尾添加命令:RUN find/-perm 6000 -type f -exec chmod a-s {}\;||true进行权限控制。

对镜像进行安全扫描,使用安全可信的容器镜像

使用clair或其他工具对镜像文件进行安全漏洞扫描,根据扫描结果打补丁或更新软件,消除安全隐患后再重新制作镜像。

镜像文件使用数字签名

对从Docker仓库发送和接收的数据使用数字签名能力,允许客户端验证特定镜像标签的完整性。

启用HTTPS

Docker对所有请求启用TLS验证,启用HTTPS需要对Docker启动文件进行配置,可使用命令:

dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem \ -H=10.47.40.110:2376

容器网络流量限制

默认情况下容器能访问容器网络上的所有流量,因此可能会导致信息泄露,Dockerd采用守护进程模式启动时增加参数-icc = false可以对容器流量进行限制,只访问自己的流量。

内存配额限制

默认情况下容器可以使用主机所有内存,容器启动时通过-m或-memory参数限定容器的内存,如使用命令docker run -it --rm -m 128m限制内存配额。

CPU优先级限制

默认情况下CPU是没有设置优先级的,用户可以通过CPU共享设定优先级。如使用下面的命令设置优先级:

docker run -it --rm --cpuset=0,1 -c 2

存储空间配额限制

采用docker -d --storage-opt dm.basesize=5G命令可限制存储空间配额,但目前还不能有效控制磁盘I/O。

日志和审核

收集并归档与Docker相关的日志以便后期进行审核监控或做统计分析,记录容器日志的命令如下:

docker run -v /dev/log:/dev/log <container_name> /bin/sh


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。