上一篇文章我们了解了 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 流水线安全最佳实践:

1. 确认主要安全威胁

在开发之前,请确定正在开发的软件面临的主要安全威胁。 明确可能需要其他安全性的节点,进行威胁建模并密切关注安全更新和验证协议。

通常,流水线连接到第三方工具/框架等任何点都容易受到威胁。 请定期安装和更新安全修补程序,阻止所有不符合安全基准的设备和连接软件。

2. 实施严格的访问参数

确保每个访问流水线的个人都经过充分身份验证。 一次性密码和身份验证器等措施是必需的。

当涉及到非人工访问,即第三方自动化工具和框架所需的访问时,评估机器身份也很重要。 使用身份验证器验证容器的属性是否与以前指定给流水线 的识别系统的属性匹配。 在容器和虚拟机达到其目的后,需要及时清理和销毁。

3. 谨慎提供访问权限

始终掌握哪些成员有权限访问流水线哪些级别的功能。 根据个人角色、访问时间或特定任务来区分访问级别,维护一个完善的访问管理数据库,并确保根据访问级别对信息进行分类。 这是最有效的 CI/CD 安全最佳实践之一,可通过智能团队管理应用。

践行“最小特权”原则

最小权限要求仅授予对特定角色或任务所需的信息的访问权限。 换句话说,个人可以访问限制性数据集和 CI/CD 流水线的一部分——与分配给他们完成的任务或目标所需的权限相同。 这种做法还应扩展到连接的系统、设备和应用程序,因为它们需要权限和不同的级别才能完成任务。 确保定期调查和审查访问的级别以强化最小权限,并保持生态系统的安全

4. 确保 Git 安全无虞

众所周知,Git 已然成为黑客和其他安全威胁的主要目标。 项目中的每个开发人员和测试人员都需要经过全面的训练,以保证他们了解如何安全使用 Git、避免常见安全陷阱以及保护 Git 上的代码。

利用 .gitignore 文件来避免意外提交生成的缓存文件和标准缓存文件。 此外,可以实施并使用本地存储的安全备份存储库来作为备份机制的一部分。

结  论       

将 DevSecOps 整合到开发流水线中可能相当复杂,尤其是对于刚接触该方法的团队而言。 在前期,可以尝试将过程分为多个容易实现的小步骤,让团队熟悉 DevSecOps 工具、 原则和实践,从而改变团队观念和个人思维方式。

