将我们的DevSecOps方法划分为多个层,可以在强大的安全性需求与快速移动和频繁部署的需求之间找到适当的平衡。DevOps运动改变了我们集成和发布的方式。它使我们从缓慢的发布周期(有时每年一次)转变为每天(有时甚至每小时)发布一次。我们几乎可以立即编写代码并看到生产中的变化。DevOps是打破壁垒并支持快速响应市场变化和客户需求的令人惊叹的第一步,但仍然有一个重要的壁垒需要打破,我们需要中间的一个重要群体:安全运营(SecOps).为了将这一重要群体纳入生产变更的持续集成和部署(CI/CD),我们将DevOps重新定义为DevSecOps。我们在这项工作中面临的挑战与我们将开发和运营结合在一起时所面临的挑战是一样的:开发人员希望快速行动并经常进行更改,而运营需要稳定性和不频繁的更改。安全团队倾向于支持稳定性和不频繁的更改,因为更改可能意味着重复安全测试和重新认证环境。随着我们以DevOps的速度前进,我们如何期望这些团队每天或每周重做他们的工作?安全分层在深入探讨这个问题之前,我们应该谈谈一个关键的安全实践:分层安全或深度防御。分层安全是应用多种安全措施的做法,每一层都与前一层和下一层重叠,以创建一个共同保护技术系统的安全控制网络。在分层安全方法中,公司通过使用WAN网关防火墙和静态数据加密等访问控制来减少对技术系统的入侵。控件列表很广泛,但要点是没有任何一个控件可以充分保护技术系统。同样的方法适用于对我们的应用程序执行安全分析。联系你公司的应用程序安全团队,询问他们使用什么扫描工具来确保他们编写的应用程序的安全性。很有可能,他们不会用一种工具来回复,因为没有一种工具可以完成所有的事情。相反,他们可能会为您提供他们使用或希望他们的开发团队使用的工具列表或类型。这让我们回到了之前的问题:随着所有这些扫描的进行和所有这些工具的使用,我们如何期望维持一个连续的部署周期?这是一项艰巨的任务。其中一些扫描和工具需要数小时、数天或更长时间。内联扫描虽然一些安全工具和扫描器确实需要很长时间才能运行,但可以在开发生命周期的早期使用更快的工具来形成我们的第一层DevSecOps。这就是左移背后的想法:将流程从开发生命周期的末尾(或右)移动到开始或中间,即再次向左移动。第一层应该包括需要几秒钟(或几分钟)才能运行的工具和扫描仪。一些常见的示例是代码lint、单元测试、静态代码分析器(如SonarQube)、第三方依赖漏洞检查(如OWASPDependencyChecker)以及集成测试的子集。您可能会问:“整理代码和运行单元测试如何适应DevSecOps?”软件中的错误可以为正在寻找的对手提供完美的解决方案。例如,OWASP在过去两份重要的Web应用程序安全报告(2013年和2017年)中将代码注入列为排名第一的漏洞。单元测试和静态代码分析可以帮助捕获我们的一些错误,并可能有助于防止我们代码中的安全漏洞。由于这些工具扫描花费的时间很少,因此最好将它们推到开发生命周期的最左侧。当开发人员将代码推送到我们的Git存储库并打开拉取请求时,这些工具和扫描器会运行以确保代码在合并之前通过。除了确保我们的主干分支保持可构建性之外,在开发生命周期的早期使用这些工具还可以尽早并经常向开发人员提供反馈。部署前扫描DevSecOps的第二层工具与我们的部署管道内联运行,可能需要几分钟甚至一个小时才能完成。这可能包括更深入的第三方漏洞扫描、Docker镜像扫描和恶意软件扫描。这一层的关键之一是扫描器和工具可以在构建工件生成之后但在它们存储到任何地方(如Artifactory或AmazonElasticContainerRegistry)之前运行。更重要的是,这一层的任何故障都应立即停止当前部署并向开发团队提供反馈。另一个关键是这一层和所有未来层的并行化。开发人员希望尽快部署他们的更改,而连续运行多次扫描(每次最多可能需要一个小时)会不必要地减慢部署周期。通过并行运行这些工具,部署速度的降低等于运行时间最长的扫描。部署后扫描DevSecOps的下一层包括我们可以在代码部署到预生产环境后使用的工具和扫描器。这些工具可能包括性能和集成测试以及应用程序扫描器,例如OWASPZap。我们应该努力使这一层快速运行,希望在一个小时或更短的时间内运行,以便为开发人员提供快速反馈并限制对CD过程的影响。为确保我们不会错误地将易受攻击的代码部署到生产环境中,该层应作为CD管道的一部分运行,目的是在任何扫描器发现漏洞或随后回滚环境时删除工件。否则失败。根据行业、安全和监管要求,我们可以在成功完成这一层后自动部署到生产环境。管道中应该已经有足够的自动扫描和测试来合理地证明应用程序的安全性和健壮性。连续扫描我们讨论的大多数扫描器和工具已经嵌入到CI/CD管道中。我们的目标是为应用程序的安全性提供合理的保证,同时平衡这些工具对CI/CD管道时间线的影响。DevSecOps的最后一层是持续扫描或持续安全(CS)。正如持续集成、测试和部署是DevOps的同义词一样,持续安全性也是DevSecOps的同义词和基石。该层包括Nessus、Qualys、IBMAppScan等工具,以及其他基础架构、应用程序和网络扫描工具。CS没有嵌入到CI/CD管道中,而是异步的,并为开发人员提供持续的反馈。开发者如何接收和回应这些反馈需要讨论和共识。开发人员将在收到任何反馈后立即处理,并在很长的周转时间内解决。如何启动这些工具和扫描器以及它们运行的??频率是CS的另一个方面,利益相关者应该达成一致。部署完成后,可以通过CI/CD管道启动带有API的工具。其他的可以根据需要或者按照一定的时间节奏进行。不管怎么做,重要的是这些工具和扫描仪不能只运行一次,甚至一年运行一次或两次。相反,这些工具和扫描仪应该尽可能频繁地运行,并且应该对应用程序有意义。结论正如我们无法通过使用一种或两种工具或安全原则来确保技术系统的安全一样,我们应用程序的安全性也不能仅依赖于一种或两种工具或扫描仪的类型。它采用分层的方法来应用不同的工具和扫描器,以合理地确保我们的应用程序及其运行的基础设施的安全。关于我们Zeyang,DevOps领域的从业者。专注于企业级DevOps运维开发技术的实践分享,主要以Linux运维新技术和DevOps技术课程为主。丰富的一线实践经验,对课程实用性的追求得到了大多数学生的认可。课程内容来源于企业应用。你可以在这里学习技术,掌握热门技能。欢迎!(微信号:devopsvip)
