下 git-secret:在 Git 存储库中加密和存储密钥( 二 )

工作流程使用 git-secret 非常简单:

  • 初始化 git-secret
  • 添加所有用户 。
  • 添加所有机密文件并确保这些文件通过 .gitignore 被忽略 。
  • 加密文件 。
  • 如果团队其他成员对文件进行更改 , 则需要解密文件→更新文件→再次提交加密文件
  • 如果对解密的文件进行更改 , 修改完需要再次重新进行加密 。
下面的“流程挑战”部分展示了一些在可能遇到的问题 , “场景”部分将会展示一些常见场景的具体示例 。
流程中的挑战从流程的角度 , 一起来看看在过程中可能遇到的一些困难和挑战 , 以及如何处理解决 。
更新机密更新机密时 , 请确保先解密文件 , 从而避免使用可能仍存在本地的旧文件 。可以通过检查最新的 main 分支并运行 git secret reveal , 来获得最新版本的机密文件 。也可以使用 post-merge Git hook 自动执行此操作 , 不过要注意覆盖本地机密文件的风险哦 。
代码审查和合并冲突由于无法对加密文件进行很好的区分 , 因此当涉及机密时代码审查变得更加困难 。这是可以尝试使用 GitLab 进行审查 , 首先检查 .gitsecret/paths/mapping.cfg 文件的差异 , 在 UI 中查看哪些文件已更改 。
【下 git-secret:在 Git 存储库中加密和存储密钥】此外 , 可以根据以下步骤来查看:
  • 检查 main 分支 。
  • 通过 git secret reveal -f 解密文件
  • 查看 feature-branch.
  • 运行 git secret changes 来查看 main 的解密文件和feature-branch 中加密文件之间的差异 。
当多个团队成员需要同时修改不同分支上的机密文件时 , 情况会更加复杂一些 , 因为Git 无法智能处理增量更新 。
本地 git-secret 和 gpg 设置当团队的所有人员将git-secret 安装在本地 , 并且使用他们自己的 gpg 密钥 , 这也意味着团队的成本会随之增加 , 原因如下:
  • 新加入开发团队的人员需要:
    • 本地安装 git-secret(*)
    • 在本地安装和设置 gpg(*)
    • 创建 gpg 密钥对
  • 必须由所有其他团队成员 (*) 添加公钥 。
  • 必须通过添加密钥的用户 git secret tell
  • 机密需要重新加密 。
对于离开团队的人员:
  • 所有其他团队成员(*) 都需要删除公钥 。
  • 通过 git secret killperson 删除密钥的用户 。
  • 机密需要重新加密 。
另外 , 需要确保 git-secretgpg 版本保持最新 , 避免遇到任何兼容性问题 。作为替代方案 , 也可以通过 Docker 处理 , 而上述步骤中标注(*) 则可以省去 , 也就是不需要设置本地的 git-secretgpg
为了更加便捷 , 将存储库中每个开发人员的公共 gpg 密钥放在 .dev/gpg-keys/ , 而私钥命名为 secret.gpg 并放在代码库的根目录中 。
在此设置中 , secret.gpg 还必须被添加到 .gitignore 文件中 。
# File: .gitignore#...vendor/secret.gpg然后可以使用make目标简化导入:
# gpgDEFAULT_SECRET_GPG_KEY?=secret.gpgDEFAULT_PUBLIC_GPG_KEYS?=.dev/gpg-keys/*.PHONY: gpggpg: ## Run gpg commands. Specify the command e.g. via ARGS="--list-keys"$(EXECUTE_IN_APPLICATION_CONTAINER) gpg $(ARGS).PHONY: gpg-importgpg-import: ## Import a gpg key file e.g. via GPG_KEY_FILES="/path/to/file /path/to/file2"@$(if $(GPG_KEY_FILES),,$(error GPG_KEY_FILES is undefined))"$(MAKE)" -s gpg ARGS="--import --batch --yes --pinentry-mode loopback $(GPG_KEY_FILES)".PHONY: gpg-import-default-secret-keygpg-import-default-secret-key: ## Import the default secret key"$(MAKE)" -s gpg-import GPG_KEY_FILES="$(DEFAULT_SECRET_GPG_KEY)".PHONY: gpg-import-default-public-keysgpg-import-default-public-keys: ## Import the default public keys"$(MAKE)" -s gpg-import GPG_KEY_FILES="$(DEFAULT_PUBLIC_GPG_KEYS)" .PHONY: gpg-initgpg-init: gpg-import-default-secret-key gpg-import-default-public-keys ## Initialize gpg in the container, i.e. import all public and private keys

经验总结扩展阅读