Skip to content
CI/CD 流水线核心模型 · 第 3 篇 / 共 3 篇
领域运维与部署
专题CI/CD 与发布治理专题
当前序列CI/CD 流水线核心模型
阅读位置第 3 篇 / 共 3 篇当前专题第 2 个序列 / 共 4 个序列

Secret 管理怎么接进 CI/CD

CI/CD 里最危险的一类隐患,不是脚本写错,而是敏感信息在构建、日志、制品和部署环节里到处泄漏。Secret 管理的重点不是“能不能读到”,而是“谁在什么阶段可以读到多少”。

先说结论

  • Secret 不要写死在代码、流水线 YAML、镜像和制品里
  • 构建阶段尽量少接触生产 Secret,部署阶段按环境动态注入
  • 流水线必须具备权限隔离、访问审计和轮换能力
  • 能用短期凭证就不用长期固定密钥,能按环境分离就不要混用

一、先分清 Secret 会经过哪些阶段

一条典型流水线里,Secret 可能会出现在:

  1. 拉代码和依赖阶段
  2. 构建镜像或制品阶段
  3. 部署和发布阶段
  4. 运行时容器或进程启动阶段

这几个阶段对 Secret 的需求完全不同。
很多问题就出在:本来只需要部署时读取,却在构建阶段就把生产密钥拿进来了。

二、核心做法

分环境隔离

开发、测试、预发、生产要使用独立 Secret。不要为了省事复用一套账号密码,否则一旦测试日志泄漏,生产也会一起暴露。

分阶段暴露

编译、单测阶段通常不需要生产 Secret;真正需要敏感信息的往往是部署、发布校验和运行阶段。能晚一点注入,就不要提前暴露。

走统一密钥中心

无论是云厂商 KMS、Vault,还是 Kubernetes Secret + 权限体系,都比把变量硬写在 Jenkins、GitLab CI 配置里更稳。流水线只拿临时访问令牌,真正的值从密钥中心动态获取。

三、一条更稳的落地链路

  1. 开发侧只维护 Secret 名称,不维护明文值。
  2. 流水线在运行时根据环境和服务名拉取对应密钥。
  3. 部署工具把 Secret 注入到目标运行环境,而不是写入构建产物。
  4. 日志默认脱敏,命令回显关闭敏感输出。
  5. 定期轮换密钥,并验证旧密钥失效是否生效。

如果你在 Kubernetes 上运行服务,更推荐把 Secret 注入放在部署清单或运行时层,而不是在 CI 阶段写入 .env 文件再一起打包。

四、几种常见方案怎么选

1. 云厂商 KMS / Secret Manager

适合云上部署、环境边界清晰、希望统一审计的团队。

2. Vault

适合对权限、租约、动态凭证要求更高的团队,但运维复杂度也会更高。

3. Kubernetes Secret

适合已经把应用都托管在 K8s 上,并且会配合 RBAC、命名空间隔离和密文存储一起使用的团队。

五、常见误区

.env 文件直接传进仓库

这是最常见也最危险的泄漏方式,尤其在多人协作和公共仓库场景下。

让 CI 平台永久保存生产密码

长期静态凭证一旦泄漏,影响面很大。优先使用短期 Token、OIDC 或临时授权。

Secret 注入了就算完成治理

如果没有审计、没有轮换、没有最小权限,同样会在生产中留下隐患。

构建镜像时把 Secret 烘焙进去

这会让 Secret 跟着镜像层、缓存和制品仓库长期存在,后面很难回收。

六、上线后至少要补的治理动作

  • Secret 访问审计
  • 定期轮换
  • 环境隔离检查
  • 日志脱敏检查
  • 流水线变量权限审查

总结

Secret 接入 CI/CD 的关键,不是让流水线“拿得到”,而是让它只在必要阶段、以最小权限、可追踪地拿得到。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 回看前文会更完整制品版本号和构建产物怎么管理适合把阶段划分、版本产物和敏感信息管理放在一起看。CI/CD 与发布治理专题 · CI/CD 流水线核心模型同一序列 · 回看前文会更完整流水线阶段和门禁到底该怎么拆适合把阶段划分、版本产物和敏感信息管理放在一起看。CI/CD 与发布治理专题 · CI/CD 流水线核心模型同专题其他序列 · 共享标签:CI/CD、部署交付多环境发布怎么设计:开发、测试、预发、生产不只是名字不同适合沿着流水线设计、自动部署、发布策略、数据库变更和多环境治理这条线往下读。CI/CD 与发布治理专题 · CI/CD 与发布治理同专题其他序列 · 共享标签:CI/CD、部署交付灰度发布和 feature flag 应该怎么配合适合把缓存、制品库、灰度发布、数据库变更和回滚演练放在同一条 CI/CD 主线上看。CI/CD 与发布治理专题 · CI/CD 流水线稳定性与发布治理跨专题关联 · 共享标签:CI/CD、部署交付镜像分层为什么会影响构建速度和回滚适合把镜像分层、镜像瘦身、时区日志、静态缓存和 WebSocket 代理放进一条容器交付主线上看。容器与站点部署专题 · 容器镜像与站点交付细节跨专题关联 · 共享标签:CI/CD、部署交付Deployment 回滚到底依赖了什么信息适合把命名空间、回滚、PDB、HPA、Mesh 和调度约束放在一条 Kubernetes 治理主线上整理。Kubernetes 专题 · Kubernetes 编排约束与交付治理
继续阅读CI/CD 流水线核心模型当前序列第 3 篇 / 共 3 篇当前专题第 2 个序列 / 共 4 个序列
往前看
上一篇制品版本号和构建产物怎么管理回到当前序列上一章上一序列CI/CD 与发布治理从第 1 篇开始:CI/CD 到底怎么落地
往后看
下一序列CI/CD 发布治理与演练从第 1 篇开始:数据库迁移和回填怎么配合流水线

把零散经验整理成可查、可复用、可持续更新的企业级知识门户