上 git-secret:在 Git 存儲庫中加密和存儲密鑰

當涉及處理機密信息(如密碼、令牌、密鑰文件等)等,以下問題值得考慮:

  • 安全性十分重要,但高安全性往往伴隨著高度的不便 。
  • 在團隊中 , 共享某些密鑰有時無法避免(因此現在我們需要考慮在多人之間分發和更新密鑰的安全方法) 。
  • 具體的密鑰通常取決于環境 。
目前市面上已經存在許多較為成熟的密鑰管理產品,比如 HashiCorp Vault,AWS Secrets Manager 以及 GCP Secret Manager 。由于這些產品需要集成和維護等服務,因此在項目中引入會增加一定成本和開銷 。閱讀本文 , 將帶你了解如何在 Docker 容器中設置 git-secretgpg
本文將對以下幾點展開講解:
  • 識別包含密鑰的文件
  • 確保將密鑰添加到.gitignore
  • 通過 git-secret 進行加密
  • 將加密文件提交到存儲庫
在最后我們將能夠調用:
make secret-decrypt這將會披露代碼庫中的密鑰,在必要時對其進行修改,然后運行:
make secret-encrypt需要再次加密密鑰 , 以便提交(并推送到遠程存儲庫),要查看實際效果請運行以下命令:
【上 git-secret:在 Git 存儲庫中加密和存儲密鑰】# 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"記住不能共享此密鑰 。
-----BEGIN PGP PRIVATE KEY BLOCK-----lQOYBF7VVBwBCADo9un+SySu/InHSkPDpFVKuZXg/s4BbZmqFtYjvUUSoRAeSejvG21nwttQGut+F+GdpDJL6W4pmLS31Kxpt6LCAxhID+PRYiJQ4k3inJfeUx7Ws339XDPO3Rys+CmnZchcEgnbOfQlEqo51DMj6mRF2Ra/6svh7lqhrixGx1BaKn6VlHkC...ncIcHxNZt7eK644nWDn7j52HsRi+wcWsZ9mjkUgZLtyMPJNB5qlKQ18QgVdEAhuZxT3SieoBPd+tZikhu3BqyIifmLnxOJOjOIhbQrgFiblvzU1iOUOTOcSIB+7A=YmRm-----END PGP PRIVATE KEY BLOCK-----所有密鑰都可以通過以下方式列出:
gpg --list-secret-keys輸出:
$ gpg --list-secret-keys/root/.gnupg/pubring.kbx------------------------sec rsa2048 2022-03-27 [SCEA]74082D81525723F5BF5B2099E1E734E00B611C26uid [ultimate] Pascal Landau <pascal.landau@example.com>ssb rsa2048 2022-03-27 [SEA]

推薦閱讀