流水线的安全与合规 - 构建可信的交付链


“安全左移 (Shift-Left Security)”的理念

“安全左移”是 DevSecOps 的核心理念,指的是将安全测试和考量,从软件开发生命周期 (SDLC) 的末端(发布前),尽可能地向左移动到更早的阶段(如编码、构建、测试阶段)。

为何对 SRE 至关重要?

  • 成本与效率: 在开发早期发现并修复一个安全漏洞的成本,远低于当它已经部署到生产环境后再去修复的成本。
  • 主动防御: “左移”能帮助我们在漏洞进入生产环境之前就将其拦截,极大地减少了 SRE 需要处理的生产安全事件数量。
  • 文化契合: 这完全符合 SRE “通过工程手段解决运维问题”和“主动预防而非被动救火”的核心思想。

CI/CD 流水线正是实践“安全左移”的最佳平台。

保护流水线自身

在集成安全扫描之前,我们首先要确保流水线本身是安全的。

1. 分支保护规则 (Branch Protection Rules)

在 GitHub 中,我们可以为关键分支(如 main)设置保护规则,这是防止不合格或未授权代码合入的第一道防线。

  • SRE 应倡导的关键规则:
    1. 要求合并前进行代码审查 (Require pull request reviews before merging):强制要求至少有一位(或多位)其他团队成员审查代码。
    2. 要求状态检查通过后方可合并 (Require status checks to pass before merging):这是核心!我们可以将 CI 任务(如 build-and-test 和后续的安全扫描任务)设置为必须通过的状态检查。这意味着任何导致测试或扫描失败的代码变更都无法被合并
    3. 使用 CODEOWNERS 文件: 可以定义代码库中特定文件或目录的所有者,当这些文件被修改时,必须得到相应所有者的批准。
    4. 禁止强制推送 (Do not allow force pushes):防止重写 main 分支的历史记录。

2. 密钥管理与访问控制 (Secrets Management & Access Control)

我们在第四篇中使用了 GitHub Secrets 来存储 KUBE_CONFIG。这是基础,但对于访问云平台等更复杂的场景,有更现代、更安全的方式。

  • OpenID Connect (OIDC):这是一种无需存储长期静态凭证(如云平台的 Access Key/Secret Key)即可让 GitHub Actions 与云服务商(如 AWS, GCP, Azure)进行安全认证的先进机制。
    • 工作原理 (高层次):流水线启动时,GitHub Actions 会向云服务商出示一个临时的、包含了仓库和工作流信息的 OIDC 令牌。云服务商验证该令牌的真实性后,会颁发一个有时效性的、短期的云访问凭证给流水线。
    • SRE 优势: 彻底消除了在 GitHub Secrets 中管理和轮换云平台长期密钥的需要,极大提升了安全性。

在流水线中集成自动化安全扫描

现在,让我们开始将各种自动化安全扫描作为“门禁”集成到我们的 .github/workflows/ci.yml 文件中。

A. 依赖项漏洞扫描 (SCA - Software Composition Analysis)

我们的应用依赖了大量的第三方开源库 (npm 包),这些库可能存在已知的安全漏洞。

  • 目标: 扫描 package.json 中的依赖项,发现已知的 CVE 漏洞。
  • 工具: 使用 GitHub 原生的 dependency-review-action
  • 实施: 在 build-and-test 任务中增加一个步骤。
# 在 jobs.build-and-test.steps 中增加
# ...
- name:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85386.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85386.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85386.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​​​​​​​神经网络基础讲解 一

​​一.神经网络 ​ ​​1. 全连接神经网络(Fully Connected Network, FCN)​​ ​​核心概念:​​ ​​输入层​​:接收原始数据(如数字、图片像素等) 数字矩阵 。​​隐藏层​​:对数据…

MySQL 8.0 OCP 英文题库解析(二十二)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题201~210 试题2…

【大模型推理】PD分离场景下decoder负载均衡,如何选取decoder

https://mp.weixin.qq.com/s?__bizMzg4NTczNzg2OA&mid2247507420&idx1&sn4b32726abd205c7f94144bcb9105330f&chksmce64b9fc7f1d8de04a40b0153302dee52262c6f104c67195e2586e75c8093b8be493f252c8a3#rd 在非 Local 场景下,Prefill 定时获取 Decode …

【IP地址】IP应用场景的使用方向

网络安全领域 通过IP地址查询,安全系统能够实时监控网络流量,识别异常访问行为。例如,当某个IP地址在短时间内频繁发起大量请求,且访问模式与正常用户存在明显差异时,系统可将其标记为可疑IP,触发风险预警…

3-18 WPS JS宏 颜色设置实例应用(按条件设置单元格颜色)学习笔记

前面讲解了关于单元格的一些格式的设置,本节课再讲解一下各种清除方法。 1.函数解析与用法 Range().clear()//清除全部 Range().Value2null //清除内容 Range().ClearContents()//清除内容 Range().ClearFormats()//清除格式 Range().EntireRow.Range()//以Ra…

从零开始的云计算生活——第二十天,脚踏实地,SSH与Rsync服务

目录 一.故事背景 二.SSH带外管理 1.概述 2. 配置文件 3.命令解析 4.登录方式配置 a.用户名密码登录 b.公钥验证登录 5.实操生成密钥对 三.Rsyncsersync实现数据实时同步 1.rsync概述 2.rsync运行原理 3.rsync部署 4.备份测试 配置备份目录 5.rsyncsersync 实现…

