译者 | 陈峻

审校 | 重楼

在现代开发环境中,持续集成(CI)和持续交付(CD)管道对于向最终用户交付软件的变更已是“家常便饭”。这导致了过去在部署之后才执行安全测试的传统方法,对于每天可能要进行数十甚至数百次部署的场景而言,已不再有效。

安全测试人员为了能够轻松地自动运行和协调一系列开箱即用的安全测试工具,也往往需要一个模块化的工具链。而secureCodeBox正是这样一个基于Kubernetes(又称 K8s)的、可被用于对软件项目进行持续安全扫描的工具。它能够被集成到CI/CD管道中,自动扫描变更,并向开发人员提供测试结果,以便他们在部署之前修复软件问题。

架构

总的说来,secureCodeBox的架构如下图所示:

secureCodeBox的架构图secureCodeBox的架构图

我们可以看到,其主要扫描活动是由步骤 2 中的Kubernetes作业(Job)在扫描容器(Scanner Container)内执行的。该容器成为了运行各项扫描活动的环境。此处的Kubernetes作业表示使用pod来实现即用即停的一次性任务。而pod是在K8s生态系统中运行的一到多个容器。同时,Kubernetes作业也使用到了Lurker容器。它负责从扫描容器中提取结果,并将其传递给步骤 3 的解析器容器(Parser Container,另一个Kubernetes作业)。一旦结果被解析为正确的格式,它们就会被发送到步骤 4 5 中的另两个Kubernetes作业处,以修改和持久化扫描的结果。

而且,由于Kubernetes作业可以按需启动,并只在需要时才使用资源,因此它能够在扫描活动之间节省大量资源。同时,其另一个优势在于,所有不必要的扫描工件或元数据都会在Kubernetes作业执行之间被删除。

如图所示,负责处理这一流程的主要组件便是secureCodeBox操作器(Operator)。该操作器通过为每个步骤触发相应的Kubernetes作业来协调扫描,即:从扫描活动开始,到解析结果,再到修改和持久化结果。整个过程无需依赖人工安全审查,而且具有可扩展性,可以轻松添加更多的扫描器作为新的Kubernetes对象。

部署secureCodeBox

SecureCodeBox可以使用Helm图表在Kubernetes中进行部署。毕竟HelmK8s中不需要太多的部署工作,而且部署的对象可以通过Helm变量轻松调整。

下面,我将使Minikube建一个本地Kubernetes集群。这里,Minikube并不是为生产环境的用例而设计的,不过您可以用它来测试性部署在K8s中。

首先,我们使用如下命令,以 4 CPU2048 MB内存的方式启动Minikube

minikube start --cpus=4 --memory=2048m