自2009年首次提出以来,DevOps涵盖的内容经历了多次迭代。虽然很多公司坚持以DevOps为中心,但很少有人能真正准确地理解它的含义。没有正确实践作为前提,DevOps给团队和企业带来的价值将无从谈起。当DevOps普及时,它可以加快部署速度、降低故障率并增强弹性。而这一切都将帮助团队乃至公司创造出周期更短、适应性更强、质量更好的产品。但这也给我们提出了新的问题——如何将安全考虑融入其中?DevOps和DevSecOps有什么区别?敏捷框架,一种构建一次/随处运行的开发方法,一切皆代码、自动化、通信和协作,是DevOps的五个核心组件。DevSecOps的重点是以满足安全要求的方式扩展DevOps的核心组件。通过解耦,我们能够看到在何处插入安全元素以实现软件安全是合适的。(1)敏捷框架——敏捷方法论是当今软件开发生命周期(SDLC)的主要内容。与瀑布式开发方式相反,敏捷开发强调短周期和小变更的结合,以确保企业能够快速响应客户的反馈。敏捷框架在加快开发周期方面做得很好,但通常受到操作和安全要求的限制。开发人员希望在专注于提高开发速度的同时,将操作和安全卸载到支持工具。总而言之,敏捷框架在提升运营效率方面取得了不错的效果;但重点仅在于开发本身,所有运营和安全要素都已成为事后的想法。(2)构建一次,随处运行——容器技术将SDLC提升到一个新的水平。作为一项真正具有颠覆性的技术,容器使开发人员能够独立于运营资源进行编码、构建、运行和测试。现在,由于开发人员不必担心设置操作环境,他们可以更专注于测试、安全性和扩展性。使用容器技术,一切都可以包含在一个Dockerfile中并在任何地方运行。在提交最终图像之前,开发人员根本不需要接触操作;但在整个过程中,运营部门仍然在不知不觉中为开发人员提供支持。尽管开发和运营之间存在这种隔离,但容器本身仍然是一项重大成就,如果没有Kubernetes等编排工具的指导,容器就无法工作。Kubernetes使企业能够有效地管理、扩展、观察和访问容器。它将Dockerfile的要求抽象为可以管理和扩展的显式对象。这种声明式抽象需要开发人员与运维人员进行沟通才能有效地使用Kubernetes。随着时间的推移,双方的交流会逐渐升级,最终包括安全问题。(3)自动化-自动化通过向开发人员提供直接反馈而不影响开发速度而成为DevSecOps的关键。单元测试、代码分析和图像扫描已成为常用工具,可以轻松添加到持续集成(CI)管道中,即时通知开发人员必要的更改。在开发团队的协作下,这些更改可以快速集成到现有管道中。运营和安全团队应该明白,他们越早提供自动反馈机制,开发人员就能越早适应这种新的协作模型。借助新工具和最佳实践,安全团队可以为开发人员提供稳定安全的基础镜像,从而不断提高代码质量。安全团队还可以在管道中引入自动检查机制,以监控任何包含提权行为的YAML文件、不匹配网络策略的命名空间或存在漏洞和风险的容器镜像。(4)一切皆代码——Kubernetes和其他编程语言的声明性特性极大地提高了基础设施和应用程序的可重用性和可理解性。YAML文件将帮助团队准确了解容器将如何按预期运行。所有的时钟时间、卷挂载、秘密注入等行为都可以通过这个文件和注释来观察。这种方法还允许成功地记录代码,以便随时进行版本控制和迭代更改。但即使使用最新最好的工具,未能正确记录和分类特定问题仍然是徒劳的。如果没有明确的文档,就很难在团队之间分享经验教训。在尝试新的管道配置时,每个团队吸取的教训可能对其他团队具有决定性意义。因此,使用代码和版本控制系统来充分展示更改并允许基于它们进行讨论。否则,随着单个团队的快速推进,知识共享体系将分崩离析,团队之间也难以充分沟通。(5)沟通和协作——如果团队和个人之间没有充分的沟通,所有的代码、应用程序和安全更改都是毫无意义的。IT部门最常忽视的沟通要点之一是对意图的清晰解释。DevOps和DevSecOps难以充分发挥其潜力的一个核心原因是,各方往往没有正确理解所涉及行动的意图。安全团队并没有试图阻碍开发,他们只是在做自己的工作并确保应用程序安全。虽然开发团队也很关心安全问题,但摆在他们面前的头号问题始终是如何让新功能在截止日期前顺利上线。组织必须努力弥合团队之间的差距,专注于吸取教训,鼓励合理的失败,并设定切合实际的后续目标。从文化的角度来看,这种变化通常是自上而下推动的。在重视这种方法的组织中,开发、运营和安全团队愿意讨论哪些意图是合法的,哪些不是,并且愿意设身处地为对方着想。DevSecOps将何去何从?总之,DevSecOps对我们提出了以下几个关键需求:需要在快速迭代的软件开发生命周期中建立嵌入式自动安全检查机制。可重用的开发环境具有同类型的安全控制机制版本控制CI管道根据组织或团队的职能范围改变管道,从而改进事件后的安全调查流程完善的文档,最好将安全实施为以声明方式编写代码鼓励创新并接受由此产生的失败文化DevSecOps所代表的是一种文化变革,其背后的思维方式转变并不局限于任何特定的工具。当然,大家也应该尽可能采用支持协同解决问题的工具,包括保证良好的可移植性、可观察性,以及提供通俗易懂的文档。最重要的是,获得团队的控制权以构建可以在团队之间共享的上下文材料。结合各种成功案例和理论层面的巨大潜力,相信DevSecOps不断发展的浪潮终将成为我们手中的有力武器。
