中国 SaaS 的 SOC 2 安全软件开发生命周期:审计师必查的 6 个失分点与 90 天改造手册
Alexander Sverdlov
高级安全顾问

本文要点
- SOC 2 对软件开发生命周期的要求,几乎全部压在通用准则 CC8.1(变更管理) 一条上,它牵出 5 类必须能拿出来的证据
- 中国 SaaS 在 SDLC 上的 6 个高频失分点,没有一个的根因是「代码写得不好」,全部是「做了但证明不了」或「流程缺了一道关卡」
- 审计师不要求你用某个特定工具。GitHub、GitLab、Gitee 都行,关键是 分支保护 + 强制评审 + CI 状态门 这三件事
- 职责分离不是要你多招人。一个 5 人工程团队也能做到 「写代码的人不能独自批准、也不能独自部署到生产」
- 最危险的中国特有陷阱是 把真实用户数据复制进测试或开发环境。这同时是 SOC 2 失分项和 PIPL 违规
- 把 SDLC 改造成 SOC 2-ready,对一个 20 至 60 人的团队通常需要 8 至 12 周,其中一半时间花在补齐过去没有留痕的变更
2026 年 4 月,一家做 API 集成中台的杭州 SaaS 公司创始人把一封邮件转给我。邮件来自他们美国客户指派的 SOC 2 审计师,内容很具体:请提供上个月 3 月 18 日那次生产环境发布的完整变更记录,对应的工单、代码评审意见、测试通过的证据,以及谁批准了这次部署。
创始人回我一句话:「这次发布是我们一个后端工程师周五晚上直接 push 上去的,修了一个支付回调的 bug。没有工单。讨论是在飞书群里,大概翻得到。测试是他本地跑的。批准嘛,他自己就有部署权限。」
代码本身没问题,bug 也确实修好了。问题是这次变更在 SOC 2 审计师眼里,等于「没有发生过任何受控的事」。他们交付的产品很可靠,但他们的开发流程无法被审计。这两件事之间的差距,就是这篇文章要讲的全部内容。
我们接手时,这家公司有 28 名员工,工程团队 11 人。8 周后,他们的 SDLC 通过了 SOC 2 Type 1 的变更管理部分,审计师在报告里没有列任何例外(exception)。下面是这套改造打法,以及我们在 14 家中国 SaaS 客户项目里反复见到的失分点和修法。
第一步
SOC 2 对软件开发生命周期到底查什么
SOC 2 没有一章叫「软件开发生命周期」。它对 SDLC 的要求,绝大部分压在 2017 版信任服务标准的通用准则 CC8.1 上,也就是「变更管理」。这一条的意思是:组织要识别、开发、测试、批准并上线对基础设施、数据、软件和流程的变更。听起来抽象,但审计师把它落地成一件非常具体的事:随便挑你过去几个月里的一次生产变更,你能不能完整还原它的来龙去脉。
换句话说,审计师不在乎你的代码写得好不好,那是渗透测试和代码审计的事。他在 SOC 2 里只问一个问题:你的每一次生产变更,是不是都经过了一套「有人提出、有人评审、有测试、有人批准、可被追溯」的流程。这套流程的产出,就是审计师要的 5 类证据。
这 5 类证据里,中国 SaaS 团队最容易忽略的是第 5 类,可追溯链条。你可能每一项都做了:有工单系统、有 PR 评审、CI 也在跑,但它们各自为政。审计师抽查一次变更时,你要花两天在四个系统里拼凑证据。把这根线接通,是整个 SDLC 改造里性价比最高的一步。你得到的不只是过审计,而是任何一次线上事故都能在 5 分钟内回答「这是哪次变更引入的」。
第二步
中国 SaaS 最常见的 6 个 SDLC 失分点
过去 14 个项目里,我们在第一次 SDLC 盘点时几乎每家都会发现下面这 6 个失分点中的至少 3 个。值得强调的是:没有一个失分点的根因是「工程能力不行」。中国 SaaS 的工程团队普遍很能打,问题全部出在「做了但没有留下审计师认得的痕迹」,或者「流程里缺了一道本该有的关卡」。
这 6 项里,前 4 项审计师会直接判为「高风险」甚至列为报告例外,因为它们动摇的是控制的设计本身。后 2 项通常是「观察项」,给你整改窗口。好消息是:6 项里有 5 项可以靠配置 Git 平台和 CI 流水线在两周内解决,真正费时间的只有一项,把过去几个月没留痕的变更补上记录。所以越早开始,要补的旧账越少。
第三步
变更管理:从一个 commit 到生产环境的可追溯链条
变更管理的核心,是为每一次生产变更建立一条可追溯链条。审计师的取证方式永远是「抽样倒推」:他从你的部署日志里随机挑 5 到 15 次变更,然后顺着链条往回查,看每一环是否都有据可依。所以你要做的不是「写一份漂亮的变更管理政策」,而是让这条链条在工具层面自动成形,工程师按正常流程干活,证据就自动留下了。
这条链条里有一个常被忽略的环节:紧急变更(hotfix)。审计师非常清楚生产环境会有半夜的紧急修复,他们不要求你「禁止紧急变更」,只要求紧急变更也有一条哪怕是简化的链条:事后 24 小时内补工单、补评审记录、补一次回顾。我们建议在变更管理政策里专门写一节「紧急变更流程」,并在飞书或企微里建一个固定的审批群,谁触发紧急变更,就在群里同步并 @ 一位负责人确认。这一个小动作,就能把「紧急通道」从审计师的失分项变成加分项。
第四步
职责分离与 CI/CD:让流水线替你产生证据
职责分离(Separation of Duties)是中国 SaaS 创始人最容易误解的一条。他们一听就皱眉:「我们工程团队就 8 个人,哪有人力搞职责分离?」但 SOC 2 的职责分离不是要你增加人手,而是要你确保「同一个人不能独自完成一次未经监督的生产变更」。一个 5 人团队完全做得到,关键不在人数,而在 Git 平台和 CI/CD 流水线的配置。
上图的核心思想是:让流水线成为「证据机器」。一旦分支保护规则配好,工程师无论怎么操作,都不可能在没有评审、没有通过测试的情况下把代码合进主干;部署环节加一道人工审批门,写代码的人就无法独自上线。这些规则配置一次,之后每一次变更的证据都是自动产生的,你不需要任何人手工「收集证据」。审计时,你只要给审计师只读权限看分支保护设置和几次 PR 的历史,80% 的变更管理证据就交付完了。这是把一次性配置投入,换成长期零边际成本的合规产出。
第五步
中国特有的几个 SDLC 难题
前面四节适用于所有要做 SOC 2 的 SaaS。但中国 SaaS 在 SDLC 上还有几个本土特有的坑,美国的 SOC 2 指南里根本不会提。下面这张表是我们 14 个项目里反复处理的本土问题。
| 中国特有问题 | 为什么是 SOC 2 风险 | 实务做法 |
|---|---|---|
| 测试与开发环境用真实用户数据 | 同时是 SOC 2 保密性失分和 PIPL「超出必要范围处理个人信息」违规 | 建立数据脱敏流水线,测试与开发环境只允许脱敏或合成数据,脱敏过程本身作为受控变更记录在案。 |
| 代码托管在 Gitee 或自建 GitLab | 自建平台本身进入 SOC 2 范围,访问控制、补丁、备份都要自证 | 平台不是问题,只要支持分支保护与 PR 即可。自建 GitLab 需把它当成一项受审基础设施单独纳入控制矩阵。 |
| 变更审批走飞书或钉钉群消息 | 审批对象模糊,批的是「本周发布」而非具体变更,对不上号 | 工具中性,审计师不排斥飞书。但审批对象必须精确到 PR 或工单编号,并能和代码变更一一对应。 |
| 已过等保测评,以为覆盖了 SDLC | 等级保护与 SOC 2 的变更管理控制目标只有部分重合,报告语言不通用 | 等保的安全开发管理文档可作为基础,但需按 SOC 2 惯例重写控制描述,并补齐评审与可追溯证据。 |
| 外包或众包团队贡献生产代码 | 外部人员的访问权限、保密义务与代码评审责任不清晰 | 外包人员签保密协议,最小权限授权,其代码必须由内部正式员工评审与批准,不能自评自批。 |
这几项里,测试数据是唯一一个「踩了就同时违反两套法律」的雷区。把生产库 dump 到测试环境,在 SOC 2 里是保密性(Confidentiality)控制失分,在 PIPL 下是「超出必要范围处理个人信息」,在数据安全法下还可能涉及重要数据的违规流转。正确做法是建立数据脱敏流水线:测试和开发环境只能使用脱敏或合成数据,脱敏过程本身也作为一项受控变更记录在案。这件事修起来不难,但必须在审计师进场前修完,它属于那种「被发现一次,整份报告的可信度都受影响」的问题。
第六步
90 天把 SDLC 改造成 SOC 2-ready
把 SDLC 改造成 SOC 2-ready,对一个 20 至 60 人、工程团队 8 至 25 人的中国 SaaS,通常需要 8 至 12 周。注意这和拿到 SOC 2 报告的整体周期不是一回事。SDLC 改造是整个 SOC 2 项目里可以最先启动、也最该最先启动的一块,因为它的一部分工作量(补齐旧变更留痕)会随着时间推移越积越多。下面是 90 天的拆解。
如果你只能从这篇文章里记住一件事,那就是:今天就去把你主分支的分支保护规则打开。强制 1 位以上评审、强制 CI 通过、禁止直接推送和 force push,这四个开关在 GitHub、GitLab、Gitee 上都是几分钟的配置,却是整个 SDLC 合规里地基性的一步。从你打开它的那一刻起,新产生的每一次变更都自动是合规的。剩下的工作,是补旧账和写政策文件。
Atlant Security 如何帮你
中国 SaaS 的安全开发生命周期专项加固
我们和美国持牌审计师事务所长期合作,专门为 20 至 300 人的中国 SaaS 提供 SOC 2 全流程托管,其中 SDLC 与变更管理是我们最常被单独要求加固的一块。从 Git 平台与 CI/CD 流水线的合规配置、变更管理政策双语撰写、职责分离落地、测试数据脱敏,到审计师取证对接,一站式完成。中文沟通,按美国审计标准交付。
- SDLC 与变更管理专项加固,2 至 4 周可交付审计就绪状态
- 分支保护、CI 质量门、SAST 与 SCA 接入的实操配置
- 变更管理与安全开发政策双语模板
- 测试数据脱敏流水线设计
- 14 家中国 SaaS 客户的 SOC 2 实战经验
常见问题
中国 SaaS 工程团队经常问我们的问题
我们团队只有 6 个工程师,真的需要职责分离吗?
需要,但「职责分离」常被误解。SOC 2 不要求你按人数配岗,它要求「同一个人不能在无人监督下完成一次生产变更」。6 个工程师的团队,只要开启分支保护(代码作者不能批准自己的 PR)加上部署审批(写代码的人不能独自点上线按钮),就满足了。真正做不到职责分离的,是 1 到 2 人的团队,那种情况可以用「补偿性控制」:比如所有变更事后由创始人或外部 vCISO 复核,并在报告里说明。
一定要用 GitHub 吗?我们代码在 Gitee 或自建 GitLab。
不一定。SOC 2 是技术中立的,审计师不在乎品牌,只看三件事能不能做到:分支保护(强制评审、禁止直接推 main)、变更可追溯、CI 状态门。GitHub、GitLab(含自建)、Gitee 企业版都支持这些功能。需要注意的是自建 GitLab,它本身也成了 SOC 2 范围内的一项基础设施,它的访问控制、补丁、备份都会被审计。托管平台可以靠对方的 SOC 2 报告减轻你的举证负担,自建则全部要自己证明。
SOC 2 要求我们的单元测试覆盖率达到某个百分比吗?
不要求具体百分比。SOC 2 不是质量保证标准,它不规定测试覆盖率要到 70% 还是 80%。CC8.1 只要求「变更经过测试」。审计师想看到的是:你有测试这个环节、CI 里测试失败会阻断合并、并且有证据。一个有意义且稳定运行的测试套件,比一个「为了数字好看」的高覆盖率更重要。把精力放在让测试真正成为合并的门槛,而不是追覆盖率数字。
我们用飞书审批流来批准发布,审计师认吗?
认,但有前提。审计师不排斥飞书、钉钉、企微的审批流,工具是中性的。前提是这条审批流要能产出「谁、在什么时间、批准了哪一次具体变更」的不可篡改记录,并且这条记录能和代码变更对应起来。最常见的失分不是「用了飞书」,而是「审批和变更对不上号」,飞书里批的是「4 月发布计划」,实际上线的却是另外三个没提到的改动。建议把审批对象精确到 PR 或工单编号,不要批一个模糊的「本周发布」。
紧急修复(hotfix)会不会让我们审计失败?
不会,只要紧急修复也有留痕。审计师完全理解生产环境会有 hotfix,他们见过的每一家 SaaS 都有。会导致失分的不是「做了紧急修复」,而是「紧急修复成了绕过所有控制的黑洞」,没工单、没事后评审、没人知道改了什么。正确做法是在变更管理政策里写明紧急变更流程:允许先上线、后补流程,但要求 24 小时内补齐工单和评审记录。有 3 到 5 次有完整事后留痕的紧急变更,反而是控制有效运行的好证据。
SAST、SCA、DAST 这些扫描工具,SOC 2 要求买哪些?
SOC 2 不开购物清单,它不点名要求 SAST、SCA 或 DAST,准则要求的是「识别并管理漏洞」。落到实务,对中国 SaaS 我们的标准建议是三件套:依赖与组件扫描(SCA,查第三方库的已知漏洞)、密钥扫描(防止 API key、密码被提交进代码库)、静态代码扫描(SAST)。前两件几乎零成本,开源工具就够用。SAST 也可以从开源工具起步。DAST(动态扫描)和渗透测试是更高阶的要求,通常在 Type 2 阶段或客户明确要求时再加。
安全的软件开发生命周期,不是为了应付审计师而存在的额外负担。它真正的价值,是让你的工程团队在跑得更快的同时,每一次变更都留下可追溯的痕迹。SOC 2 只是第一个逼你把这件事做对的外部推力,一旦做对了,你会发现线上事故的定位时间、新人上手的速度、甚至代码评审的质量,都跟着变好了。
如果你正在准备第一份美国客户合同,或者审计师的取证清单已经发到你邮箱,从今天最便宜的一步开始:打开主分支的分支保护,给变更管理写一页政策,把过去三个月的发布补上工单。这三件事不需要预算,只需要一个下午的决心。等审计师来抽查的时候,你的流水线已经替你把证据准备好了。
想聊聊你公司工程流程的具体情况?预约 30 分钟咨询,或直接发邮件给 alexander@atlantsecurity.com。

Alexander Sverdlov
Atlant Security 创始人,两本信息安全著作的作者,亚洲最大网络安全会议演讲嘉宾, 联合国会议小组成员,前微软安全咨询团队成员,前阿联酋核能公司外部网络安全顾问。