Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

git cryptを導入する

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
11
Help us understand the problem. What are the problem?