Appearance
密钥仓库
密钥仓库是 云原生构建 提供的高安全等级仓库,专用于存储和管理敏感信息(如密码、API 密钥、证书、令牌等)。它通过严格的访问控制、操作限制、审计日志与水印等多重安全机制,确保敏感数据的安全存储与合规使用。
创建密钥仓库
- 进入创建页面:登录账号后,点击此处进入仓库创建页面。
- 选择仓库类型并填写信息:在仓库类型中,务必选择 密钥仓库,并填写相应的仓库名称与描述。
- 完成创建:点击创建按钮,即可完成密钥仓库的创建。
核心特性
1. 操作限制
为确保安全,密钥仓库相比普通仓库存在严格的操作限制:
| 能力 | 普通仓库 | 密钥仓库 | 说明 |
|---|---|---|---|
| Git Clone 到本地 | ✅ | ❌ | 禁止将敏感数据下载到不受控的本地环境 |
| 本地推送代码 | ✅ | ❌ | 禁止从本地推送更改,防止引入风险 |
| Web 界面编辑文件 | ✅ | ✅ | 所有更改必须通过受审计的 Web 界面进行 |
| 创建分支/Tag/PR | ✅ | ✅ | 支持在受控范围内进行代码管理 |
| 被流水线引用 | ✅ | ✅ | 核心功能,支持在流水线中安全使用密钥 |
2. 安全增强机制
- 动态水印: 所有页面自动添加当前用户名的半透明水印,防止截图泄露并支持责任追溯。
- 完整的审计日志: 记录所有文件引用记录(何时、被哪条流水线引用),支持全链路溯源。
- 强制 Web 端操作: 仅支持在平台 Web 界面上编辑文件,从根本上杜绝本地环境带来的泄露风险。
- 严格的权限控制: 遵循系统统一的角色权限模型,精细化管控人员访问权限。
- 声明式访问范围: 可通过配置精确控制密钥文件的被引用条件。
在流水线中引用
1. 存储密钥文件
在密钥仓库中,通常使用 YAML 或 JSON 文件来结构化存储密钥。
yaml
# env.prod.yml
DOCKER_USER: "prod_username"
DOCKER_TOKEN: "PROD_TOKEN_PLACEHOLDER"
DOCKER_REGISTRY: "registry.prod.com"2. 注入为环境变量
在流水线配置 (.cnb.yml) 中,通过 imports 关键字引用密钥仓库中的文件,将其内容自动注入为流水线任务的环境变量。
yaml
main:
push:
- services:
- docker
imports:
- https://cnb.cool/<your-repo-slug>/-/blob/main/env.prod.yml
stages:
- name: 构建并推送镜像
script: |
docker login -u $DOCKER_USER -p "$DOCKER_TOKEN" $DOCKER_REGISTRY
docker build -t $DOCKER_REGISTRY/$CNB_REPO_SLUG_LOWERCASE:latest .
docker push $DOCKER_REGISTRY/$CNB_REPO_SLUG_LOWERCASE:latest3. 引用鉴权与范围控制
- 默认权限: 默认情况下,只有密钥仓库的管理员和负责人身份成员触发的流水线才有权引用该仓库中的文件。
- 放宽权限与精细控制: 若需允许更广泛的成员触发的流水线引用,必须在密钥文件中声明 allow_* 系列字段进行精细化授权:
allow_slugs: 限制只有特定仓库的流水线可以引用allow_events: 限制只有特定事件触发的流水线可以引用allow_branches: 限制只有特定分支触发的流水线可以引用allow_images: 限制只有特定镜像的插件任务可以引用
4. 防范流水线内泄漏
防护建议:
- 保护流水线配置本身: 将包含 imports 引用的流水线配置存放在一个独立的、权限受控的仓库中
- 使用保护分支: 结合密钥文件中的 allow_branches 规则,将其限制为只能在保护分支上使用
- 审计与日志监控: 定期检查流水线日志,关注异常行为
最佳实践
分离与分类
- 环境分离: 为生产环境、预发布环境、开发测试环境等分别创建不同的密钥仓库或文件
- 项目分离: 不同项目或应用使用独立的密钥仓库
- 集中管理: 建议在独立的顶级组织中统一管理所有密钥仓库
最小权限原则
- 角色控制: 审慎分配密钥仓库的"管理员"和"负责人"角色
- 范围控制: 积极使用 allow_* 系列配置,为每个密钥文件声明最小化的允许范围
降低配置泄露风险
- 将包含敏感引用的流水线逻辑封装在受控的公共配置库中
定期轮换与审计
- 密钥轮换: 建立定期轮换密钥的机制
- 权限审计: 定期审查审计日志,清理已无效的引用和授权规则