はじめに
gitやgithubでこんなときありますよね。
- ID/Passwordなどの秘匿情報をリポジトに置きたい
- がcommitはしたくない
通常は.gitignore
に指定しておけば良い。
しかし、一時的にファイル名を変えて使いたい時(たとえば一時的にID/Passファイルをコピーして使うなど)に.gitignore
をすり抜けてcommitしてしまうことがあります。
その状態で、もしcommit & pushしてしまうとgithub上にはログとして残ってしまうので面倒...!
そんなことを未然に防止するgit-secret
のメモです。
(ちなみにこの記事はMac環境で試しています)
アジェンダ
1. git-secrets
とは
git-secrets
というものを使います。
公式は以下です。
https://github.com/awslabs/git-secrets
descriptionの通りですが以下が説明です。
git-secretsは、commits, commit messagesをスキャンして、gitリポジトリにシークレットが追加されないようにします。 commits, commit messagesが禁止されている正規表現パターンと一致する場合、コミットは拒否されます。
2. git-secretsのインストール
Mac環境であればbrewでインストールできます。楽ちん。
$ brew install git-secrets
3. git-secrets管理化にする
これも簡単で、対象のリポジトリでgit secrets --install
とするだけです。
# 対象のリポジトリでinitかcloneをする $ git clone / git init # 対象のリポジトリをgit secrets管理化にする $ 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
4. git-secretsにcommitさせたくない文字列を登録する
正規表現の形でマッチさせることができます。
複数登録できるので、マッチさせたい文字列ごとに登録します。
git secrets --add "BASIC_AUTH_ID\:\s*\".+\""
ちなみに、登録した検出パターンの確認は--list
オプションで。
$ git secrets --list secrets.patterns BASIC_AUTH_ID\:\s*".+
5. commit時にgit-secretsによりエラーになる確認
適当なファイルを作ってadd / commitしてみます。
commit時にエラーになることが確認できます。
今回は、BASIC認証のID/Passwordのファイルを置く必要があると想定します。
basic.yaml
というファイルを作成し、add / commitします。
# basic.yamlを作成 $ vim basic.yaml ----vim追記---- BASIC_AUTH_ID: "hogehoge" BASIC_AUTH_PW: "fugafuga" -------------- # add / commit $ git add basic.yaml $ git commit -m 'sample commit' basic.yaml:1:BASIC_AUTH_ID: "hogehoge" [ERROR] Matched one or more prohibited patterns Possible mitigations: - Mark false positives as allowed using: git config --add secrets.allowed ... - Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory - List your configured patterns: git config --get-all secrets.patterns - List your configured allowed patterns: git config --get-all secrets.allowed - List your configured allowed patterns in .gitallowed at repository's root directory - Use --no-verify if this is a one-time false positive
無事、エラーになることが確認できました。
6. git-secretsに登録した文字列を削除する
公式には削除するオプションはなさげでした。
そのため手動で削除します。
まず、どこに登録されるのか。
それは[your repo]/.git/config
に登録されます。
つまり、config内から直接消せばOKです。
# .git/configを確認してみる $ tail -n 2 .git/config [secrets] patterns = BASIC_AUTH_ID\\:\\s*\".+\" # vimなりで直接消す $ vim .git/config # ↑で消したてい # 再度確認してみる git secrets --list
参考
おわりに
team開発で設定する場合はshなんかにしておきたいですね!