在 CI/CD 流水线中集成密钥轮转(Key Rotation)是确保持续交付过程中密钥安全性和合规性的关键实践。以下是系统化的实施方案,涵盖工具链、流程设计和最佳实践:
阶段 | 操作内容 |
---|---|
代码提交阶段 | 触发密钥轮转条件检测(如版本标签、手动审批)。 |
构建阶段 | 生成新密钥(或从KMS获取),更新加密配置。 |
测试阶段 | 验证新密钥的兼容性(如TLS握手、数据库连接)。 |
部署阶段 | 分批次更新服务密钥,确保滚动升级安全。 |
监控阶段 | 检测密钥轮转后的服务状态,触发回滚条件。 |
kubectl
或Helm动态更新Secret:kubectl create secret generic db-creds \ --from-literal=password=new_password \ --dry-run=client -o yaml | kubectl apply -f -steps
中嵌入密钥轮转逻辑:pipeline { agent any stages { stage('Rotate Key') { steps { sh 'vault write database/rotate-root/my-database' } } } }rules
触发密钥更新任务:rotate_key: stage: deploy script: - aws secretsmanager update-secret-version-stage ... rules: - if: $CI_COMMIT_BRANCH == "main"v1.2.3
)或合并请求(Merge Request):# GitLab Webhook示例:检测标签触发轮转 if [[ "$CI_COMMIT_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then ./rotate_keys.sh fi@RefreshScope
)。# GitLab CI/CD示例
stages:
- rotate_tls
rotate_tls_cert:
stage: rotate_tls
script:
- openssl req -x509 -newkey rsa:2048 -keyout tls.key -out tls.crt -days 365 -nodes
- kubectl create secret tls tls-secret --cert=tls.crt --key=tls.key --dry-run=client -o yaml | kubectl apply -f -
only:
- main
#!/bin/bash
# rotate_db_password.sh
NEW_PASSWORD=$(openssl rand -base64 12)
vault write database/creds/my-role \
username=db_user \
password=$NEW_PASSWORD
kubectl set secret generic db-creds \
--from-literal=password=$NEW_PASSWORD