别再“跑得通就行”了:软件供应链安全这事,迟早轮到你(SBOM / Sigstore / in-toto 实战聊聊)

举报
Echo_Wish 发表于 2025/12/27 20:04:40 2025/12/27
【摘要】 别再“跑得通就行”了:软件供应链安全这事,迟早轮到你(SBOM / Sigstore / in-toto 实战聊聊)

别再“跑得通就行”了:软件供应链安全这事,迟早轮到你(SBOM / Sigstore / in-toto 实战聊聊)

作者:Echo_Wish


说句掏心窝子的实话。

以前做运维,大家的安全观念是这样的👇

系统能跑、业务不炸、告警不红,就是好系统。

但这两年,我自己明显感觉到一个变化:
安全不再是“上线后的事情”,而是从你敲下 git push 那一刻就开始了。

而软件供应链安全,说白了,就是一句话:

你跑的这些代码、镜像、依赖,到底是不是“你以为的那一套”?

今天这篇文章,我不想讲一堆概念定义,而是站在运维 / DevOps 实战视角,聊聊这三样东西怎么真正“落地”:

  • SBOM:你到底引了多少“祖宗十八代”
  • Sigstore:你这个包,到底是谁给你“签的名”
  • in-toto:这玩意儿,是不是被人半路掉包过

一、先别谈安全,先承认一个现实

我先说一个你我都心里有数的现实👇

90% 的系统,代码不是我们写的,是我们“拼”的。

  • OS 是别人的
  • Runtime 是别人的
  • SDK 是别人的
  • 镜像里一层一层,全是别人写的

那问题就来了:

  • 出事了,你知道是哪一层吗?
  • 被投毒了,你能定位到吗?
  • 审计来了,你拿什么证明?

这时候,SBOM、Sigstore、in-toto 就不是“安全圈的高级玩具”,而是运维兜底工具


二、SBOM:别再“我大概知道用了啥”

1️⃣ SBOM 到底解决什么问题?

SBOM(Software Bill of Materials),翻译过来就是:

软件的“配料表”

不是你脑子里“我记得我用了 Spring Boot + Log4j”,
而是机器可读、可审计、可比对的清单

它回答的不是“你觉得你用了什么”,而是:

  • 你到底引了哪些组件?
  • 版本是多少?
  • 从哪来的?
  • 有没有漏洞?

2️⃣ SBOM 落地第一步:先生成再说

别一上来就搞治理、平台、流程,
第一步只有一个字:生成。

比如,用 Syft 给镜像生成 SBOM:

syft nginx:1.25 -o json > sbom.json

你会看到什么?

  • libc、openssl、zlib
  • 版本号
  • 依赖路径
  • 包管理器来源

那一刻你会意识到一件事👇
你对自己跑的系统,其实没你想得那么了解。


3️⃣ 我个人对 SBOM 的态度

说点真心话。

SBOM 不会立刻提升系统安全性
但它会极大提升三样东西:

  • 可见性
  • 可追责性
  • 安心感(这点很重要)

运维最怕的不是问题本身,
而是出问题时——你连底牌都没有


三、Sigstore:别再靠“我信你”

1️⃣ 传统签名的痛点,运维都懂

以前做镜像签名、包签名,基本是这样:

  • 私钥存哪?
  • 过期了怎么办?
  • 换人了怎么办?
  • CI 机器被攻了咋办?

很多团队干脆就一句话:

算了,先不签了。

但 Sigstore 干了一件特别“运维友好”的事👇
把复杂的密钥管理,直接“云化 + 身份化”。


2️⃣ 用 cosign 给镜像签名(真的不复杂)

cosign sign my-registry/app:1.0.0

不需要你自己管私钥
直接用 OIDC(GitHub Actions / GitLab CI)

验证的时候:

cosign verify my-registry/app:1.0.0

你能验证什么?

  • 是不是 CI 产出的
  • 是不是这个 Repo
  • 是不是这个 Workflow

这对运维意味着什么?

以后你可以理直气壮地说:
“没签名的镜像,别想进集群。”


3️⃣ Sigstore 在运维侧的真实价值

我不夸大它的安全性,只说一句实在的👇

Sigstore 让“责任”变得清晰了。

谁构建的
谁发布的
谁背锅的

都写在签名里。


四、in-toto:把“过程”也保护起来

1️⃣ 你有没有想过这个问题?

假设:

  • 镜像有签名 ✅
  • SBOM 也有 ✅

但中间过程呢?

  • 构建机有没有被篡改?
  • 测试结果是不是伪造的?
  • 制品是不是被偷偷替换过?

in-toto 解决的就是一句话:

“你这玩意儿,是不是一路干净地走过来的?”


2️⃣ in-toto 的核心思想(运维版)

不讲理论,讲人话:

  • 每个关键步骤都有“证明”
  • 每一步都可追溯
  • 最终制品 = 一整条可信链路

3️⃣ 一个简化示例(构建步骤签名)

in-toto-run \
  --step-name build \
  --products app.tar \
  --key builder.key \
  -- make build

最后你会得到一个 metadata 文件,
记录了:

  • 谁执行的
  • 执行了什么
  • 生成了什么

你再也不是“我觉得这个包是干净的”,
而是——我能证明它是干净的


五、别一口气全上,我给你一个“运维友好”落地顺序

这是我自己比较认可的顺序👇

第一阶段(最现实)

  • 镜像 SBOM
  • 基础漏洞扫描
  • SBOM 归档

第二阶段(防止误操作)

  • Sigstore 镜像签名
  • 集群侧校验(Admission Controller)

第三阶段(安全成熟度)

  • in-toto 关键链路
  • 构建 / 测试 / 发布全留痕

记住一句话:

安全不是“全上”,而是“别再裸奔”。


六、写在最后:供应链安全,其实是运维的尊严

我最后说点不那么技术的。

很多运维兄弟姐妹,其实背了不少锅:

  • 包不是你引的
  • 代码不是你写的
  • 事故却是你通宵处理的

软件供应链安全,本质上是在帮运维做一件事:

把“我不知道”变成“我能证明”。

这不是形式主义,
这是职业尊严

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。