3. 权限矩阵理论基础
在 CI/CD 流水线中,权限矩阵是安全控制的基石。错误的权限配置可能导致未授权部署、敏感信息泄露或流水线被恶意篡改。本节系统梳理三种主流权限模型(RBAC、ABAC、PBAC)的核心差异,并深入讲解最小权限与职责分离两大原则在流水线中的落地方法。
3.1 三种权限模型核心对比
下表从定义、授权粒度、适用场景、变更成本四个维度对比 RBAC、ABAC、PBAC 模型:
| 维度 | RBAC(基于角色) | ABAC(基于属性) | PBAC(基于策略) |
|---|---|---|---|
| 授权依据 | 用户所属角色 | 主体/资源/环境属性 | 可编程策略规则 |
| 粒度 | 粗粒度(角色级) | 细粒度(属性级) | 极细粒度(规则级) |
| 典型场景 | 团队权限划分、环境隔离 | 动态条件授权(如时间、IP) | 合规策略、多条件组合 |
| 变更成本 | 低(仅调整角色映射) | 中(需维护属性字典) | 高(需策略引擎与测试) |
| 流水线适用性 | ★★★★☆ | ★★★☆☆ | ★★★★★ |
实践建议:大多数 CI/CD 平台(如 GitLab、Jenkins、GitHub Actions)原生支持 RBAC。当需要“仅允许安全团队在非工作时间触发生产环境部署”这类条件时,应引入 ABAC 或 PBAC 作为补充。
3.2 三种模型结构对比图
下图展示 RBAC、ABAC、PBAC 在 CI/CD 流水线中的授权路径差异:
3.3 最小权限原则(Principle of Least Privilege)
最小权限原则要求每个主体(用户、服务账号、流水线 Job)只拥有完成其任务所必需的最小权限集合。在 CI/CD 流水线中,该原则的落地包含三个层次:
- Job 级权限隔离:每个流水线 Job 使用独立的临时凭证,而非共享全局 Token。
- 环境级权限控制:开发环境 Job 无权写入生产环境制品仓库。
- 操作级权限裁剪:只读操作(如代码检出)不应附带写权限。
关键指标:权限冗余度 = 实际授予权限数 / 任务必需权限数。理想值为 1.0,超过 1.5 即视为高风险配置。
3.4 职责分离原则(Separation of Duties)
职责分离要求一个关键流程中的多个步骤必须由不同主体执行,防止单点滥用。在流水线中,典型的职责分离场景包括:
| 流水线阶段 | 执行者 A | 执行者 B | 防止的风险 |
|---|---|---|---|
| 代码提交 → 代码审查 | 开发者 | 代码审查员(不同人) | 未审查代码合入 |
| 构建 → 发布审批 | CI 系统 | 发布经理(人工审批) | 未授权发布 |
| 制品签名 → 部署 | 签名服务(独立账号) | 部署服务(独立账号) | 篡改制品直接部署 |
| 密钥读取 → 密钥轮换 | 应用服务 | 安全管理员 | 密钥泄露后无法轮换 |
3.5 权限模型选择与组合策略
实际 CI/CD 系统通常采用混合模型。下图展示一种推荐的组合架构:
3.6 权限矩阵安全测试要点
在 CI/CD 流水线中验证权限矩阵时,应重点覆盖以下测试场景:
- 角色越权测试:使用低权限 Token 尝试执行高权限操作(如触发生产部署)。
- 属性篡改测试:伪造请求中的环境属性(如将
environment: staging改为environment: production)。 - 策略绕过测试:构造特殊输入绕过 PBAC 策略引擎的正则或条件判断。
- 职责分离验证:确认同一账号无法同时完成“提交代码”和“审批发布”两个步骤。
- 最小权限审计:扫描流水线配置中所有 Job 的权限声明,标记超出任务范围的权限。
常见陷阱:许多团队在流水线中使用“管理员”级别的 Personal Access Token 作为 CI 触发凭证,这直接违反了最小权限原则。应改为使用项目级、Job 级的临时 OIDC Token。
3.7 合规边界验证清单
针对权限矩阵的合规验证,建议建立以下检查清单:
| 检查项 | 合规标准 | 验证方法 |
|---|---|---|
| 角色定义完整性 | 每个团队有独立角色,无共享角色 | 审计角色列表与组织架构对比 |
| 权限继承关系 | 无隐式继承导致权限扩散 | 绘制角色权限继承图 |
| 临时凭证有效期 | Job 级凭证有效期 ≤ 1 小时 | 检查 OIDC Token 配置 |
| 审批节点强制 | 生产环境部署必须经过人工审批 | 验证流水线 YAML 中 when: manual 配置 |
| 权限回收机制 | 离职员工权限在 24 小时内回收 | 检查 SCIM 同步日志 |
通过系统化应用 RBAC、ABAC、PBAC 模型,并严格执行最小权限与职责分离原则,CI/CD 流水线的权限矩阵可以从“宽松信任”模式转变为“零信任”模式,显著降低因权限滥用导致的安全事件概率。