
关于
使用 Vault、AWS Secrets Manager 等工具的 CI/CD 管道安全密钥管理实践。
name: secrets-management description: "使用 Vault、AWS Secrets Manager 和其他工具的 CI/CD 流水线安全密钥管理实践。" risk: unknown source: community date_added: "2026-02-27"
密钥管理
使用 Vault、AWS Secrets Manager 和其他工具的 CI/CD 流水线安全密钥管理实践。
目的
在 CI/CD 流水线中实现安全的密钥管理,避免硬编码敏感信息。
何时使用此技能
- 存储 API 密钥和凭据
- 管理数据库密码
- 处理 TLS 证书
- 自动轮换密钥
- 实现最小权限访问
何时不使用此技能
- 你计划在源代码控制中硬编码密钥
- 你无法保护对密钥后端的访问
- 你只需要本地开发值而无需共享
说明
- 识别密钥类型、所有者和轮换要求。
- 选择密钥后端和访问模型。
- 集成 CI/CD 或运行时检索,使用最小权限。
- 验证轮换和审计日志。
安全
- 永远不要将密钥提交到源代码控制。
- 限制访问并记录密钥使用以供审计。
密钥管理工具
HashiCorp Vault
- 集中式密钥管理
- 动态密钥生成
- 密钥轮换
- 审计日志
- 细粒度访问控制
AWS Secrets Manager
- AWS 原生解决方案
- 自动轮换
- 与 RDS 集成
- CloudFormation 支持
Azure Key Vault
- Azure 原生解决方案
- HSM 支持的密钥
- 证书管理
- RBAC 集成
Google Secret Manager
- GCP 原生解决方案
- 版本控制
- IAM 集成
HashiCorp Vault 集成
设置 Vault
# Start Vault dev server
vault server -dev
# Set environment
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='root'
# Enable secrets engine
vault secrets enable -path=secret kv-v2
# Store secret
vault kv put secret/database/config username=admin password=secret
GitHub Actions 与 Vault
name: Deploy with Vault Secrets
on: [push]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Import Secrets from Vault
uses: hashicorp/vault-action@v2
with:
url: https://vault.example.com:8200
token: ${{ secrets.VAULT_TOKEN }}
secrets: |
secret/data/database username | DB_USERNAME ;
secret/data/database password | DB_PASSWORD ;
secret/data/api key | API_KEY
- name: Use secrets
run: |
echo "Connecting to database as $DB_USERNAME"
# Use $DB_PASSWORD, $API_KEY
GitLab CI 与 Vault
deploy:
image: vault:latest
before_script:
- export VAULT_ADDR=https://vault.example.com:8200
- export VAULT_TOKEN=$VAULT_TOKEN
- apk add curl jq
script:
- |
DB_PASSWORD=$(vault kv get -field=password secret/database/config)
API_KEY=$(vault kv get -field=key secret/api/credentials)
echo "Deploying with secrets..."
# Use $DB_PASSWORD, $API_KEY
参考: 见 references/vault-setup.md
AWS Secrets Manager
存储密钥
aws secretsmanager create-secret \
--name production/database/password \
--secret-string "super-secret-password"
在 GitHub Actions 中检索
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-2
- name: Get secret from AWS
run: |
SECRET=$(aws secretsmanager get-secret-value \
--secret-id production/database/password \
--query SecretString \
--output text)
echo "::add-mask::$SECRET"
echo "DB_PASSWORD=$SECRET" >> $GITHUB_ENV
- name: Use secret
run: |
# Use $DB_PASSWORD
./deploy.sh
Terraform 与 AWS Secrets Manager
data "aws_secretsmanager_secret_version" "db_password" {
secret_id = "production/database/password"
}
resource "aws_db_instance" "main" {
allocated_storage = 100
engine = "postgres"
instance_class = "db.t3.large"
username = "admin"
password = jsondecode(data.aws_secretsmanager_secret_version.db_password.secret_string)["password"]
}
GitHub Secrets
组织/仓库密钥
- name: Use GitHub secret
run: |
echo "API Key: ${{ secrets.API_KEY }}"
echo "Database URL: ${{ secrets.DATABASE_URL }}"
环境密钥
deploy:
runs-on: ubuntu-latest
environment: production
steps:
- name: Deploy
run: |
echo "Deploying with ${{ secrets.PROD_API_KEY }}"
参考: 见 references/github-secrets.md
GitLab CI/CD 变量
项目变量
deploy:
script:
- echo "Deploying with $API_KEY"
- echo "Database: $DATABASE_URL"
受保护和掩码变量
- 受保护:仅在受保护分支上可用
- 掩码:在作业日志中隐藏
兼容工具
Claude CodeCursor
标签
运维部署

