Files
nexus/wiki/concepts/CI-CD-Secrets.md

111 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "CI/CD-Secrets"
type: concept
tags:
- CI/CD
- Security
- DevOps
- Cloud
---
## Definition
CI/CD Secrets 是指在持续集成/持续部署CI/CD流水线中管理敏感信息密码、API Key、证书、私钥等的最佳实践。传统 CI/CD 流程中这些 secrets 通常以明文形式硬编码在配置文件、环境变量或脚本中,造成严重的安全风险。
## Security Problems with Plain-Text Secrets
1. **代码仓库泄露**Secrets 可能意外提交到 Git 等版本控制系统
2. **日志暴露**Secrets 在构建日志中可见
3. **网络传输**Secrets 在流水线各阶段间传输时可能被截获
4. **审计缺失**:无法追踪谁在何时访问了哪些凭据
5. **轮换困难**:硬编码的 Secrets 难以定期轮换
## Best Practices for CI/CD Secrets Management
### 1. Centralized Secrets Management
将所有 Secrets 集中存储在专用服务中:
- AWS Secrets Manager
- HashiCorp Vault
- Azure Key Vault
- GCP Secret Manager
### 2. Dynamic Credentials
使用动态临时凭证替代静态密钥:
```yaml
# ❌ 危险:静态密钥
environment:
DB_PASSWORD: "static_password_123"
# ✅ 推荐:动态获取
environment:
DB_PASSWORD:
from_secret: aws:database-password
```
### 3. Pipeline Integration Pattern
```
┌─────────────┐ Request ┌─────────────────┐
│ CI/CD │ ──────────────→│ Secrets │
│ Pipeline │ │ Manager │
└─────────────┘←────────────── └─────────────────┘
Dynamic Secret
```
### 4. GitOps with Secrets
使用 Sealed Secrets、Vault Agent 或 cloud-native solutions 实现 Git 安全存储:
- **Sealed Secrets**:将 secrets 加密后存储在 Git 中
- **External Secrets Operator**Kubernetes 原生 secrets 管理
- **AWS Secrets Manager + SSM**AWS 原生解决方案
## AWS Implementation Example
```python
# Lambda function for secrets retrieval in CI/CD
import boto3
import os
def get_db_credentials():
client = boto3.client('secretsmanager')
response = client.get_secret_value(
SecretId='prod/database/credentials'
)
return json.loads(response['SecretString'])
```
## Security Controls
1. **最小权限**CI/CD 服务账号仅授予必要的 secrets 读取权限
2. **网络隔离**Secrets 服务在私有网络中,不暴露给公网
3. **审计日志**:记录所有 secrets 访问操作
4. **自动轮换**Secrets 定期自动轮换,无需人工干预
5. **临时凭证**:使用 STS 临时凭证替代长期密钥
## Related Concepts
- [[SecretsManagement]]:敏感信息管理的整体框架
- [[SecretRotation]]:密钥轮换机制
- [[GitOps]]:基础设施即代码的 Git 工作流
- [[Infrastructure-as-Code]]:基础设施即代码
## Related Entities
- [[AWS]]AWS Secrets Manager 提供方
- [[HashiCorp]]HashiCorp Vault 提供方
- [[ControlTower]]AWS 多账户治理框架
## Sources
- [[ctp-topic-37-secrets-certificates-management]] — CI/CD secrets cleanup implementation phase
- [[ctp-topic-62-aws-secrets-manager]] — JDBC Wrapper + CI/CD integration details
## Aliases
- Pipeline Secrets
- Build Secrets
- Deployment Credentials
- GitOps Secrets