- (命令示例: docker run -- rm - it -- security - opt seccomp : /path/ to / seccomp / profile . json hello - world )
镜像仓库安全
1、内容信任机制
Docker的内容信任(Content Trust)机制可保护镜像在镜像仓库与用户之间传输过程中的完整性 。目前,Docker的内容信任机制默认关闭,需要手动开启 。内容信任机制启用后,镜像发布者可对镜像进行签名,而镜像使用者可以对镜像签名进行验证 。
具体而言,镜像构建者在通过docker build命令运行Dockerfile文件前,需要通过手动或脚本方式将DOCKER_CONTENT_TRUST环境变量置为1进行启用 。在内容信任机制开启后,push、build、create、pull、run等命令均与内容信任机制绑定,只有通过内容信任验证的镜像才可成功运行这些操作 。例如,Dockerfile中如果包含未签名的基础镜像,将无法成功通过docker build进行镜像构建 。
- (命令示例: export DOCKER_CONTENT_TRUST = 1 )
Notary是一个从Docker中剥离的独立开源项目,提供数据收集的安全性 。Notary用于发布内容的安全管理,可对发布的内容进行数字签名,并允许用户验证内容的完整性和来源 。Notary的目标是保证服务器与客户端之间使用可信连接进行交互,用于解决互联网内容发布的安全性,并未局限于容器应用 。
在Docker容器场景中,Notary可支持Docker内容信任机制 。因此,可使用Notary构建镜像仓库服务器,实现对容器镜像的签名,对镜像源认证、镜像完整性等安全需求提供更好的支持 。
镜像安全扫描
为了保证容器运行的安全性,在从公共镜像仓库获取镜像时需要对镜像进行安全检查,防止存在安全隐患甚至恶意漏洞的镜像运行,从源头端预防安全事故的发生 。镜像漏洞扫描工具是一类常用的镜像安全检查辅助工具,可检测出容器镜像中含有的CVE漏洞 。
针对Docker镜像的漏洞扫描,目前已经有许多相关工具与解决方案,包括Docker Security Scanning、Clair、Anchore、Trivy、Aqua等等 。
1、Docker Security Scanning服务
Docker Security Scanning是Docker官方推出的不开源镜像漏洞扫描服务,用于检测Docker Cloud服务中私有仓库和Docker Hub官方仓库中的镜像是否安全 。
Docker Security Scanning包括扫描触发、扫描器、数据库、附加元件框架以及CVE漏洞数据库比对等服务 。当仓库中有镜像发生更新时,会自动启动漏洞扫描;当CVE漏洞数据库发生更新时,也会实时更新镜像漏洞扫描结果 。
2、Clair工具
Clair是一款开源的Docker镜像漏洞扫描工具 。与Docker Security Scanning类似,Clair通过对Docker镜像进行静态分析并与公共漏洞数据库关联,得到相应的漏洞分析结果 。Clair主要包括以下模块:
- Fetcher(获取器):从公共的CVE漏洞源收集漏洞数据;
- Detector(检测器):对镜像的每一个Layer进行扫描,提取镜像特征;
- Notifier(通知器):用于接收WebHook从公开CVE漏洞库中的最新漏洞信息并进行漏洞库更新;
- Databases(数据库): PostSQL数据库存储容器中的各个层和CVE漏洞 。
Trivy是一个简单而全面的开源容器漏洞扫描程序 。Trivy可检测操作系统软件包(Alpine、RHEL、centos等)和应用程序依赖项(Bundler、Composer、npm、yarn等)的漏洞 。此外,Trivy具有较高的易用性,只需安装二进制文件并指定扫描容器的镜像名称即可执行扫描 。Trivy提供了丰富的功能接口,相比于其他容器镜像漏洞扫描工具更适合自动化操作,可更好地满足持续集成的需求 。
- (命令示例: trivy [镜像名])
为了在系统运维层面保证容器运行的安全性,实现安全风险的即时告警与应急响应,需要对Docker容器运行时的各项性能指标进行实时监控 。
针对Docker容器监控的工具与解决方案包括docker stats、cAdvisor、Scout、DataDog、Sensu等等,其中最常见的是Docker原生的docker stats命令和Google的cAdvisor开源工具 。
1、docker stats命令
docker stats是Docker自带的容器资源使用统计命令,可用于对宿主机上的Docker容器的资源使用情况进行手动监控,具体内容包括容器的基本信息、容器的CPU使用率、内存使用率、内存使用量与限制、块设备I/O使用量、网络I/O使用量、进程数等信息 。用户可根据自身需求设置–format参数控制docker stats 命令输出的内容格式 。
- (命令示例: docker stats [容器名])
由于docker stats只是简单的容器资源查看命令,其可视化程度不高,同时不支持监控数据的存储 。cAdvisor是由Google开源的容器监控工具,优化了docker stats在可视化展示与数据存储方面的缺陷 。
推荐阅读
- Linux安装Docker
- 如何修改docker容器存储位置
- Docker+K8S 集群环境搭建及分布式应用部署
- docker宿主调用容器内命令
- docker和容器的区别
- 使用Docker搭建Redis-cluster环境
- Linux容器技术原理和使用
- 两款Docker可视化工具介绍
- docker中容器如何实现通信
- 提升 MongoDB 安全性的 10 个方法