返回博客
安全开发15 分钟阅读

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

A

Alexander Sverdlov

高级安全顾问

2026-05-21
中国 SaaS 的 SOC 2 安全软件开发生命周期:审计师必查的 6 个失分点与 90 天改造手册

安全开发 · SaaS · 2026 年 5 月

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

审计师发来一封邮件,只问一件事:上个月那次生产发布,对应的工单、代码评审、测试证据、部署审批在哪里。你的工程师回你一句「那次是周五晚上直接 push 上去的」。代码没问题,bug 也修好了,但这次变更在审计师眼里等于没有发生过。这是一份基于 14 家中国 SaaS 客户真实 SOC 2 项目整理出来的安全开发生命周期实战手册。

本文要点

  • 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 类证据。

SOC 2 SDLC 的 5 类证据 SOC 2 审计师在 SDLC 上要看的 5 类证据 全部围绕 CC8.1 变更管理这一条准则 1. 变更工单 每次生产变更对应一个工单或 Issue 记录变更原因、影响范围、回滚方案 这是审计师抽样取证的起点 2. 代码评审记录 每个 Pull Request 至少一位 非作者评审并留下书面意见 是 PR 合并前的硬性门槛 3. 测试与质量门 CI 自动跑单元与集成测试 SAST、SCA、密钥扫描同步执行 任一项失败即阻断合并 4. 部署审批与职责分离 部署到生产需要独立审批 写代码的人不能独自点上线 5 人团队也完全做得到 5. 可追溯链条 把前四类证据串成一根线:从工单到分支 commit、到 Pull Request、到 CI 记录、到部署日志, 任意一次变更都能倒推全程。审计师的取证方式永远是「抽样倒推」,随机挑几次变更看链条接不接得上。 中国 SaaS 最常缺的就是这根线:工单在飞书、代码在 Gitee、部署在脚本里,各自为政。 接通它,既是过审计的关键,也让任何线上事故都能在几分钟内定位到引入它的那次变更。
图 1. SOC 2 审计师在软件开发生命周期上要看的 5 类证据,全部围绕 CC8.1 变更管理。

这 5 类证据里,中国 SaaS 团队最容易忽略的是第 5 类,可追溯链条。你可能每一项都做了:有工单系统、有 PR 评审、CI 也在跑,但它们各自为政。审计师抽查一次变更时,你要花两天在四个系统里拼凑证据。把这根线接通,是整个 SDLC 改造里性价比最高的一步。你得到的不只是过审计,而是任何一次线上事故都能在 5 分钟内回答「这是哪次变更引入的」。

🔍

第二步

中国 SaaS 最常见的 6 个 SDLC 失分点

过去 14 个项目里,我们在第一次 SDLC 盘点时几乎每家都会发现下面这 6 个失分点中的至少 3 个。值得强调的是:没有一个失分点的根因是「工程能力不行」。中国 SaaS 的工程团队普遍很能打,问题全部出在「做了但没有留下审计师认得的痕迹」,或者「流程里缺了一道本该有的关卡」。

6 个 SDLC 审计失分点 中国 SaaS 最常见的 6 个 SDLC 失分点 没有一个根因是代码质量,全部是流程留痕 高危 1. 变更没有工单 代码改动直接 push 到主干 讨论散落在飞书群,事后翻不全 审计师无法抽查任何一次变更 动摇控制设计本身 高危 2. 自己批准自己的 PR 分支保护规则没有开启 或互相 LGTM 走形式 没有实质性的评审意见 职责分离失效 高危 3. 谁有密钥谁部署 部署到生产没有审批环节 写代码的人独自上线生产 没有部署与开发的职责分离 常被列为报告例外 高危 4. 测试环境用真实数据 生产库直接 dump 到测试或开发 同时违反 SOC 2 与 PIPL 个人信息超出必要范围处理 一旦发现影响报告可信度 中危 5. 缺少依赖与代码扫描 第三方组件漏洞无人监控 没有 SAST 与密钥扫描 API key 可能被提交进代码库 通常给整改窗口 中危 6. 紧急修复无追溯 hotfix 走没人管的特殊通道 事后不补工单、不补评审 成了绕过所有控制的黑洞 补一个流程即可消除
图 2. 14 家中国 SaaS 客户项目里反复出现的 6 个软件开发生命周期失分点。

这 6 项里,前 4 项审计师会直接判为「高风险」甚至列为报告例外,因为它们动摇的是控制的设计本身。后 2 项通常是「观察项」,给你整改窗口。好消息是:6 项里有 5 项可以靠配置 Git 平台和 CI 流水线在两周内解决,真正费时间的只有一项,把过去几个月没留痕的变更补上记录。所以越早开始,要补的旧账越少。

🔗

第三步

变更管理:从一个 commit 到生产环境的可追溯链条

