上一篇文章我们了解了 IAST 及其优势、工具类型以及重要性。本期文章将为你介绍 CI/CD 流水线安全的最佳实践。
CI/CD 流水线是指由持续集成(Continuous Integration)和/或持续部署(Continuous Deployment)组成的一套自动化流程。CI/CD 流水线通常被 DevOps 团队使用,是主要通过自动化工具来构建、测试和部署代码的最有效方法之一。
利用 CI/CD 流水线,能够更好地促进软件构建和部署。因为成功的 CI/CD 流水线需要持续协作和严格执行敏捷和 DevOps 原则。
为何对于 DevSecOps 来说 CI/CD 流水线是重中之重?
DevSecOps 是一种用于开发、自动化和平台架构的程序化方法,它在 IT 生命周期的每个决策阶段中都优先考虑安全性。
安全漏洞不仅让敏感数据面临风险,同时修复起来的成本也很高。在2020年,数据泄露的平均成本达到386万美元。到2021年底,处理网络犯罪的成本达到近6万亿美元。90%的 Web 应用程序被认为是不安全的,其中86%有数据泄露的风险。最重要的是,仅在2020年美国就发生了1000多起数据泄露事件,影响范围超过1.55亿人。
安全俨然成为 DevOps 和敏捷团队的首要任务,而 DevSecOps CI/CD 流水线在现有开发过程中嵌入了安全实践。
基于 DevSecOps 的流水线涉及以下几点:
- 在开发周期的早期识别安全问题(并尽可能解决这些问题),以减小独立执行与安全相关的测试和任务时产生的摩擦。
- 在开发之前完善和整合安全相关的目标。在构建系统时,将威胁建模纳入当中。同时置入 Linters 工具和静态分析,以便在早期就能消除一些可控问题。
- 使用软件成分分析(SCA)来验证开源依赖项是否具有规范、兼容的许可证,且无漏洞。
- 将代码推送到流水线时,使用静态应用程序安全测试 (SAST) 来定位问题,同时进行 SCA。将 SAST 工具整合到自动化流水线中,以便在每次提交新代码后能够及时扫描其可能存在的错误和漏洞。
- 构建完成后充分利用安全集成测试。请在隔离容器中执行代码,以测试输入验证、网络调用和授权过程。
- 转而测试访问控制和日志协议。这时请确保将访问权限限制为相关用户子集,且软件每次都可以准确记录必要的安全和性能指标。
- 配置安全测试以继续进行后期开发。自动进行修补和配置管理,以便软件可以访问其所有依赖项的最新和最安全版本。
DevSecOps CI/CD 流水线将安全目标和措施融入每个阶段。通过利用自动化工具,它可以在不影响数据防御和安全措施的情况下快速交付产品。
CI/CD 流水线安全的最佳实践
为确保数据安全、开发过程可靠,并充分利用 DevSecOps ,请参考以下 CI/CD 流水线安全最佳实践:
通常,流水线连接到第三方工具/框架等任何点都容易受到威胁。请定期安装和更新安全修补程序,阻止所有不符合安全基准的设备和连接软件。
当涉及到非人工访问,即第三方自动化工具和框架所需的访问时,评估机器身份也很重要。使用身份验证器验证容器的属性是否与以前指定给流水线的识别系统的属性匹配。在容器和虚拟机达到其目的后,需要及时清理和销毁。
最小权限要求仅授予对特定角色或任务所需的信息的访问权限。换句话说,个人可以访问限制性数据集和 CI/CD 流水线的一部分——与分配给他们完成的任务或目标所需的权限相同。这种做法还应扩展到连接的系统、设备和应用程序,因为它们需要权限和不同的级别才能完成任务。确保定期调查和审查访问的级别以强化最小权限,并保持生态系统的安全。
利用 .gitignore 文件来避免意外提交生成的缓存文件和标准缓存文件。此外,可以实施并使用本地存储的安全备份存储库来作为备份机制的一部分。
结 论
将 DevSecOps 整合到开发流水线中可能相当复杂,尤其是对于刚接触该方法的团队而言。在前期,可以尝试将过程分为多个容易实现的小步骤,让团队熟悉 DevSecOps 工具、原则和实践,从而改变团队观念和个人思维方式。