本文档介绍 Gumroad 基础设施中使用的密钥管理系统,用于在 CI/CD 部署期间安全地处理敏感配置数据。该系统将密钥与主代码库分离,将其存储在外部仓库中,并在构建过程中进行复制。
有关通用环境配置,请参阅环境变量。有关利用这些密钥的部署自动化,请参阅部署自动化。
密钥管理系统遵循关注点分离原则,敏感数据存储在专用的外部仓库中,并在部署期间拉取到应用程序中。
来源: .buildkite/scripts/copy_secrets.sh1-48
copy_secrets 函数协调将密钥获取并部署到应用程序环境的整个过程。
来源: .buildkite/scripts/copy_secrets.sh10-47
| 可变 | 目的 | 必填 |
|---|---|---|
CREDENTIALS_REPO | 包含密钥的 Git 仓库 URL | 是 |
CREDENTIALS_TMP_DIR | 用于克隆的临时目录 | 否(默认为 /tmp/gumroad-deployment-credentials) |
该脚本执行多项关键文件操作
git clone --depth 1 进行高效的浅层克隆buildkite-agent:buildkite-agent来源: .buildkite/scripts/copy_secrets.sh19 .buildkite/scripts/copy_secrets.sh25-28 .buildkite/scripts/copy_secrets.sh34-41
该系统排除特定文件,以防止污染应用程序环境
来源: .buildkite/scripts/copy_secrets.sh25-28
密钥管理系统实施了针对文件权限和访问控制的特定安全模型
buildkite-agent:buildkite-agent 所有sudo 进行权限提升dirname 提取每个文件的目录路径来源: .buildkite/scripts/copy_secrets.sh36-41
该系统包含全面的日志记录和错误处理机制
CREDENTIALS_REPO 环境变量时返回退出代码 1set -e 以实现快速失败行为来源: .buildkite/scripts/copy_secrets.sh1-8 .buildkite/scripts/copy_secrets.sh11-14 .buildkite/scripts/copy_secrets.sh45-46
密钥管理系统作为应用程序部署前的先决步骤,与更广泛的 CI/CD 流水线集成。copy_secrets.sh 脚本在 Buildkite 流水线期间执行,以确保在应用程序启动之前所有必要的密钥都可用。
这种分离确保: