git-cryptを使って公開したらやばい情報を暗号化して管理する
社内で開発プロジェクトにgit-cryptを導入しようとした時のまとめ
※ クライアントはmac前提でhomebrew導入済み
GPGを使って公開鍵秘密鍵を用い、gitリモート上は暗号化したファイルを管理し、ローカルでは秘密鍵で復号化したファイルを扱う。
パッケージインストール
【やる人:プロジェクトメンバー全員】
以下をローカルインストール
- GPG関連
$ brew install gnupg gnupg2 pinentry-mac
$ mkdir ~/.gnupg
$ echo "pinentry-program /usr/local/bin/pinentry-mac" >>~/.gnupg/gpg-agent.conf
- git-crypt
brew install git-crypt
鍵を作る
【やる人:最低導入者一人。個々に管理したい場合は全員】
ローカルで以下を実行
- キーペア作成
$ gpg --generate-key
# 対話形式でuserid, email, password(任意)を入力
- 公開鍵エクスポート
$ gpg --output [任意の公開鍵名].gpg --export [作成したキーのemail]
gitリポジトリへの導入
【やる人:導入者】
- 自分以外のチームメンバーの鍵を登録する場合(公開鍵のインポート)
# 公開鍵をインポート(事前に公開鍵をもらっとく)
$ gpg --import [貰った公開鍵ファイル]
# 鍵を信頼する手続き
$ gpg --sign-key [上の鍵で登録したemail]
- リポジトリ適用
# gitリポジトリルートで実行
$ git crypt init
# 対象メンバーを登録。自分もしくは自分以外の事前に上で公開鍵をインポートしたメンバーを指定(人数分実行)
$ git crypt add-gpg-user [鍵登録してるemail]
リポジトリルートに .git-crypt
ディレクトリが作成され、 .git-crypt/keys/default/0/
に公開鍵が配置される
- 秘密情報ファイルの指定
暗号化してgit管理したいファイルをリポジトリルートの.gitattributes
に記載
# ファイル数分記載する
$ vi .gitattributes
[暗号化したいファイル名] filter=git-crypt diff=git-crypt
...
- gitに登録
普通にaddしてcommit
ローカル上は暗号化されてないように存在しているが、リモートにプッシュしてリモート上で見ると暗号化されたファイルとなっている
※.git-crypt
.gitattributes
をgitignoreしたらダメ
プロジェクト導入
【やる人:リポジトリ導入者以外全員】
何もしないと暗号化されたファイルがローカルに存在する事になるので復号化処理をする。
たまに暗号化してたら同様に行う。
# 対象リポジトリクローンとか導入後のmasterを反映したのち
$ git-crypt unlock
一つの鍵でチーム運用
以下のいずれかで行う
1. 対象鍵を共有する場合
- 鍵作成者
# 対象鍵を生成 (例:taishoukagi.key)
git-crypt export-key taishoukagi.key
- 鍵貰う人
事前に上記で生成したtaishoukagi.key
を貰っておく
# ローカルに配置 (例:~/.gnupg/) 後、unlockする
git-crypt unlock ~/.gnupg/taishoukagi.key
2. 秘密鍵を共有する場合
- 鍵作成者
# 公開鍵のエクスポート
$ gpg -a --export [キー登録されてるemail] > public.txt
# 秘密鍵のエクスポート
$ gpg -a --export-secret-keys [キー登録されてるemail] > secret.txt
# 公開鍵の信用情報エクスポート
$ gpg --export-ownertrust > trust.txt
- 鍵貰う人
事前に上記で作成したpublic.txt
secret.txt
trust.txt
を貰っておく
# 公開鍵のインポート
$ gpg --import public.txt
# 秘密鍵のインポート
$ gpg --import --allow-secret-key-import secret.txt
# 公開鍵の信用情報インポート
$ gpg --import-ownertrust trust.txt
# 状態の確認 uidが[究極]になってたらOK
$ gpg --list-secret-keys
参考
https://dev.classmethod.jp/tool/git/git-crypt/
https://text.baldanders.info/openpgp/openpgp-key-management/
https://lpi.or.jp/ex/303/ex_755.shtml
https://cast-a-spell.at.webry.info/200701/article_16.html