现代CI/CD流水线对于快速可靠的软件交付至关重要。但随着流水线自动化开发生命周期的更多阶段——从代码验证到生产部署——它们也成为主要攻击目标。
传统流水线通常基于广泛信任运行:长期凭证、共享密钥、未验证的执行环境和宽松的访问控制。这些假设在当今云原生基础设施中引入重大风险,其中构建代理可能是临时的、跨区域分布且动态配置的。
零信任CI/CD通过分层防御深度方法应对这些风险。它确保流水线中没有任何内容被隐式信任——无论是执行的任务、调用它们的身份还是执行这些任务的系统。每个请求——无论是构建、测试、部署还是访问基础设施——都必须基于验证的身份、意图、上下文和执行环境进行动态评估。
这种模型有助于减少攻击面、控制爆炸半径并执行基于策略的控制,而不会减慢交付工作流。
在流水线中建立身份
零信任的核心原则是消除静态凭证。长期密钥难以轮换、容易被滥用且通常以不安全方式存储。大多数现代CI系统支持OpenID Connect(OIDC),使作业能够在运行时请求短期签名的身份令牌。
示例:OIDC令牌负载
|
|
这些令牌可以验证以确认正在运行的内容、谁触发了它以及来自哪个源。它们允许基于当前作业属性而非静态假设做出访问决策。
工作负载身份和执行环境验证
除了流水线作业本身,运行流水线的环境也很重要。执行CI/CD任务的代理和运行器也必须被识别和验证。没有这一层,攻击者可能通过劫持运行器或执行节点来冒充合法作业。
SPIFFE(面向所有人的安全生产身份框架)和SPIRE提供了标准化的加密工作负载身份标准/框架。它颁发短期自动轮换的凭证,工作负载使用这些凭证证明自己的身份——无需任何嵌入式密钥。
SPIFFE身份:
- 基于工作负载属性自动颁发
- 频繁轮换并快速过期
- 可使用相互TLS或JWT验证
- 将零信任扩展到运行流水线作业的基础设施,而不仅仅是作业本身
这使得CI/CD系统不仅能确保工作负载被授权,还能确保执行环境得到适当证明。在某些实现中,使用基于策略的凭证颁发服务来交换身份和证明声明,以获取范围受限的短期凭证——而不暴露长期密钥。
正如最近研究arXiv:2504.14760所探讨的,工作负载身份是现代零信任基础设施的基本要求,实现了任务及其执行环境的端到端证明。
使用Rego执行策略
仅有身份是不够的。零信任流水线还必须强制执行在给定条件下是否应发生某个操作。这就是策略即代码变得关键的地方。
使用Open Policy Agent(OPA)的Rego,访问决策可以包含运行时信号,如分支、提交签名、环境、时间窗口和基础设施身份。
示例:部署批准策略
|
|
此策略仅允许来自受信任源、在批准时间内且具有已验证提交的部署。这些策略构成了防御深度模型中的第二道防线,即使在身份有效时也能加强安全性。
端到端零信任CI/CD流程
|
|
此流程确保在授予访问权限之前,谁在请求、正在做什么、在哪里运行以及在什么条件下运行都得到验证。
上下文感知访问的Rego策略示例
需要票据批准的关键服务部署
|
|
多项目平台的租户隔离
|
|
运行器信任执行(基础设施验证)
|
|
这些规则展示了策略如何集成工作负载级和基础设施级信任边界。
实施策略:四个阶段
零信任CI/CD可以分阶段实施:
-
清点流水线访问路径 识别外部服务、密钥管理器、云API和内部资源。
-
启用OIDC和SPIFFE 使用OIDC用于CI作业,使用SPIFFE为构建代理和运行时工作负载颁发身份。
-
添加基于Rego的策略执行 在构建、部署和运行时评估条件。将策略存储在版本控制中。
-
仅在策略检查成功后颁发访问权限 使用快速过期且范围限定于特定任务的短期令牌。
开发者友好的安全控制
零信任CI/CD不会减慢开发人员速度——它提供一致的防护栏。策略可以启用临时访问、强制执行理由或控制敏感操作。
具有时间限制范围的临时调试访问
|
|
需要注释的高风险部署
|
|
这些安全措施与操作实践保持一致,同时支持速度和自主性。
结论
零信任CI/CD提供了一种可扩展的、基于证据的方法来保护现代软件交付流水线。它通过执行可验证身份、运行时上下文检查和基础设施级验证来消除静态信任假设。
此模型遵循防御深度原则,与NIST和DoD关于零信任架构的指南保持一致。通过在每一层执行策略——谁触发了作业、运行什么代码、在哪里运行以及在什么条件下运行——组织可以减少暴露、提高问责制并支持大规模安全自动化。
关键实践包括:
- 使用OIDC和SPIFFE的短期身份令牌
- 使用Rego和Open Policy Agent的策略执行
- 具有运行时上下文的范围受限、时间限制的访问
- 构建代理和运行器的执行环境验证
- 由意图、上下文、身份和工作负载证明控制的凭证颁发
这些基础使CI/CD系统能够快速移动,同时在整个交付生命周期中保持信任、控制和安全性。