DevSecOps、Shift Left和GitOps:您最近可能听说过所有这些术语,但您可能不确定它们的意思。现实情况是,这些实践有很多相同的原则-减少开发人员需要花费在安全上的时间,同时实现更好的结果。谁不想这样呢?让我们消除一些困惑,解构这些术语的含义,以及它们如何适用于您的安全和开发团队。
DevOps是近年来越来越流行的趋势-这一转变使开发人员对操作问题更加负责。这个想法是,当一个系统崩溃时,每个人都有责任修复它。从一开始就防止停机也是如此。DevOps没有将开发和操作分开,而是假定编写、发布和管理该代码的各方共同负责这些功能。
你在业界普遍看到的转向DevOps的心态转变,在安全领域也特别明显。它通常称为DevSecOps。这是关于让所有参与应用程序开发生命周期的各方对应用程序的安全性负责,就像他们对操作和可支持性负责一样。
那么DevOps和DevSecOps有什么不同呢?在第一种情况下,每个人都要对停机负责,即使他们不管理基础设施。在第二种情况下,每个人都要对漏洞负责,即使他们没有编写软件。就像DevOps的业务目标是减少停机一样,DevSecOps的业务目标是无数据丢失(这也得益于停机减少-毕竟可用性是CIA三合会的一部分)。DevSecOps解决了未令人满意地解决安全需求的开发团队所关注的问题。
不过,并不是每个人都喜欢DevSecOps这个词。这不仅仅是因为秩序令人困惑,还因为它让安全看起来很特别。现实情况是,在开发过程的每一步,每个功能都应该以这种方式紧密集成在一起。持续安全性与持续集成和持续交付是平行的:您也应该将安全性持续集成到您的开发过程中。
由于这是一种思维方式的转变,因此没有规范的实践列表,但主要的改变是在开发生命周期的早期应用安全实践。
在实践中,为了让团队对他们开发的内容负责,流程需要转移到开发生命周期的早期阶段,即开发团队所在的位置。通过将测试(包括安全测试)等步骤从部署时的最后关口移到更早的步骤,错误会更少,开发人员可以更快地行动起来。
向左移动的原则也适用于安全,而不仅仅是操作。在入侵可能影响用户之前防止它们,并迅速采取行动解决新发现的安全漏洞并修复它们,这一点至关重要。将安全性集成到开发生命周期的每个步骤中,可以让您的开发团队更早地发现问题,而不是充当门户。以开发人员为中心的方法意味着他们可以在编写代码时停留在上下文中并响应问题,而不是几天后的部署,或者几个月后的渗透测试报告。
向左移动是一种流程改变,但它不是单一的控制或特定的工具-它是关于使所有的安全性更加以开发人员为中心,并为开发人员提供安全反馈。在实践中,开发人员使用代码和Git进行工作,因此,我们看到更多的安全控件被应用到Git中。
始终如一地管理安全控制:GitOps使用Git作为您环境的真实来源。
GitOps利用了(字面上的)将环境中的一切都视为代码的趋势。当然,GitOps是作为代码的基础设施。但它也是作为代码的配置、作为代码的策略,以及任何您可以认为是代码的东西。(嗯,什么都不是。不要在代码中保守秘密。你以为你的秘密是安全的吗?你错了。)。
与DevSecOps和Shift Left相比,这是思维方式和流程的改变,而GitOps在实现方面更具说明性。GitOps是一个系统,它使用Git作为您环境的真理源,并使用Git的属性(如历史和审查工具)来管理您如何对该真理源进行更改。
它也是您在代码之上构建的,以使部署尽可能自动化和无错误。使用GitOps,您可以将更改推送到代码,并将更改作为Git工作流的一部分进行审查,然后使用自动化来完成部署、监视和调整生产中的实时更改等所有困难的工作。
GitOps是最好地支持DevOps,特别是DevSecOps中提出的理想的系统。它允许您将部署与开发分开,因此您可以随心所欲地进行部署。我们从Dora State of DevOps报告中了解到,当开发人员拥有Git提供的版本控制、持续集成、测试自动化和其他工具时,他们可以更快地行动起来。
在DevOps中,这尤其关系到停机后响应的平均恢复时间(MTTR)。在DevSecOps中,这与平均补救时间(方便地,也包括MTTR)有关。拥有版本控制意味着您知道您的环境中有什么:您知道您是否需要升级,以及您是否容易受到漏洞的影响。有了足够的测试,意味着您可以非常快速地部署修补程序(如补丁),知道它不会破坏您的基础设施。
通过使用Git,您可以获得有关基础设施、配置和应用程序的单一事实来源。以此类推,只需一个过程就可以做出改变。您可以在此过程中实现必要的控制和关卡,以确保满足您的开发管道的任何安全需求,并且拥有一致的开发过程使您可以在代码(或配置)签入或构建时(而不仅仅是部署时)更早地验证安全需求,从而实现安全需求的左移。
总而言之,DevSecOps是一种思维方式的转变,它将安全实践作为开发生命周期的一部分加以认识和持续应用,并在团队之间分担责任。这经常伴随着将安全测试作为开发的一部分转移到生命周期的早期。这使安全(和开发人员)保持在流程和上下文中,从而可以更早地解决安全问题。而且,通过使用Git作为您的环境的真理来源,您不仅可以更容易地将这些原则应用于您的代码,而且还可以将这些原则应用于代码周围的一切,比如您的配置。没有一种方法可以应用这些概念,相反,它们承认安全性是当今开发工作流程中日益重要和不可或缺的一部分。
通过授权所有开发人员承担安全责任、在开发生命周期的早期执行安全测试以及使用Git,您可以帮助您的开发团队更快地发现并修复安全问题。在以后的博客文章中,我们还将分析这对您的第一方和第三方代码意味着什么。
正在寻找更简单的方法来保护您的代码安全吗?敬请关注本系列即将发布的帖子或查看我们的安全电子书。