对应用代码进行漏洞扫描是一种在进入生产环境前广泛落地的最佳实践。然而,却普遍没有对应用的配置(如DockerFile和Kubernetes YAML文件)进行审查。
对于容器来说,“一次构建、到处运行”的概念是指,一个容器或Pod的配置可以用于成百上千的运行实例。而一旦这些配置文件中存在漏洞,那么就有可能令成百上千的容器实例陷入危险。因此,如果读者还没有准备对DockerFile和Kubernetes YAML文件进行安全检查,那么立马着手开始吧!
一个广为流传的未做配置审查而带来安全隐患的例子是,IBM数据科学实验将TLS私钥打包到了容器镜像中。这使攻击者通过拉取镜像获得了运行该容器的主机的root权限。而这本可以通过对DockerFile进行安全审查来避免的。
当然,后续会不断出现一些能够进行类似检查的、基于“策略及代码规则(policy as code rules)”的自动化工具。
12.1.8 镜像签名
当今世界,可信性异常重要,而在软件交付流水线中的各个环节进行数字签名几乎已成为必备工作。好在,Kubernetes以及许多容器运行时都支持对镜像进行数字签名和验签。
在这一模型中,开发人员对镜像进行签名,镜像使用者在pull和run的时候会进行验签。这一操作令使用者能够确保他们所用的镜像就是要请求的镜像,期间并未被篡改。
镜像的签名和验签过程如图12.3所示。

图12.3
镜像的签名和验签操作通常由容器运行时来实现,Kubernetes实际并未参与。
对于镜像的签名操作,更高级的工具(如Docker Universal Control Plane,Docker通用控制平面)能够实现“镜像在使用前必须经由某指定团队签名”