变更管理的核心,是为每一次生产变更建立一条可追溯链条。审计师的取证方式永远是「抽样倒推」:他从你的部署日志里随机挑 5 到 15 次变更,然后顺着链条往回查,看每一环是否都有据可依。所以你要做的不是「写一份漂亮的变更管理政策」,而是让这条链条在工具层面自动成形,工程师按正常流程干活,证据就自动留下了。

变更管理可追溯链条 一次受控生产变更的 7 个环节 审计师抽样倒推时,每一环都要接得上 1 变更工单 记录变更原因、影响范围与回滚方案,是整条链条的起点 2 功能分支与 commit 在独立分支开发,commit 信息引用工单编号,不直接动主干 3 Pull Request 与代码评审 至少一位非作者评审并留下书面意见,评审记录永久保存 4 CI 自动化测试与扫描 单元与集成测试、SAST、SCA、密钥扫描全部通过,否则阻断合并 5 部署审批 由非代码作者的负责人批准上线,审批动作本身留下记录 6 生产部署与记录 部署工具自动记录上线时间、版本号与操作人 7 证据归档与可追溯 工单、PR、CI、部署记录互相关联,任意一次变更都能倒查全程
图 3. 一次受控生产变更的 7 个环节。工具配置到位后,这条链条会自动成形。

这条链条里有一个常被忽略的环节:紧急变更(hotfix)。审计师非常清楚生产环境会有半夜的紧急修复,他们不要求你「禁止紧急变更」,只要求紧急变更也有一条哪怕是简化的链条:事后 24 小时内补工单、补评审记录、补一次回顾。我们建议在变更管理政策里专门写一节「紧急变更流程」,并在飞书或企微里建一个固定的审批群,谁触发紧急变更,就在群里同步并 @ 一位负责人确认。这一个小动作,就能把「紧急通道」从审计师的失分项变成加分项。

第四步

职责分离与 CI/CD:让流水线替你产生证据

职责分离(Separation of Duties)是中国 SaaS 创始人最容易误解的一条。他们一听就皱眉:「我们工程团队就 8 个人,哪有人力搞职责分离?」但 SOC 2 的职责分离不是要你增加人手,而是要你确保「同一个人不能独自完成一次未经监督的生产变更」。一个 5 人团队完全做得到,关键不在人数,而在 Git 平台和 CI/CD 流水线的配置。

CI/CD 流水线作为证据机器 把流水线配置成「证据机器」 规则配置一次,之后每次变更的证据都自动产生 开发者在功能分支提交 Pull Request 分支保护规则(配置一次,永久生效) 强制评审 至少 1 位非作者批准 PR 作者不能批准自己的代码 状态检查门 测试 / SAST / SCA / 密钥扫描 必须全部通过才能合并 禁止直接推送 任何人不能绕过 PR 直接 push 到 main 分支 禁止 force push 保护提交历史不被改写 主分支也不能被删除 评审通过 + 检查全绿,合并进受保护的 main 部署审批门:由非代码作者的负责人批准 生产部署,部署工具自动记录版本 / 时间 / 操作人
图 4. 分支保护规则与部署审批门,把 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 天的拆解。

90 天 SDLC 改造节奏 把 SDLC 改造成 SOC 2-ready 的 90 天节奏 三个阶段,每阶段 30 天 第 1-30 天:立规矩 让新变更立刻全部合规 第 1 周 - 开启所有主仓库分支保护 - 强制评审 + CI 状态门 - 禁止直接推送与 force push 第 2-3 周 - 起草变更管理政策 - 工单与 PR 模板标准化 - CI 接入自动化测试 第 4 周 - SDLC 现状差距清单 - 整改优先级排序 - 紧急变更流程初稿 里程碑:新变更全部合规 第 31-60 天:补证据 扫描接入并补齐旧账 第 5-6 周 - SCA + 密钥扫描接入 CI - SAST 工具试点 - 部署审批门上线 第 7-8 周 - 测试数据脱敏流水线 - 职责分离落地核验 - 紧急变更流程定稿 第 9 周 - 回填近 3 个月变更留痕 - 残余差距清单 - 员工 SDLC 流程培训 里程碑:旧账补齐 第 61-90 天:过审计 审计师变更管理取证 第 10-11 周 - 内部变更抽查演练 - 审计师只读权限开通 - PR 与部署证据样本准备 第 12 周 - 审计师变更管理取证 - 紧急变更流程答辩 - 残余问题答复 第 13 周 - 残余问题整改 - SDLC 政策定稿归档 - 信任门户更新 里程碑:变更管理零例外
图 5. 把软件开发生命周期改造成 SOC 2-ready 的标准 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 实战经验

预约 30 分钟咨询 →

常见问题

中国 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

Alexander Sverdlov

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