用途
在 CI/CD 流水线中实现安全的密钥(secrets)管理,避免将敏感信息硬编码进代码或配置。适用于存储 API 密钥与凭据、管理数据库密码、处理 TLS 证书、自动轮换密钥以及实现最小权限访问。
支持的密钥管理工具
- HashiCorp Vault:集中式密钥管理、动态密钥生成、密钥轮换、审计日志、细粒度访问控制。
- AWS Secrets Manager:AWS 原生方案,支持自动轮换、与 RDS 集成、CloudFormation 支持。
- Azure Key Vault:Azure 原生方案,HSM 支持的密钥、证书管理、RBAC 集成。
- Google Secret Manager:GCP 原生方案,支持版本控制、IAM 集成。
使用方式
HashiCorp Vault 集成:可启动开发服务器(vault server -dev),设置 VAULT_ADDR 与 VAULT_TOKEN 环境变量,启用 kv-v2 密钥引擎,并通过 vault kv put 存储密钥。在 GitHub Actions 中可通过 hashicorp/vault-action@v2 导入密钥;在 GitLab CI 中可用 vault:1.17 镜像,结合 vault kv get 读取字段。
AWS Secrets Manager 集成:用 aws secretsmanager create-secret 创建密钥;在 GitHub Actions 中先配置 AWS 凭据,再用 aws secretsmanager get-secret-value 读取,并通过 ::add-mask:: 掩码后写入 GITHUB_ENV。Terraform 中可通过 aws_secretsmanager_secret_version 数据源读取,并在 aws_db_instance 资源中使用。
平台原生方案:GitHub 支持组织/仓库密钥与环境密钥,以 secrets.* 形式注入环境变量;GitLab 支持项目 CI/CD 变量,并提供受保护(仅受保护分支可用)、掩码(日志中隐藏)与文件类型变量。
最佳实践
切勿将密钥提交到 Git;按环境使用不同密钥;定期轮换密钥;实施最小权限访问;启用审计日志;使用密钥扫描工具(GitGuardian、TruffleHog);在日志中掩码密钥;静态加密密钥;尽量使用短期令牌;记录密钥需求。
密钥轮换
AWS 自动轮换:通过 Lambda 获取当前密钥、生成强密码、更新数据库密码并回写密钥。手动轮换流程:生成新密钥、在密钥库中更新、更新应用使用新密钥、验证功能、吊销旧密钥。
External Secrets Operator
用于 Kubernetes 集成,可定义 SecretStore(如 Vault 后端,指定 server、path、version 及 Kubernetes 认证)与 ExternalSecret(设置 refreshInterval、secretStoreRef、target,以及从远端 key 映射 username、password 等字段)。
密钥扫描
可在 pre-commit 钩子中用 TruffleHog Docker 镜像扫描文件系统,若检测到密钥则阻止提交;也可在 CI/CD 的 security 阶段运行 trufflehog filesystem 进行扫描。
相关技能
github-actions-templates(GitHub Actions 集成)、gitlab-ci-patterns(GitLab CI 集成)、deployment-pipeline-design(流水线架构)。