上 git-secret:在 Git 存储库中加密和存储密钥

当涉及处理机密信息(如密码、令牌、密钥文件等)等,以下问题值得考虑:

  • 安全性十分重要,但高安全性往往伴随着高度的不便 。
  • 在团队中,共享某些密钥有时无法避免(因此现在我们需要考虑在多人之间分发和更新密钥的安全方法) 。
  • 具体的密钥通常取决于环境 。
目前市面上已经存在许多较为成熟的密钥管理产品,比如 HashiCorp Vault,AWS Secrets Manager 以及 GCP Secret Manager 。由于这些产品需要集成和维护等服务,因此在项目中引入会增加一定成本和开销 。阅读本文,将带你了解如何在 Docker 容器中设置 git-secretgpg
本文将对以下几点展开讲解:
  • 识别包含密钥的文件
  • 确保将密钥添加到.gitignore
  • 通过 git-secret 进行加密
  • 将加密文件提交到存储库
在最后我们将能够调用:
make secret-decrypt这将会披露代码库中的密钥,在必要时对其进行修改,然后运行:
make secret-encrypt需要再次加密密钥,以便提交(并推送到远程存储库),要查看实际效果请运行以下命令:
# checkout the branchgit checkout part-6-git-secret-encrypt-repository-docker# build and start the docker setupmake make-initmake docker-buildmake docker-up# "create" the secret key - the file "secret.gpg.example" would usually NOT live in the repo!cp secret.gpg.example secret.gpg# initialize gpgmake gpg-init# ensure that the decrypted secret file does not existls passwords.txt# decrypt the secret filemake secret-decrypt# show the content of the secret filecat passwords.txtTooling我们在 PHP base 镜像中设置 gpggit-secret 以便这些工具在所有其他容器中都可用 。以下所有命令都在 application 容器中执行 。
请注意,git-secret 在主机系统和 docker 容器之间共享的文件夹中使用时需要注意 。将在下面称为 “git-secret 目录和gpg-agent socket”的部分中更详细地解释这一点 。
gpggpg 是The GNU Privacy Guard的缩写,是 OpenPGP 标准的开源实践 。简而言之,GNU允许我们创建一个个人密钥文件对(类似于 SSH 密钥),其中包含一个私有密钥和一个可以与您想要解密其消息的其他方共享的公共密钥 。
gpg 安装关于安装,我们可以简单地运行 apk add gnupg 并相应更新 .docker/images/php/base/Dockerfile
# File: .docker/images/php/base/DockerfileRUN apk add --update --no-cache \bash \gnupg \make \#...创建 gpg 密钥对我们需要通过以下方式创建 gpg 密钥对(Key Pair):
name="Pascal Landau"email="pascal.landau@example.com"gpg --batch --gen-key <<EOFKey-Type: 1Key-Length: 2048Subkey-Type: 1Subkey-Length: 2048Name-Real: $nameName-Email: $emailExpire-Date: 0%no-protectionEOF%no-protection 创建一个没有密码的key 。
输出:
$ name="Pascal Landau"$ email="pascal.landau@example.com"$ gpg --batch --gen-key <<EOF> Key-Type: 1> Key-Length: 2048> Subkey-Type: 1> Subkey-Length: 2048> Name-Real: $name> Name-Email: $email> Expire-Date: 0> %no-protection> EOFgpg: key E1E734E00B611C26 marked as ultimately trustedgpg: revocation certificate stored as '/root/.gnupg/opengpg-revocs.d/74082D81525723F5BF5B2099E1E734E00B611C26.rev'也可以在没有 --batch 标志的情况下以交互方式引导整个过程运行gpg --gen-key,然后导出、列出和导入私有 gpg Key,可以通过以下方式导出:
email="pascal.landau@example.com"path="secret.gpg"gpg --output "$path" --armor --export-secret-key "$email"

经验总结扩展阅读