跳到主要内容

DevSecOps 是什么?

· 阅读需 19 分钟

为什么会接触到 DevSecOps

在从去年上半年入职现在这家公司后,从入职培训开始,就开始接受 Security 的文化输入,但是并没有了解过 DevSecOps 这个概念,只知道在这里做产品 Security 是需要被重点关注的一个事情。 而随着产品开发的过程中遇到的许多问题,也让我开始反思,到底怎样做才能让产品开发的过程中的这些问题得到很好的解决?

其中比较明显的是,在这里,产品、功能有着相对固定的发布流程以及周期,然而我们的 Team 由于之前并没有接触过这样的开发流程(需要在产品或者功能上线前, 然后经过 Security 相关同事的验证,确保发布后的功能是满足基本的安全要求的),所以每次在 Release 之前都会因为 Security 不满足要求而需要重新调整功能设计方案、功能实现或者增强安全性校验, 而这个问题又会间接的影响其他东西,比如我们无法在 Release 之前预留足够的时间来对我们开发的功能进行充足的测试,这可能使得产品质量下降。

直到我之前看到 bytebytego 的这样一张图,我才明白,原来我们可能是这样的产品开发模式。

DevSecOps 生命周期

如下图:

以往我们知道的“现代”开发流程被称之为 “DevOps” ,其中主要是加入了诸如 “持续集成” “持续交付” “持续部署” 之类的概念。 这其实主要解决了我们之前的开发持续迭代的效率问题,相比与之前的瀑布式的开发流程。

但是现在我们在 DevOps 流程已经日趋成熟的情况下,需要将 Security 这个环节也融入到这个流程中去,这使得软件的安全性被加入到整个软件开发的生命周期中去。 而不是仅在软件开发完成后才去实施“补救”性的措施。当然,实际中其实也不仅仅止步于 Security 这类需求,包括隐私、合规等层面的问题。

DevSecOps 具体实施

从上面的图中,我们可以观察到哪些和我们现在软件开发流程的差异呢?

从我自己的经验来看:

  • Security Checks & Scans
    • 这个主要是一些静态代码扫描等工具
  • Vulentability Management
    • 潜在的已经漏洞扫描,主要针对一些开源库或者包的已知依赖
  • Collaboration Communication
    • 这个看起来主要是指于我们的 Security 团队同事沟通我们的设计方案、实现细节
  • QA Integration
    • 这个不太了解,我理解应该是写一些常见的和 Security 相关的 QA 问题用于在软件开发周期中进行反思
  • Threat Modeling
    • 翻译过来是叫威胁建模,实际上是通过梳理我们的软件交互模型,来梳理、发现潜在的威胁点
  • Key Management
    • 这个感觉一般是指我们的软件实现上使用 Key Management 的系统来管理秘钥、密码、证书等安全信息,避免手动维护,也方便在发生秘钥泄漏时,更快的进行替换以降低数据泄漏风险

DevSecOps 的起源和必要性

起源

DevSecOps 是一种将安全性整合到软件开发生命周期(SDLC)的实践。它起源于对传统软件开发方法的反思和改进。在传统的软件开发方法中,安全通常是在开发周期的最后阶段才被考虑的,这导致了安全漏洞的累积和修复成本的增加。随着软件复杂性的增加和网络攻击的日益频繁,组织开始认识到需要一种更全面的方法来处理安全性。

DevSecOps 的概念最早可以追溯到 DevOps 的实践,DevOps 是一种强调开发和运维团队之间协作的软件开发方法。DevOps 通过持续集成(CI)和持续交付(CD)来加速软件发布周期,但这种方法最初并没有将安全性作为核心考虑因素。随着时间的推移,人们意识到仅仅加速开发和发布是不够的,还需要确保软件在整个生命周期中的安全性。

必要性

DevSecOps 的必要性主要来自于以下几个方面:

  1. 安全威胁的增加:随着技术的发展,网络攻击变得更加复杂和频繁。黑客利用软件漏洞进行攻击,导致数据泄露、服务中断和其他安全事件。这些事件不仅影响企业的声誉,还可能导致巨大的经济损失。
  2. 合规性要求:许多行业和地区都有严格的安全合规性要求。例如,欧盟的通用数据保护条例(GDPR)和美国的萨班斯 - 奥克斯利法案(SOX)都要求企业采取适当的措施来保护用户数据和系统安全。DevSecOps 可以帮助组织满足这些合规性要求。
  3. 软件复杂性的增加:现代软件系统越来越复杂,涉及多个组件和第三方库。这种复杂性增加了管理和维护的难度,也增加了安全风险。DevSecOps 通过在开发过程中早期识别和解决安全问题,帮助降低这种复杂性带来的风险。
  4. 敏捷开发的需求:敏捷开发方法强调快速迭代和持续改进。在这种环境中,安全也需要成为一种持续的过程,而不是一次性的活动。DevSecOps 支持敏捷开发,通过自动化和集成安全测试,确保软件在快速迭代的同时保持安全性。
  5. 跨团队协作:DevSecOps 强调开发、运维和安全团队之间的协作。这种跨团队的协作有助于打破信息孤岛,促进知识共享,从而更有效地识别和解决安全问题。
  6. 成本效益:通过在开发早期识别和修复安全漏洞,DevSecOps 可以显著降低修复成本。修复一个在开发阶段发现的漏洞通常比在生产环境中发现要便宜得多。此外,减少安全事件的发生也可以减少因安全问题导致的间接成本,如客户信任度下降和法律诉讼费用。
  7. 客户信任:在当今竞争激烈的市场中,客户越来越关注软件的安全性。通过实施 DevSecOps,组织可以提高客户对其软件安全性的信任,从而在市场上获得竞争优势。

通过以上几点,我们可以看到 DevSecOps 不仅是一种技术实践,更是一种文化和组织变革,它要求组织从上到下都重视安全性,并将其作为软件开发的核心部分。