保护 CI/CD 流水线
强化构建与发布路径。
保护 CI/CD 流水线 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
将流水线作为攻击目标
持续集成/持续交付流水线拥有访问源代码、机密信息和生产环境的高权限。入侵流水线后,攻击者就能在未来的每一次构建中注入后门,同时绕过代码审查。它是现代工程领域中价值最高的攻击目标之一。
请将流水线视为生产基础设施:它应当像在线系统一样接受加固、监控,并遵循最小权限原则。
构建中的不可信输入
流水线会根据您无法完全控制的事件自动运行:拉取请求、标签和外部贡献。恶意拉取请求可能会尝试修改构建本身。
- 派生仓库中的恶意流水线定义可能会尝试窃取机密信息
- 不受信任的代码可能会以与受信任构建相同的权限运行
请将受信任和不受信任的工作流分开:不要向由外部拉取请求触发的任务提供机密信息。
固定操作和镜像版本
流水线步骤通常会通过可变标签拉取第三方操作或容器镜像。如果该标签被重新指向恶意内容,您的构建就会遭到入侵。请使用不可变摘要进行固定。
# BAD: mutable tag can be moved under you
uses: some/action@v3
# GOOD: pinned to an immutable commit SHA
uses: some/action@a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
# pin container steps by digest too
image: build-tools@sha256:9f86d081884c7d659a2feaa0c55ad015...令牌的最小权限
流水线的默认令牌通常拥有过多权限,能够对整个仓库或注册表进行写入。请将权限范围缩小到每个任务确切需要的程度。
# scope the default token to read-only, grant more only where needed
permissions:
contents: read
jobs:
publish:
permissions:
contents: read
packages: write # only this job can publish机密信息管理
硬编码或广泛共享的机密信息是最主要的泄露途径之一。请采取严格的处理措施:
- 将机密信息存储在机密信息管理器或持续集成的机密信息存储中,绝不要存放在代码里
- 优先使用短期 OIDC 联邦,而不是静态云密钥
- 在日志中遮蔽机密信息,并阻止其回显
- 将每项机密信息的使用范围限制在所需的最少任务和环境内
OIDC 联邦允许流水线将构建时身份交换为短期云凭证,从而彻底移除长期密钥。
临时隔离运行器
重复使用的构建运行器可能会将恶意软件或泄露的机密信息从一个任务带到下一个任务。临时运行器会为每个任务全新创建,并在任务完成后销毁,因此不会留下任何持久内容。
- 每次构建使用一个干净环境,完成后将其丢弃
- 受信任和不受信任的任务之间没有共享状态
- 将网络出站流量限制为必需的端点
这直接支持 SLSA L3 的隔离目标。
保护源代码分支
流水线的信任始于源代码控制。如果任何人都可以推送到发布分支,那么下游的签名和扫描都毫无意义。
- 合并前要求进行拉取请求审查
- 在受保护分支上强制使用已签名的提交
- 要求状态检查(测试、扫描)通过
- 禁止强制推送以及向
main直接推送
# require signed commits on a branch
git config commit.gpgsign true
# verify a commit signature locally
git verify-commit HEAD在流水线中进行扫描
将安全门禁直接集成到持续集成中,让问题导致构建失败,而不是让问题进入生产环境。
# secret leak detection
gitleaks detect --source . --redact
# dependency vulnerabilities
osv-scanner --lockfile=package-lock.json
# IaC and config misconfig
trivy config .
# fail the job on critical findings (non-zero exit stops CI)发布的双人控制
高影响力的操作应当设置人工审批关卡。生产部署和凭证变更应当要求由作者以外的其他人员批准。
- 环境保护规则要求审查者在部署前进行审批
- 将构建身份与部署身份分开
- 任何单个操作者都不能既编写代码,又未经审查就将其推送到生产环境
这既能限制内部人员风险,也能限制单个遭入侵账户造成的影响范围。
审计与篡改检测证据
您必须能够还原流水线执行过的操作。请集中收集并保护流水线日志。
- 将持续集成日志发送到只能追加内容且访问受控的存储中
- 记录谁在何时修改了流水线定义
- 生成已签名的溯源信息,使软件制品能够追溯到特定构建
- 针对异常情况发出警报:新的自托管运行器、意外的机密信息访问、审查范围之外的配置变更
流水线加固清单
一条可防御的流水线应当结合源代码、构建和发布控制措施:
- 分支保护,以及经过审查和签名的提交
- 通过摘要固定操作和镜像版本
- 最小权限、短期 OIDC 令牌
- 临时隔离运行器
- 在流水线中进行机密信息、依赖项和配置扫描
- 双人发布审批
- 已签名的软件制品、SBOM、溯源信息和审计日志
快速检查:令牌权限
为高权限构建令牌选择正确的控制措施。
回顾:保护持续集成/持续交付流水线
您已经学会了如何强化整个构建和发布路径。
- 将流水线视为生产环境;它可以在未来的每一次构建中植入后门
- 将不可信的拉取请求构建与机密信息隔离
- 通过摘要固定操作和镜像版本;使用最小权限、短期 OIDC 令牌
- 使用临时隔离运行器并保护源代码分支
- 在流水线中进行扫描,要求双人发布审批,并保留具备篡改检测能力的审计日志
课程完成:现在您已经能够端到端地保护软件供应链。
用 AI 导师学习 Cyber Security Academy — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 76
- 课程
- 303
常见问题解答
「保护 CI/CD 流水线」课时是免费的吗?
是的 — 「保护 CI/CD 流水线」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「保护 CI/CD 流水线」这节课中我会学到什么?
强化构建与发布路径。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「保护 CI/CD 流水线」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 供应链威胁
- 软件物料清单(SBOM)
- 依赖项与制品签名
- 保护 CI/CD 流水线