DevSecOps: CI/CD 流水线安全的最佳实践的更多相关文章

  1. 如何在 Jenkins CI/CD 流水线中保护密钥?

    CI/CD 流水线是 DevOps 团队软件交付过程的基本组成部分.该流水线利用自动化和持续监控来实现软件的无缝交付.通过持续自动化,确保 CI/CD 流水线每一步的安全性非常重要.在流水线的各个阶段 ...

  2. Pipeline流水线设计的最佳实践

    谈到到DevOps,持续交付流水线是绕不开的一个话题,相对于其他实践,通过流水线来实现快速高质量的交付价值是相对能快速见效的,特别对于开发测试人员,能够获得实实在在的收益.很多文章介绍流水线,不管是j ...

  3. devops-5:从0开始构建一条完成的CI CD流水线

    从0开始构建一条完成的CI CD流水线 前文中已经讲述了静态.动态增加agent节点,以动态的k8s cloud为例,下面就以Maven构建Java程序为例,开始构建出一条完整的CI CD流水线. 实 ...

  4. Docker: Jenkins与Docker的自动化CI/CD流水线实战

    什么是CI/CD 持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈.持续部署(Continuous Deployme ...

  5. Jenkins自动化CI CD流水线之1--介绍与安装

    第1章 大纲 CI/CD, DevOps介绍 Git安装与使用 Jenkins安装与使用 权限管理 参数化构建 Master-Slave 流水线(Pipeline) 邮件通知 应用案例 自动发布PHP ...

  6. 容器平台自动化CI/CD流水线实践之一:环境概述

    一.架构图

  7. Jenkins自动化CI&CD流水线

    1 环境说明 主机名称 IP cpu核数/内存/硬盘 安装软件 用途 controlnode 172.16.1.120 2/2/60 git 代码仓库 slavenode1 172.16.1.121 ...

  8. 使用 jenkins 搭建CI/CD流水线 (MAC)

    如何搭建持续集成/持续交付平台?? 如何使用jenkins搭建持续交付流水线,以及和其他工具(如artifactory)集成?如何使用元数据,记录软件发布过程的构建信息,测试结果,并用rest Api ...

  9. Jenkins自动化CI CD流水线之8--流水线自动化发布Java项目

    一.前提 插件:Maven Integration plugin 环境: maven.tomcat 用的博客系统代码: git clone https://github.com/b3log/solo. ...

  10. Jenkins自动化CI CD流水线之5--pipeline

    一.概览 二.安装 在对jenkins进行初始化安装时,默认已经安装了jenkins的相关插件,如下图所示: 三.实操 新建任务: 编写pipeline脚本: 我们可以借助流水线语法去做. test流 ...

随机推荐

  1. GIT协作流程规范

    分支模型 集中式的分支模型 目前团队使用的模式属于老旧的集中式分支模型,简单的总结就是: 开发时: 团队的所有成员都在dev分支上开发(也支持少部分的特性分支feature-xxx). 测试时: 当功 ...

  2. 如何对BIOS/UEFI 更新

    确定当前BIOS/UEFI版本: 在启动计算机时,按下相应的键(通常是DEL.F2.或F10,具体取决于制造商),进入BIOS/UEFI设置.在系统信息或主页部分,你应该能够找到当前的BIOS/UEF ...

  3. Android反编译之修改应用包名

    前言 近期看B站数码区这条视频 [大米]破处理器,它能行吗?K50电竞版评测_哔哩哔哩_bilibili 时,发现了UP主的一个比较骚的操作: 嗯?apk文件可以直接拿来使用修改包名的?作为 Andr ...

  4. 【Android】使用litepal实现数据库的创建和升级

    1.配置litepal 配置过程见:2.进行创建和升级数据库,可以省略sql语句的录入 定义一个Note类,代码如下 接下来将note类添加到映射模型列表当中,修改litepal.xml中的代码.如下 ...

  5. Linux笔记03: Linux常用命令_3.3文件操作命令

    3.3 文件操作命令 3.3.1 stat命令 ●命令名称:stat. ●英文原意:display file or file system status. ●所在路径:/usr/bin/stat. ● ...

  6. K8s 里如何优雅地使用 /dev/shm 实现容器间共享内存

    目录 1. 从 docker run 的 --shm-size 参数聊起 2. Linux 里的 /dev/shm 3. Docker 对共享内存的支持 4. K8s 里如何设置 /dev/shm 大 ...

  7. 3D 高斯喷溅 🤗 为什么图形永远不会相同

    高斯喷溅 (Gaussian Splatting) 技术是一种翻天覆地的渲染手段,能够以 144 帧每秒的速度渲染出高质量的场景,这和传统的图形处理流程截然不同 这种将高斯数据转换成图像的过程,与训练 ...

  8. Transformer在量化投资的应用

    导语 RNN.LSTM和GRU网络已在序列模型.语言模型.机器翻译等应用中取得不错的效果.循环结构(recurrent)的语言模型和编码器-解码器体系结构取得了不错的进展. 但是,RNN固有的顺序属性 ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (168)-- 算法导论13.2 1题

    一.用go语言,写出 RIGHT-ROTATE 的伪代码. 文心一言: 在计算机科学中,右旋转(RIGHT-ROTATE)是一种常见的操作,通常用于数组或链表.以下是一个使用Go语言实现右旋转的伪代码 ...

  10. Spring Eureka 源码解析

    本文将简要分析一下关于 Spring Eureka 相关的一些必要的源代码,对应的版本:Spring Cloud 2021.0.1 @EnableEurekaServer 注解 @EnableEure ...