SpringAI + DeepSeek大模型应用开发 - 初识篇

一、认识AI 1. AI的发展 AI,人工智能(Artificial Intelligence),使机器能像人类一样思考、学习和解决问题的技术。 2. 大模型及其原理 在自然语言处理(Natural Language Processing, NLP)中,…

c++第八天-多态

虚函数虚析构函数纯虚函数与抽象类 多态实现的条件:(1)公有继承 (2)派生类重写基类虚函数 (3)基类指针/引用指向派生类对象 虚函数不能是构造函数,不能是静态函数,不能…

全景图渲染Vue3+TS使用Photo Sphere Viewer插件实现

1.Photo Sphere Viewer插件安装: title=插件安装 体验AI代码助手 代码解读复制代码npm install photo-sphere-viewer -S 或 yarn add photo-sphere-viewer -S 2.原始全景图展示 初始化标签容器 体验AI代码助手 代码解读复制代码 // 全景图的根节点必须要具备宽高 TS引用,创建…

Redis之分布式锁(3)

这篇文章我们来详细介绍一下如何正确地基于Redis实现分布式锁。 基于Redis的分布式锁实现 组件依赖 首先通过Maven引入Jedis开源组件&#xff0c;在pom.xml文件加入下面的代码&#xff1a; <dependency><groupId>redis.clients</groupId><artifactId&g…

Java课堂笔记11

三个修饰符 一、abstract&#xff08;抽象&#xff09; 1.抽象方法只能在抽象的类里&#xff0c;只有方法的声明&#xff0c;没有方法的实现。&#xff08;没有{}直接&#xff1b;结尾&#xff09;。 2.abstract修饰的类称为抽象类。 注意&#xff1a;&#xff08;1&#x…

Linux 核心知识点整理(高频考点版)

一、编译与工具链 GCC 编译流程 四阶段&#xff1a;预处理&#xff08;-E&#xff0c;处理头文件 / 宏&#xff09;→ 编译&#xff08;-S&#xff0c;生成汇编&#xff09;→ 汇编&#xff08;-c&#xff0c;生成目标文件&#xff09;→ 链接&#xff08;生成可执行程序&…

轻量化社交管理方案:Skout与云手机的巧妙搭配

在移动社交时代&#xff0c;许多用户开始尝试通过多账号管理来拓展社交圈层。近期测试了Skout社交平台与亚矩阵云手机的搭配使用&#xff0c;发现这个组合为轻量级社交账号管理提供了一个值得关注的解决方案。 基础功能介绍 这套组合的核心优势在于&#xff1a; 通过云手机实…

ETL连接器好用吗?如何实现ETL连接?

目录 一、ETL连接器的功能和优势 1. 数据抽取能力 2. 数据转换功能 3. 数据加载功能 4. 优势总结 二、实现ETL连接的步骤 1. 需求分析 2. 选择合适的ETL连接器 3. 配置数据源和目标系统 4. 设计ETL流程 5. 开发和测试ETL任务 6. 部署和监控ETL任务 三、ETL连接器在…

uniapp实现聊天中的接发消息自动滚动、消息定位和回到底部

前言 前言无需多言&#xff0c;想必大家对聊天软件的功能已经很熟悉&#xff0c; 这里不做过多赘述&#xff0c;笔者通过uniapp实现聊天中的接发消息自动滚动、消息定位和回到底部。 代码实现 <template><view class"chat-container"><!-- 消息列表…

MyBatisMyBatis plus

整合 MyBatis 到 Spring 或 Spring Boot 项目中&#xff0c;可以极大地简化开发流程&#xff0c;尤其是当使用 Spring Boot 时&#xff0c;它提供了自动配置功能&#xff0c;使得集成更加简便。 在 Spring Boot 中整合 MyBatis 1. 添加依赖 首先&#xff0c;在 pom.xml 文件中…

Stable Diffusion 实战-手机壁纸制作 第二篇:优化那些“崩脸”和“马赛克”问题,让图像更加完美!

欢迎回来!在《StableDiffusion实战-手机壁纸制作》系列的第一篇中,我们成功完成了基础操作,制作出了令人炫目的手机壁纸。 今天,我们将进入一个更高阶的领域——优化处理。因为谁不想让生成的艺术品更完美呢?尤其是避免“崩脸”和“马赛克”这种让人抓狂的问题! 创作的路…

408第一季 - 数据结构 - B树与B+树

B树 性质 可以看见一个节点可以有多个数字了 然后也满足左小右大的特征 然后所有的叶子节点都在同一层&#xff0c;然后2个数字的节点就可以有3个分支 然后呢&#xff0c;每个节点里面到底有几个数字是有规定的公式的 就这个公式&#xff0c;m是5阶的&#xff0c;算出来是2和…

SSRF5 Gopher 协议对内网 Web 服务进行 sql 注入 GET 类型和POST类型

实验环境&#xff1b; Centos7.6上同时安装sqli-lib和pikachu 一.Gopher 协议对内网 Web 服务进行 sql 注入 GET 类型 我们先访问sqli-lib第1关 然后我们构造URL&#xff1a; http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlhttp://192.168.112.12/sql…

Python打卡DAY31

DAY31&#xff1a;文件的规范拆分和写法 恩师浙大疏锦行 知识点&#xff1a; 规范的文件命名规范的文件夹管理机器学习项目的拆分编码格式和类型注解 一、机器学习项目流程&#xff1a; 1、数据加载&#xff1a;从文件、数据库、API 等获取原始数据。 - 命名参考&#xff1a;…