git-secrets 導入

created at 2019-08-22 15:42+0900

git-secrets とはコミットやコミットメッセージに機密情報が含まれていた場合、叱ってくれるありがたいツール。

以下、git-secrets の導入手順の覚書。

git secrets インストール

brew install git-secrets

git リポジトリに git hooks をインストール

# 作成ずみのgit リポジトリへ移動
cd ~/Documents/XDOCS/ && ls -la && pwd

# git hooks インスコ
git secrets --install

# 実行結果
MacBookPro:XDOCS ricotta$ git secrets --install
✓ Installed commit-msg hook to .git/hooks/commit-msg
✓ Installed pre-commit hook to .git/hooks/pre-commit
✓ Installed prepare-commit-msg hook to .git/hooks/prepare-commit-msg

# aws用の設定を登録
git secrets --register-aws

git のグローバル設定に追加

グローバル設定の領域にhookスクリプトと探索パターン設定を追加する。

# aws用の設定を登録
git secrets --register-aws --global

# hooksのテンプレートをインストール
ls -la $HOME/.config/git/templates
mkdir -p $HOME/.config/git/templates
git secrets --install $HOME/.config/git/templates

# 実行結果
MacBookPro:XDOCS ricotta$ git secrets --install $HOME/.config/git/templates
✓ Installed commit-msg hook to /Users/ricotta/.config/git/templates/hooks/commit-msg
✓ Installed pre-commit hook to /Users/ricotta/.config/git/templates/hooks/pre-commit
✓ Installed prepare-commit-msg hook to /Users/ricotta/.config/git/templates/hooks/prepare-commit-msg

# テンプレートディレクトリをグローバル設定へ追加
git config --global init.templateDir $HOME/.config/git/templates

独自探査パターン設定

秘密のことば(のパターン)を改行区切りで出力するコマンドをプロバイダとして登録できる。

cat <<EOF>>SECRET_WORDS.txt
ぱすわーどに
しそうなことば
こじんじょうほう
へいとわーど
ひみつじょうほう
とかを改行区切りで
せいきひょうげんもおけ
EOF

# 探索パターン登録
git secrets --add-provider -- cat SECRET_WORDS.txt

# 設定内容確認
git secrets --list
git config --local --list | grep secrets

# NGワードファイルはgit管理外にする
echo 'SECRET_WORDS.txt' >> .gitignore

# 設定を削除する場合
git config --unset secrets.providers 'cat SECRET_WORDS.txt'

機密情報探索

コミット時のhookだけじゃなくて、任意のファイルを探索できる。

# git ls-files で該当するファイルを対象に探索する。
git secrets --scan -r

# インデックスに登録されたファイルを対象に探索する。
git secrets --scan --cached

# indexに入れてないファイルを対象に探索する。
git secrets --scan --no-index

# untrackedファイルも対象にして探索する。
git secrets --scan --untracked

# コミット履歴を探索する。
git secrets --scan-history

(おまけ)git 設定ファイルの場所

git 設定ファイルがいっぱいあって困った。独自hookとか作っていなかったから、テンプレートファイルはどこへ置けばいいのか悩んだ。(結局上記のようにインストールしたけどさ)

種類

パス

システム設定

/usr/local/etc/gitconfig

ユーザごとのグローバルignore設定

$HOME/.config/git/ignore

ユーザごとのグローバル設定

$HOME/.gitconfig

ローカル設定

{各リポジトリのディレクトリ}/.git/config

デフォルトの?テンプレートディレクトリ

/usr/local/share/git-core/templates

まとめ

ファイルをgrepしてNGワードの書かれたファイルを出力するスクリプトを自分で作っていたけれど、もっと良いものがすでにあったよ。ありがち。